Bagikan melalui


HoloLens (generasi ke-1) dan Azure 303: Pemahaman bahasa alami (LUIS)


Catatan

Tutorial Mixed Reality Academy dirancang dengan HoloLens (generasi ke-1) dan Mixed Reality Immersive Headsets dalam pikiran. Dengan demikian, kami merasa penting untuk meninggalkan tutorial ini di tempat bagi pengembang yang masih mencari panduan dalam mengembangkan untuk perangkat tersebut. Tutorial ini tidak akan diperbarui dengan toolset atau interaksi terbaru yang digunakan untuk HoloLens 2. Mereka akan dipertahankan untuk terus bekerja pada perangkat yang didukung. Akan ada serangkaian tutorial baru yang akan diposting di masa depan yang akan menunjukkan cara mengembangkan untuk HoloLens 2. Pemberitahuan ini akan diperbarui dengan tautan ke tutorial tersebut ketika diposting.


Dalam kursus ini, Anda akan mempelajari cara mengintegrasikan Pemahaman Bahasa ke dalam aplikasi realitas campuran menggunakan Azure Cognitive Services, dengan LANGUAGE Understanding API.

Hasil lab

Pemahaman Bahasa (LUIS) adalah layanan Microsoft Azure, yang menyediakan aplikasi dengan kemampuan untuk membuat arti dari input pengguna, seperti melalui mengekstrak apa yang mungkin diinginkan seseorang, dengan kata-kata mereka sendiri. Hal ini dicapai melalui pembelajaran mesin, yang memahami dan mempelajari informasi input, dan kemudian dapat membalas dengan informasi terperinci, relevan, dan. Untuk informasi selengkapnya, kunjungi halaman Azure Language Understanding (LUIS).

Setelah menyelesaikan kursus ini, Anda akan memiliki aplikasi headset imersif realitas campuran yang akan dapat melakukan hal berikut:

  1. Tangkap ucapan input pengguna, menggunakan Mikrofon yang terpasang pada headset imersif.
  2. Kirim dikte yang diambil, Azure Language Understanding Intelligent Service (LUIS).
  3. Minta LUIS mengekstrak arti dari informasi pengiriman, yang akan dianalisis, dan mencoba menentukan niat permintaan pengguna akan dibuat.

Pengembangan akan mencakup pembuatan aplikasi di mana pengguna akan dapat menggunakan suara dan/atau tatapan untuk mengubah ukuran dan warna objek dalam adegan. Penggunaan pengontrol gerakan tidak akan tercakup.

Dalam aplikasi Anda, terserah Anda tentang bagaimana Anda akan mengintegrasikan hasilnya dengan desain Anda. Kursus ini dirancang untuk mengajari Anda cara mengintegrasikan Layanan Azure dengan Proyek Unity Anda. Ini adalah tugas Anda untuk menggunakan pengetahuan yang Anda peroleh dari kursus ini untuk meningkatkan aplikasi realitas campuran Anda.

Bersiaplah untuk Melatih LUIS beberapa kali, yang tercakup dalam Bab 12. Anda akan mendapatkan hasil yang lebih baik semakin sering LUIS telah dilatih.

Dukungan perangkat

Kursus HoloLens Headset imersif
MR dan Azure 303: Pemahaman bahasa alami (LUIS) ✔️ ✔️

Catatan

Meskipun kursus ini terutama berfokus pada headset imersif Windows Mixed Reality (VR), Anda juga dapat menerapkan apa yang Anda pelajari dalam kursus ini ke Microsoft HoloLens. Saat mengikuti kursus, Anda akan melihat catatan tentang perubahan apa pun yang mungkin perlu Anda gunakan untuk mendukung HoloLens. Saat menggunakan HoloLens, Anda mungkin melihat beberapa gema selama pengambilan suara.

Prasyarat

Catatan

Tutorial ini dirancang untuk pengembang yang memiliki pengalaman dasar dengan Unity dan C#. Perlu diketahui juga bahwa prasyarat dan instruksi tertulis dalam dokumen ini mewakili apa yang telah diuji dan diverifikasi pada saat penulisan (Mei 2018). Anda bebas menggunakan perangkat lunak terbaru, seperti yang tercantum dalam artikel instal alat , meskipun tidak boleh diasumsikan bahwa informasi dalam kursus ini akan sangat cocok dengan apa yang akan Anda temukan di perangkat lunak yang lebih baru daripada apa yang tercantum di bawah ini.

Kami merekomendasikan perangkat keras dan perangkat lunak berikut untuk kursus ini:

Sebelum memulai

  1. Untuk menghindari masalah saat membangun proyek ini, sangat disarankan agar Anda membuat proyek yang disebutkan dalam tutorial ini di folder root atau near-root (jalur folder panjang dapat menyebabkan masalah pada build-time).

  2. Untuk mengizinkan komputer Anda mengaktifkan Dikte, buka Ucapan Privasi > Pengaturan > Windows, Penintaan & Pengetikan dan tekan tombol Aktifkan layanan ucapan dan ketik saran.

  3. Kode dalam tutorial ini akan memungkinkan Anda merekam dari Perangkat Mikrofon Default yang diatur di komputer Anda. Pastikan Perangkat Mikrofon Default diatur sebagai yang ingin Anda gunakan untuk mengambil suara Anda.

  4. Jika headset Anda memiliki mikrofon bawaan, pastikan opsi "Saat saya memakai headset saya, alihkan ke mikrofon headset" diaktifkan di pengaturan Portal Mixed Reality.

    Menyiapkan headset imersif

Bab 1 – Menyiapkan Portal Microsoft Azure

Untuk menggunakan layanan Luis Bahasa di Azure, Anda harus mengonfigurasi instans layanan agar tersedia untuk aplikasi Anda.

  1. Masuk ke Portal Microsoft Azure.

    Catatan

    Jika Anda belum memiliki akun Azure, Anda harus membuatnya. Jika Anda mengikuti tutorial ini dalam situasi ruang kelas atau lab, mintalah instruktur atau salah satu proktor untuk membantu menyiapkan akun baru Anda.

  2. Setelah Anda masuk, klik Baru di sudut kiri atas, dan cari Pemahaman Bahasa, dan klik Enter.

    Buat sumber daya LUIS

    Catatan

    Kata Baru mungkin telah diganti dengan Buat sumber daya, di portal yang lebih baru.

  3. Halaman baru di sebelah kanan akan memberikan deskripsi layanan Luis. Di kiri bawah halaman ini, pilih tombol Buat , untuk membuat instans layanan ini.

    Pembuatan layanan LUIS - pemberitahuan hukum

  4. Setelah Anda mengklik Buat:

    1. Sisipkan Nama yang Anda inginkan untuk instans layanan ini.

    2. Pilih Langganan.

    3. Pilih Tingkat Harga yang sesuai untuk Anda, jika ini pertama kalinya membuat Layanan LUIS, tingkat gratis (bernama F0) harus tersedia untuk Anda. Alokasi gratis harus lebih dari cukup untuk kursus ini.

    4. Pilih Grup Sumber Daya atau buat yang baru. Grup sumber daya menyediakan cara untuk memantau, mengontrol akses, menyediakan, dan mengelola penagihan untuk kumpulan aset Azure. Disarankan untuk menyimpan semua layanan Azure yang terkait dengan satu proyek (misalnya seperti kursus ini) di bawah grup sumber daya umum).

      Jika Anda ingin membaca selengkapnya tentang Grup Sumber Daya Azure, silakan kunjungi artikel grup sumber daya.

    5. Tentukan Lokasi untuk grup sumber daya Anda (jika Anda membuat Grup Sumber Daya baru). Lokasi idealnya akan berada di wilayah tempat aplikasi akan berjalan. Beberapa aset Azure hanya tersedia di wilayah tertentu.

    6. Anda juga perlu mengonfirmasi bahwa Anda telah memahami Syarat dan Ketentuan yang diterapkan pada Layanan ini.

    7. Pilih Buat.

      Membuat layanan LUIS - input pengguna

  5. Setelah mengklik Buat, Anda harus menunggu layanan dibuat, ini mungkin memakan waktu satu menit.

  6. Pemberitahuan akan muncul di portal setelah instans Layanan dibuat.

    Gambar pemberitahuan Azure baru

  7. Klik pemberitahuan untuk menjelajahi instans Layanan baru Anda.

    Pemberitahuan pembuatan sumber daya berhasil

  8. Klik tombol Buka sumber daya di pemberitahuan untuk menjelajahi instans Layanan baru Anda. Anda akan dibawa ke instans layanan LUIS baru Anda.

    Mengakses Kunci LUIS

  9. Dalam tutorial ini, aplikasi Anda harus melakukan panggilan ke layanan Anda, yang dilakukan melalui menggunakan Kunci Langganan layanan Anda.

  10. Dari halaman Mulai cepat, layanan LUIS API Anda, navigasikan ke langkah pertama, Ambil kunci Anda, dan klik Kunci (Anda juga dapat mencapainya dengan mengklik Kunci hyperlink biru, yang terletak di menu navigasi layanan, ditandai dengan ikon kunci). Ini akan mengungkapkan Kunci layanan Anda.

  11. Ambil salinan salah satu kunci yang ditampilkan, karena Anda akan membutuhkannya nanti dalam proyek Anda.

  12. Di halaman Layanan , klik Portal Pemahaman Bahasa untuk diarahkan ke halaman web yang akan Anda gunakan untuk membuat Layanan baru Anda, dalam Aplikasi LUIS.

Bab 2 – Portal Pemahaman Bahasa

Di bagian ini Anda akan mempelajari cara membuat Aplikasi LUIS di Portal LUIS.

Penting

Perlu diketahui, bahwa menyiapkan Entitas, Niat, dan Ucapan dalam bab ini hanyalah langkah pertama dalam membangun layanan LUIS Anda: Anda juga perlu melatih kembali layanan, beberapa kali, jadi untuk membuatnya lebih akurat. Pelatihan ulang layanan Anda tercakup dalam Bab terakhir kursus ini, jadi pastikan Anda menyelesaikannya.

  1. Setelah mencapai Portal Pemahaman Bahasa, Anda mungkin perlu masuk, jika Anda belum, dengan kredensial yang sama dengan portal Azure Anda.

    Halaman masuk LUIS

  2. Jika ini pertama kalinya Anda menggunakan LUIS, Anda harus menggulir ke bawah ke bagian bawah halaman selamat datang, untuk menemukan dan mengklik tombol Buat aplikasi LUIS.

    Membuat halaman aplikasi LUIS

  3. Setelah masuk, klik Aplikasi saya (jika Anda tidak berada di bagian tersebut saat ini). Anda kemudian dapat mengklik Buat aplikasi baru.

    LUIS - gambar aplikasi saya

  4. Beri nama untuk aplikasi Anda.

  5. Jika aplikasi Anda seharusnya memahami bahasa yang berbeda dari bahasa Inggris, Anda harus mengubah Budaya ke bahasa yang sesuai.

  6. Di sini Anda juga dapat menambahkan Deskripsi aplikasi LUIS baru Anda.

    LUIS - membuat aplikasi baru

  7. Setelah menekan Selesai, Anda akan memasukkan halaman Build aplikasi LUIS baru Anda.

  8. Ada beberapa konsep penting yang perlu dipahami di sini:

    • Niat, mewakili metode yang akan disebut mengikuti kueri dari pengguna. NIAT mungkin memiliki satu atau beberapa ENTITAS.
    • Entitas, adalah komponen kueri yang menjelaskan informasi yang relevan dengan NIAT.
    • Ucapan, adalah contoh kueri yang disediakan oleh pengembang, yang akan digunakan LUIS untuk melatih dirinya sendiri.

Jika konsep-konsep ini tidak sangat jelas, jangan khawatir, karena kursus ini akan mengklarifikasinya lebih lanjut dalam bab ini.

Anda akan mulai dengan membuat Entitas yang diperlukan untuk membangun kursus ini.

  1. Di sisi kiri halaman, klik Entitas, lalu klik Buat entitas baru.

    Membuat entitas baru

  2. Panggil warna Entitas baru, atur jenisnya ke Sederhana, lalu tekan Selesai.

    Membuat entitas sederhana - warna

  3. Ulangi proses ini untuk membuat tiga (3) lebih Banyak Entitas Sederhana bernama:

    • upsize
    • Berhemat
    • target

Hasilnya akan terlihat seperti gambar di bawah ini:

Hasil pembuatan entitas

Pada titik ini Anda dapat mulai membuat Niat.

Peringatan

Jangan hapus niat Tidak Ada .

  1. Di sisi kiri halaman, klik Niat, lalu klik Buat niat baru.

    Membuat niat baru

  2. Panggil Intent ChangeObjectColor baru.

    Penting

    Nama Niat ini digunakan dalam kode nanti dalam kursus ini, jadi untuk hasil terbaik, gunakan nama ini persis seperti yang disediakan.

Setelah mengonfirmasi nama, Anda akan diarahkan ke Halaman Niat.

LUIS - halaman niat

Anda akan melihat bahwa ada kotak teks yang meminta Anda untuk mengetik 5 atau lebih ucapan yang berbeda.

Catatan

LUIS mengonversi semua Ungkapan menjadi huruf kecil.

  1. Sisipkan Ucapan berikut di kotak teks atas (saat ini dengan teks Ketik sekitar 5 contoh... ), dan tekan Enter:
The color of the cylinder must be red

Anda akan melihat bahwa Ucapan baru akan muncul dalam daftar di bawahnya.

Setelah proses yang sama, sisipkan enam (6) Ucapan berikut:

make the cube black

make the cylinder color white

change the sphere to red

change it to green

make this yellow

change the color of this object to blue

Untuk setiap Ucapan yang telah Anda buat, Anda harus mengidentifikasi kata-kata mana yang harus digunakan oleh LUIS sebagai Entitas. Dalam contoh ini Anda perlu melabeli semua warna sebagai Entitas warna , dan semua referensi yang mungkin ke target sebagai Entitas target .

  1. Untuk melakukannya, coba klik pada silinder kata di Ujaran pertama dan pilih target.

    Mengidentifikasi Target Ungkapan

  2. Sekarang klik kata merah di Ujaran pertama dan pilih warna.

    Mengidentifikasi Entitas Ucapan

  3. Beri label pada baris berikutnya juga, di mana kubus harus menjadi target, dan hitam harus berwarna. Perhatikan juga penggunaan kata -kata 'ini', 'ini', dan 'objek ini', yang kami sediakan, sehingga untuk memiliki jenis target yang tidak spesifik juga tersedia.

  4. Ulangi proses di atas sampai semua Ungkapan memiliki Entitas yang diberi label. Lihat gambar di bawah ini jika Anda memerlukan bantuan.

    Tip

    Saat memilih kata untuk memberi label sebagai entitas:

    • Untuk satu kata, cukup klik kata tersebut.
    • Untuk satu set dua kata atau lebih, klik di awal lalu di akhir set.

    Catatan

    Anda dapat menggunakan tombol pengalih Tampilan Token untuk beralih antara Tampilan Entitas / Token!

  5. Hasilnya harus seperti yang terlihat pada gambar di bawah ini, memperlihatkan Tampilan Entitas / Token:

    Token & Tampilan Entitas

  6. Pada titik ini tekan tombol Latih di kanan atas halaman dan tunggu indikator bulat kecil di atasnya berubah menjadi hijau. Ini menunjukkan bahwa LUIS telah berhasil dilatih untuk mengenali Niat ini.

    Melatih LUIS

  7. Sebagai latihan untuk Anda, buat Niat baru yang disebut ChangeObjectSize, menggunakan target Entitas, upsize, dan downsize.

  8. Mengikuti proses yang sama dengan Niat sebelumnya, sisipkan delapan (8) Ucapan berikut untuk Perubahan ukuran :

    increase the dimensions of that
    
    reduce the size of this
    
    i want the sphere smaller
    
    make the cylinder bigger
    
    size down the sphere
    
    size up the cube
    
    decrease the size of that object
    
    increase the size of this object
    
  9. Hasilnya harus seperti yang ada pada gambar di bawah ini:

    Menyiapkan Token/Entitas ChangeObjectSize

  10. Setelah kedua Niat, ChangeObjectColor dan ChangeObjectSize, telah dibuat dan dilatih, klik tombol TERBITKAN di atas halaman.

    Menerbitkan layanan LUIS

  11. Pada halaman Terbitkan , Anda akan menyelesaikan dan menerbitkan Aplikasi LUIS Anda sehingga dapat diakses oleh kode Anda.

    1. Atur menu drop-down Terbitkan Ke sebagai Produksi.

    2. Atur Zona Waktu ke zona waktu Anda.

    3. Centang kotak Sertakan semua skor niat yang diprediksi.

    4. Klik Terbitkan ke Slot Produksi.

      Terbitkan Pengaturan

  12. Di bagian Sumber Daya dan Kunci:

    1. Pilih wilayah yang Anda tetapkan untuk instans layanan di Portal Microsoft Azure.
    2. Anda akan melihat elemen Starter_Key di bawah ini, abaikan.
    3. Klik Tambahkan Kunci dan sisipkan Kunci yang Anda peroleh di Portal Microsoft Azure saat membuat instans Layanan. Jika Azure dan portal LUIS Anda masuk ke pengguna yang sama, Anda akan diberikan menu drop-down untuk Nama penyewa, Nama Langganan, dan Kunci yang ingin Anda gunakan (akan memiliki nama yang sama seperti yang Anda berikan sebelumnya di Portal Microsoft Azure.

    Penting

    Di bawah Titik Akhir, ambil salinan titik akhir yang sesuai dengan Kunci yang telah Anda sisipkan, Anda akan segera menggunakannya dalam kode Anda.

Bab 3 – Menyiapkan proyek Unity

Berikut ini adalah pengaturan khas untuk mengembangkan dengan realitas campuran, dan dengan demikian, adalah templat yang baik untuk proyek lain.

  1. Buka Unity dan klik Baru.

    Mulai proyek Unity baru.

  2. Anda sekarang perlu memberikan nama Proyek Unity, menyisipkan MR_LUIS. Pastikan jenis proyek diatur ke 3D. Atur Lokasi ke tempat yang sesuai untuk Anda (ingat, lebih dekat ke direktori akar lebih baik). Lalu, klik Buat proyek.

    Berikan detail untuk proyek Unity baru.

  3. Dengan Unity terbuka, ada baiknya memeriksa Editor Skrip default diatur ke Visual Studio. Buka Edit > Preferensi lalu dari jendela baru, navigasikan ke Alat Eksternal. Ubah Editor Skrip Eksternal ke Visual Studio 2017. Tutup jendela Preferensi .

    Perbarui preferensi editor skrip.

  4. Selanjutnya, buka Pengaturan Build File > dan alihkan platform ke Platform Windows Universal, dengan mengklik tombol Beralih Platform.

    Jendela Pengaturan Build, alihkan platform ke UWP.

  5. Buka Pengaturan Build File > dan pastikan bahwa:

    1. Perangkat Target diatur ke Perangkat Apa Pun

      Untuk Microsoft HoloLens, atur Perangkat Target ke HoloLens.

    2. Jenis Build diatur ke D3D

    3. SDK diatur ke Terbaru diinstal

    4. Versi Visual Studio diatur ke Terbaru diinstal

    5. Build and Run diatur ke Komputer Lokal

    6. Simpan adegan dan tambahkan ke build.

      1. Lakukan ini dengan memilih Tambahkan Adegan Terbuka. Jendela penyimpanan akan muncul.

        Klik tombol tambahkan adegan terbuka

      2. Buat folder baru untuk ini, dan adegan di masa mendatang, lalu pilih tombol Folder baru, untuk membuat folder baru, beri nama Adegan.

        Membuat folder skrip baru

      3. Buka folder Adegan yang baru dibuat, lalu di bidang Nama file: teks, ketik MR_LuisScene, lalu tekan Simpan.

        Beri nama adegan baru.

    7. Pengaturan yang tersisa, di Pengaturan Build, harus dibiarkan sebagai default untuk saat ini.

  6. Di jendela Pengaturan Build, klik tombol Pengaturan Pemutar, ini akan membuka panel terkait di ruang tempat Pemeriksa berada.

    Buka pengaturan pemutar.

  7. Di panel ini, beberapa pengaturan perlu diverifikasi:

    1. Di tab Pengaturan Lainnya:

      1. Versi Runtime Pembuatan Skrip harus Stabil (Setara.NET 3.5).

      2. Scripting Backend harus .NET

      3. Tingkat Kompatibilitas API harus .NET 4.6

        Perbarui pengaturan lain.

    2. Dalam tab Pengaturan Penerbitan, di bawah Kemampuan, periksa:

      1. InternetClient

      2. Mikrofon

        Memperbarui pengaturan penerbitan.

    3. Selanjutnya di bawah panel, di Pengaturan XR (ditemukan di bawah Pengaturan Penerbitan), centang Realitas Virtual yang Didukung, pastikan Windows Mixed Reality SDK ditambahkan.

      Perbarui Pengaturan X R.

  8. Kembali ke Pengaturan Build Proyek Unity C# tidak lagi berwarna abu-abu; centang kotak di samping ini.

  9. Tutup jendela Pengaturan Build.

  10. Simpan Adegan dan Proyek Anda (FILE > SAVE SCENE / FILE > SAVE PROJECT).

Bab 4 – Buat adegan

Penting

Jika Anda ingin melewati komponen Unity Siapkan kursus ini, dan lanjutkan langsung ke kode, jangan ragu untuk mengunduh .unitypackage ini, impor ke proyek Anda sebagai Paket Kustom, dan kemudian lanjutkan dari Bab 5.

  1. Klik kanan di area kosong Panel Hierarki, di bawah Objek 3D, tambahkan Bidang.

    Buat pesawat.

  2. Ketahuilah bahwa ketika Anda mengklik kanan dalam Hierarki lagi untuk membuat lebih banyak objek, jika Anda masih memiliki objek terakhir yang dipilih, objek yang dipilih akan menjadi induk objek baru Anda. Hindari mengklik kiri ini di ruang kosong dalam Hierarki, lalu klik kanan.

  3. Ulangi prosedur di atas untuk menambahkan objek berikut:

    1. Lingkup
    2. Silinder
    3. Cube
    4. Teks 3D
  4. Hierarki adegan yang dihasilkan harus seperti yang ada pada gambar di bawah ini:

    Penyiapan Hierarki Adegan.

  5. Klik kiri pada Kamera Utama untuk memilihnya, lihat Panel Inspektur Anda akan melihat objek Kamera dengan semua komponennya.

  6. Klik tombol Tambahkan Komponen yang terletak di bagian paling bawah Panel Inspektur.

    Tambahkan Sumber Audio

  7. Cari komponen yang disebut Sumber Audio, seperti yang ditunjukkan di atas.

  8. Pastikan juga bahwa komponen Transformasi Kamera Utama diatur ke (0,0,0), ini dapat dilakukan dengan menekan ikon Gigi di samping komponen Transformasi Kamera dan memilih Reset. Komponen Transformasi kemudian akan terlihat seperti:

    1. Posisi diatur ke 0, 0, 0.
    2. Rotasi diatur ke 0, 0, 0.

    Catatan

    Untuk Microsoft HoloLens, Anda juga harus mengubah yang berikut ini, yang merupakan bagian dari komponen Kamera, yang ada di Kamera Utama Anda:

    • Bendera Bersih: Warna Solid.
    • Latar belakang 'Hitam, Alpha 0' - Warna hex: #00000000.
  9. Klik kiri pada Bidang untuk memilihnya. Di Panel Pemeriksa, atur komponen Transformasi dengan nilai berikut:

    Sumbu X Sumbu Y Sumbu Z
    0 -1 0
  10. Klik kiri pada Sphere untuk memilihnya. Di Panel Pemeriksa, atur komponen Transformasi dengan nilai berikut:

    Sumbu X Sumbu Y Sumbu Z
    2 1 2
  11. Klik kiri pada Silinder untuk memilihnya. Di Panel Pemeriksa, atur komponen Transformasi dengan nilai berikut:

    Sumbu X Sumbu Y Sumbu Z
    -2 1 2
  12. Klik kiri pada Kubus untuk memilihnya. Di Panel Pemeriksa, atur komponen Transformasi dengan nilai berikut:

Transformasi - Posisi

X Y Z
0 1 4

Transformasi - Rotasi

X Y Z
45 45 0
  1. Klik kiri pada objek Teks Baru untuk memilihnya. Di Panel Pemeriksa, atur komponen Transformasi dengan nilai berikut:

Transformasi - Posisi

X Y Z
-2 6 9

Transformasi - Skala

X Y Z
0.1 0.1 0.1
  1. Ubah Ukuran Font di komponen Text Mesh menjadi 50.

  2. Ubah nama objek Text Mesh menjadi Teks Dikte.

    Membuat objek Teks 3D

  3. Struktur Panel Hierarki Anda sekarang akan terlihat seperti ini:

    jala teks dalam tampilan adegan

  4. Adegan akhir akan terlihat seperti gambar di bawah ini:

    Tampilan adegan.

Bab 5 – Buat kelas MicrophoneManager

Skrip pertama yang akan Anda buat adalah kelas MicrophoneManager . Setelah ini, Anda akan membuat LuisManager, kelas Perilaku, dan terakhir kelas Tatapan (jangan ragu untuk membuat semua ini sekarang, meskipun akan tercakup saat Anda mencapai setiap Bab).

Kelas MicrophoneManager bertanggung jawab untuk:

  • Mendeteksi perangkat perekaman yang terpasang pada headset atau mesin (mana pun yang default).
  • Ambil audio (suara) dan gunakan dikte untuk menyimpannya sebagai string.
  • Setelah suara dijeda, kirimkan dikte ke kelas LuisManager .

Untuk membuat kelas ini:

  1. Klik kanan di Panel Proyek, Buat > Folder. Panggil folder Skrip.

    Membuat folder Skrip.

  2. Dengan folder Skrip dibuat, klik dua kali, untuk membukanya. Kemudian, di dalam folder tersebut, klik kanan, Buat > Skrip C#. Beri nama skrip MicrophoneManager.

  3. Klik dua kali Pada MicrophoneManager untuk membukanya dengan Visual Studio.

  4. Tambahkan namespace berikut ke bagian atas file:

        using UnityEngine;
        using UnityEngine.Windows.Speech;
    
  5. Kemudian tambahkan variabel berikut di dalam kelas MicrophoneManager :

        public static MicrophoneManager instance; //help to access instance of this object
        private DictationRecognizer dictationRecognizer;  //Component converting speech to text
        public TextMesh dictationText; //a UI object used to debug dictation result
    
  6. Kode untuk metode Awake() dan Start() sekarang perlu ditambahkan. Ini akan dipanggil ketika kelas menginisialisasi:

        private void Awake()
        {
            // allows this class instance to behave like a singleton
            instance = this;
        }
    
        void Start()
        {
            if (Microphone.devices.Length > 0)
            {
                StartCapturingAudio();
                Debug.Log("Mic Detected");
            }
        }
    
  7. Sekarang Anda memerlukan metode yang digunakan Aplikasi untuk memulai dan menghentikan pengambilan suara, dan meneruskannya ke kelas LuisManager , yang akan Anda buat segera.

        /// <summary>
        /// Start microphone capture, by providing the microphone as a continual audio source (looping),
        /// then initialise the DictationRecognizer, which will capture spoken words
        /// </summary>
        public void StartCapturingAudio()
        {
            if (dictationRecognizer == null)
            {
                dictationRecognizer = new DictationRecognizer
                {
                    InitialSilenceTimeoutSeconds = 60,
                    AutoSilenceTimeoutSeconds = 5
                };
    
                dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;
                dictationRecognizer.DictationError += DictationRecognizer_DictationError;
            }
            dictationRecognizer.Start();
            Debug.Log("Capturing Audio...");
        }
    
        /// <summary>
        /// Stop microphone capture
        /// </summary>
        public void StopCapturingAudio()
        {
            dictationRecognizer.Stop();
            Debug.Log("Stop Capturing Audio...");
        }
    
  8. Tambahkan Penanganan Dikte yang akan dipanggil saat suara dijeda. Metode ini akan meneruskan teks dikte ke kelas LuisManager .

        /// <summary>
        /// This handler is called every time the Dictation detects a pause in the speech. 
        /// This method will stop listening for audio, send a request to the LUIS service 
        /// and then start listening again.
        /// </summary>
        private void DictationRecognizer_DictationResult(string dictationCaptured, ConfidenceLevel confidence)
        {
            StopCapturingAudio();
            StartCoroutine(LuisManager.instance.SubmitRequestToLuis(dictationCaptured, StartCapturingAudio));
            Debug.Log("Dictation: " + dictationCaptured);
            dictationText.text = dictationCaptured;
        }
    
        private void DictationRecognizer_DictationError(string error, int hresult)
        {
            Debug.Log("Dictation exception: " + error);
        }
    

    Penting

    Hapus metode Update() karena kelas ini tidak akan menggunakannya.

  9. Pastikan untuk menyimpan perubahan Anda di Visual Studio sebelum kembali ke Unity.

    Catatan

    Pada titik ini Anda akan melihat kesalahan yang muncul di Panel Konsol Editor Unity. Ini karena kode mereferensikan kelas LuisManager yang akan Anda buat di Bab berikutnya.

Bab 6 – Buat kelas LUISManager

Sudah waktunya bagi Anda untuk membuat kelas LuisManager , yang akan melakukan panggilan ke layanan Azure LUIS.

Tujuan dari kelas ini adalah untuk menerima teks dikte dari kelas MicrophoneManager dan mengirimkannya ke AZURE Language Understanding API untuk dianalisis.

Kelas ini akan mendeserialisasi respons JSON dan memanggil metode yang sesuai dari kelas Perilaku untuk memicu tindakan.

Untuk membuat kelas ini:

  1. Klik dua kali pada folder Skrip , untuk membukanya.

  2. Klik kanan di dalam folder Skrip , klik Buat > Skrip C#. Beri nama skrip LuisManager.

  3. Klik dua kali pada skrip untuk membukanya dengan Visual Studio.

  4. Tambahkan namespace berikut ke bagian atas file:

        using System;
        using System.Collections;
        using System.Collections.Generic;
        using System.IO;
        using UnityEngine;
        using UnityEngine.Networking;
    
  5. Anda akan mulai dengan membuat tiga kelas di dalam kelas LuisManager (dalam file skrip yang sama, di atas metode Start() yang akan mewakili respons JSON yang dideserialisasi dari Azure.

        [Serializable] //this class represents the LUIS response
        public class AnalysedQuery
        {
            public TopScoringIntentData topScoringIntent;
            public EntityData[] entities;
            public string query;
        }
    
        // This class contains the Intent LUIS determines 
        // to be the most likely
        [Serializable]
        public class TopScoringIntentData
        {
            public string intent;
            public float score;
        }
    
        // This class contains data for an Entity
        [Serializable]
        public class EntityData
        {
            public string entity;
            public string type;
            public int startIndex;
            public int endIndex;
            public float score;
        }
    
  6. Selanjutnya, tambahkan variabel berikut di dalam kelas LuisManager :

        public static LuisManager instance;
    
        //Substitute the value of luis Endpoint with your own End Point
        string luisEndpoint = "https://westus.api.cognitive... add your endpoint from the Luis Portal";
    
  7. Pastikan untuk menempatkan titik akhir LUIS Anda sekarang (yang akan Anda miliki dari portal LUIS Anda).

  8. Kode untuk metode Awake() sekarang perlu ditambahkan. Metode ini akan dipanggil ketika kelas menginisialisasi:

        private void Awake()
        {
            // allows this class instance to behave like a singleton
            instance = this;
        }
    
  9. Sekarang Anda memerlukan metode yang digunakan aplikasi ini untuk mengirim dikte yang diterima dari kelas MicrophoneManager ke LUIS, lalu menerima dan mendeserialisasi respons.

  10. Setelah nilai Niat, dan Entitas terkait, telah ditentukan, nilai tersebut diteruskan ke instans kelas Perilaku untuk memicu tindakan yang dimaksudkan.

        /// <summary>
        /// Call LUIS to submit a dictation result.
        /// The done Action is called at the completion of the method.
        /// </summary>
        public IEnumerator SubmitRequestToLuis(string dictationResult, Action done)
        {
            string queryString = string.Concat(Uri.EscapeDataString(dictationResult));
    
            using (UnityWebRequest unityWebRequest = UnityWebRequest.Get(luisEndpoint + queryString))
            {
                yield return unityWebRequest.SendWebRequest();
    
                if (unityWebRequest.isNetworkError || unityWebRequest.isHttpError)
                {
                    Debug.Log(unityWebRequest.error);
                }
                else
                {
                    try
                    {
                        AnalysedQuery analysedQuery = JsonUtility.FromJson<AnalysedQuery>(unityWebRequest.downloadHandler.text);
    
                        //analyse the elements of the response 
                        AnalyseResponseElements(analysedQuery);
                    }
                    catch (Exception exception)
                    {
                        Debug.Log("Luis Request Exception Message: " + exception.Message);
                    }
                }
    
                done();
                yield return null;
            }
        }
    
  11. Buat metode baru yang disebut AnalyseResponseElements() yang akan membaca AnalysedQuery yang dihasilkan dan menentukan Entitas. Setelah Entitas tersebut ditentukan, entitas tersebut akan diteruskan ke instans kelas Perilaku untuk digunakan dalam tindakan.

        private void AnalyseResponseElements(AnalysedQuery aQuery)
        {
            string topIntent = aQuery.topScoringIntent.intent;
    
            // Create a dictionary of entities associated with their type
            Dictionary<string, string> entityDic = new Dictionary<string, string>();
    
            foreach (EntityData ed in aQuery.entities)
            {
                entityDic.Add(ed.type, ed.entity);
            }
    
            // Depending on the topmost recognized intent, read the entities name
            switch (aQuery.topScoringIntent.intent)
            {
                case "ChangeObjectColor":
                    string targetForColor = null;
                    string color = null;
    
                    foreach (var pair in entityDic)
                    {
                        if (pair.Key == "target")
                        {
                            targetForColor = pair.Value;
                        }
                        else if (pair.Key == "color")
                        {
                            color = pair.Value;
                        }
                    }
    
                    Behaviours.instance.ChangeTargetColor(targetForColor, color);
                    break;
    
                case "ChangeObjectSize":
                    string targetForSize = null;
                    foreach (var pair in entityDic)
                    {
                        if (pair.Key == "target")
                        {
                            targetForSize = pair.Value;
                        }
                    }
    
                    if (entityDic.ContainsKey("upsize") == true)
                    {
                        Behaviours.instance.UpSizeTarget(targetForSize);
                    }
                    else if (entityDic.ContainsKey("downsize") == true)
                    {
                        Behaviours.instance.DownSizeTarget(targetForSize);
                    }
                    break;
            }
        }
    

    Penting

    Hapus metode Start() dan Update() karena kelas ini tidak akan menggunakannya.

  12. Pastikan untuk menyimpan perubahan Anda di Visual Studio sebelum kembali ke Unity.

Catatan

Pada titik ini Anda akan melihat beberapa kesalahan yang muncul di Panel Konsol Editor Unity. Ini karena kode mereferensikan kelas Perilaku yang akan Anda buat di Bab berikutnya.

Bab 7 - Buat kelas Perilaku

Kelas Perilaku akan memicu tindakan menggunakan Entitas yang disediakan oleh kelas LuisManager .

Untuk membuat kelas ini:

  1. Klik dua kali pada folder Skrip , untuk membukanya.

  2. Klik kanan di dalam folder Skrip , klik Buat > Skrip C#. Beri nama skrip Perilaku.

  3. Klik dua kali pada skrip untuk membukanya dengan Visual Studio.

  4. Kemudian tambahkan variabel berikut di dalam kelas Perilaku :

        public static Behaviours instance;
    
        // the following variables are references to possible targets
        public GameObject sphere;
        public GameObject cylinder;
        public GameObject cube;
        internal GameObject gazedTarget;
    
  5. Tambahkan kode metode Awake(). Metode ini akan dipanggil ketika kelas menginisialisasi:

        void Awake()
        {
            // allows this class instance to behave like a singleton
            instance = this;
        }
    
  6. Metode berikut dipanggil oleh kelas LuisManager (yang telah Anda buat sebelumnya) untuk menentukan objek mana yang menjadi target kueri lalu memicu tindakan yang sesuai.

        /// <summary>
        /// Changes the color of the target GameObject by providing the name of the object
        /// and the name of the color
        /// </summary>
        public void ChangeTargetColor(string targetName, string colorName)
        {
            GameObject foundTarget = FindTarget(targetName);
            if (foundTarget != null)
            {
                Debug.Log("Changing color " + colorName + " to target: " + foundTarget.name);
    
                switch (colorName)
                {
                    case "blue":
                        foundTarget.GetComponent<Renderer>().material.color = Color.blue;
                        break;
    
                    case "red":
                        foundTarget.GetComponent<Renderer>().material.color = Color.red;
                        break;
    
                    case "yellow":
                        foundTarget.GetComponent<Renderer>().material.color = Color.yellow;
                        break;
    
                    case "green":
                        foundTarget.GetComponent<Renderer>().material.color = Color.green;
                        break;
    
                    case "white":
                        foundTarget.GetComponent<Renderer>().material.color = Color.white;
                        break;
    
                    case "black":
                        foundTarget.GetComponent<Renderer>().material.color = Color.black;
                        break;
                }          
            }
        }
    
        /// <summary>
        /// Reduces the size of the target GameObject by providing its name
        /// </summary>
        public void DownSizeTarget(string targetName)
        {
            GameObject foundTarget = FindTarget(targetName);
            foundTarget.transform.localScale -= new Vector3(0.5F, 0.5F, 0.5F);
        }
    
        /// <summary>
        /// Increases the size of the target GameObject by providing its name
        /// </summary>
        public void UpSizeTarget(string targetName)
        {
            GameObject foundTarget = FindTarget(targetName);
            foundTarget.transform.localScale += new Vector3(0.5F, 0.5F, 0.5F);
        }
    
  7. Tambahkan metode FindTarget() untuk menentukan GameObjects mana yang menjadi target Niat saat ini. Metode ini default target ke GameObject yang "dikaitkan" jika tidak ada target eksplisit yang didefinisikan dalam Entitas.

        /// <summary>
        /// Determines which object reference is the target GameObject by providing its name
        /// </summary>
        private GameObject FindTarget(string name)
        {
            GameObject targetAsGO = null;
    
            switch (name)
            {
                case "sphere":
                    targetAsGO = sphere;
                    break;
    
                case "cylinder":
                    targetAsGO = cylinder;
                    break;
    
                case "cube":
                    targetAsGO = cube;
                    break;
    
                case "this": // as an example of target words that the user may use when looking at an object
                case "it":  // as this is the default, these are not actually needed in this example
                case "that":
                default: // if the target name is none of those above, check if the user is looking at something
                    if (gazedTarget != null) 
                    {
                        targetAsGO = gazedTarget;
                    }
                    break;
            }
            return targetAsGO;
        }
    

    Penting

    Hapus metode Start() dan Update() karena kelas ini tidak akan menggunakannya.

  8. Pastikan untuk menyimpan perubahan Anda di Visual Studio sebelum kembali ke Unity.

Bab 8 - Buat Kelas Tatap

Kelas terakhir yang perlu Anda selesaikan aplikasi ini adalah kelas Tatap. Kelas ini memperbarui referensi ke GameObject yang saat ini berada dalam fokus visual pengguna.

Untuk membuat Kelas ini:

  1. Klik dua kali pada folder Skrip , untuk membukanya.

  2. Klik kanan di dalam folder Skrip , klik Buat > Skrip C#. Beri nama tataian skrip.

  3. Klik dua kali pada skrip untuk membukanya dengan Visual Studio.

  4. Sisipkan kode berikut untuk kelas ini:

        using UnityEngine;
    
        public class Gaze : MonoBehaviour
        {        
            internal GameObject gazedObject;
            public float gazeMaxDistance = 300;
    
            void Update()
            {
                // Uses a raycast from the Main Camera to determine which object is gazed upon.
                Vector3 fwd = gameObject.transform.TransformDirection(Vector3.forward);
                Ray ray = new Ray(Camera.main.transform.position, fwd);
                RaycastHit hit;
                Debug.DrawRay(Camera.main.transform.position, fwd);
    
                if (Physics.Raycast(ray, out hit, gazeMaxDistance) && hit.collider != null)
                {
                    if (gazedObject == null)
                    {
                        gazedObject = hit.transform.gameObject;
    
                        // Set the gazedTarget in the Behaviours class
                        Behaviours.instance.gazedTarget = gazedObject;
                    }
                }
                else
                {
                    ResetGaze();
                }         
            }
    
            // Turn the gaze off, reset the gazeObject in the Behaviours class.
            public void ResetGaze()
            {
                if (gazedObject != null)
                {
                    Behaviours.instance.gazedTarget = null;
                    gazedObject = null;
                }
            }
        }
    
  5. Pastikan untuk menyimpan perubahan Anda di Visual Studio sebelum kembali ke Unity.

Bab 9 – Menyelesaikan penyiapan adegan

  1. Untuk menyelesaikan penyiapan adegan, seret setiap skrip yang telah Anda buat dari Folder Skrip ke objek Kamera Utama di Panel Hierarki.

  2. Pilih Kamera Utama dan lihat Panel Pemeriksa, Anda akan dapat melihat setiap skrip yang telah Anda lampirkan, dan Anda akan melihat bahwa ada parameter pada setiap skrip yang belum diatur.

    Mengatur Target Referensi Kamera.

  3. Untuk mengatur parameter ini dengan benar, ikuti instruksi berikut:

    1. MicrophoneManager:

      • Dari Panel Hierarki, seret objek Teks Dikte ke dalam kotak nilai parameter Teks Dikte.
    2. Perilaku, dari Panel Hierarki:

      • Seret objek Sphere ke dalam kotak target referensi Sphere.
      • Seret Silinder ke dalam kotak target referensi Silinder.
      • Seret Kubus ke dalam kotak target referensi Kubus.
    3. Tatap:

      • Atur Jarak Maks Tatapan ke 300 (jika belum).
  4. Hasilnya akan terlihat seperti gambar di bawah ini:

    Menampilkan Target Referensi Kamera, sekarang diatur.

Bab 10 – Uji di Editor Unity

Uji bahwa penyiapan Adegan diimplementasikan dengan benar.

Pastikan bahwa:

  • Semua skrip dilampirkan ke objek Kamera Utama.
  • Semua bidang di Panel Pemeriksa Kamera Utama ditetapkan dengan benar.
  1. Tekan tombol Putar di Editor Unity. Aplikasi harus berjalan dalam headset imersif yang terpasang.

  2. Coba beberapa ucapan, seperti:

    make the cylinder red
    
    change the cube to yellow
    
    I want the sphere blue
    
    make this to green
    
    change it to white
    

    Catatan

    Jika Anda melihat kesalahan di konsol Unity tentang perangkat audio default yang berubah, adegan mungkin tidak berfungsi seperti yang diharapkan. Hal ini disebabkan oleh cara portal realitas campuran menangani mikrofon bawaan untuk headset yang memilikinya. Jika Anda melihat kesalahan ini, cukup hentikan adegan dan mulai lagi dan semuanya akan berfungsi seperti yang diharapkan.

Bab 11 - Membangun dan memuat samping Solusi UWP

Setelah Anda memastikan bahwa aplikasi berfungsi di Editor Unity, Anda siap untuk Membangun dan Menyebarkan.

Untuk Membangun:

  1. Simpan adegan saat ini dengan mengklik Simpan File>.

  2. Buka Pengaturan Penyusunan File>.

  3. Centang kotak yang disebut Unity C# Projects (berguna untuk melihat dan men-debug kode Anda setelah proyek UWP dibuat.

  4. Klik Tambahkan Adegan Terbuka, lalu klik Bangun.

    Jendela Pengaturan Build

  5. Anda akan diminta untuk memilih folder tempat Anda ingin membangun Solusi.

  6. Buat folder BUILDS dan di dalam folder tersebut buat folder lain dengan nama pilihan Anda yang sesuai.

  7. Klik Pilih Folder untuk memulai build di lokasi tersebut.

    Buat Folder BuildPilih Folder Build

  8. Setelah Unity selesai membangun (mungkin perlu waktu), Unity harus membuka jendela File Explorer di lokasi build Anda.

Untuk Menyebarkan di Komputer Lokal:

  1. Di Visual Studio, buka file solusi yang telah dibuat di Bab sebelumnya.

  2. Di Platform Solusi, pilih x86, Komputer Lokal.

  3. Di Konfigurasi Solusi pilih Debug.

    Untuk Microsoft HoloLens, Anda mungkin merasa lebih mudah untuk mengatur ini ke Komputer Jarak Jauh, sehingga Anda tidak tertambat ke komputer Anda. Meskipun, Anda juga harus melakukan hal berikut:

    • Ketahui Alamat IP HoloLens Anda, yang dapat ditemukan dalam Jaringan Pengaturan > & Opsi Tingkat Lanjut Wi-Fi > Internet>; IPv4 adalah alamat yang harus Anda gunakan.
    • Pastikan Mode Pengembang Aktif; ditemukan di Pengaturan > Pembaruan & Keamanan > Untuk pengembang.

    Sebar aplikasi

  4. Buka menu Build dan klik Sebarkan Solusi untuk memuat samping aplikasi ke komputer Anda.

  5. Aplikasi Anda sekarang akan muncul dalam daftar aplikasi yang diinstal, siap untuk diluncurkan!

  6. Setelah diluncurkan, Aplikasi akan meminta Anda untuk mengotorisasi akses ke Mikrofon. Gunakan Pengontrol Gerakan, atau Input Suara, atau Keyboard untuk menekan tombol YA.

Bab 12 - Meningkatkan layanan LUIS Anda

Penting

Bab ini sangat penting, dan mungkin perlu diulang beberapa kali, karena akan membantu meningkatkan akurasi layanan LUIS Anda: pastikan Anda menyelesaikan ini.

Untuk meningkatkan tingkat pemahaman yang disediakan oleh LUIS, Anda perlu menangkap ucapan baru dan menggunakannya untuk melatih kembali Aplikasi LUIS Anda.

Misalnya, Anda mungkin telah melatih LUIS untuk memahami "Tingkatkan" dan "Upsize", tetapi apakah Anda tidak ingin aplikasi Anda juga memahami kata-kata seperti "Perbesar"?

Setelah Anda menggunakan aplikasi Beberapa kali, semua yang Anda katakan akan dikumpulkan oleh LUIS dan tersedia di PORTAL LUIS.

  1. Buka aplikasi portal Anda dengan mengikuti LINK ini, dan Masuk.

  2. Setelah Anda masuk dengan Kredensial MS Anda, klik Nama aplikasi Anda.

  3. Klik tombol Tinjau ucapan titik akhir di sebelah kiri halaman.

    Tinjau Ungkapan

  4. Anda akan ditampilkan daftar Ungkapan yang telah dikirim ke LUIS oleh Aplikasi realitas campuran Anda.

    Daftar Ungkapan

Anda akan melihat beberapa Entitas yang disorot.

Dengan mengarahkan mouse ke atas setiap kata yang disorot, Anda dapat meninjau setiap Ucapan dan menentukan Entitas mana yang telah dikenali dengan benar, Entitas mana yang salah dan Entitas mana yang terlewatkan.

Dalam contoh di atas, ditemukan bahwa kata "tombak" telah disorot sebagai target, sehingga perlu untuk memperbaiki kesalahan, yang dilakukan dengan mengarahkan kursor ke kata dengan mouse dan mengklik Hapus Label.

Periksa ucapanHapus Gambar Label

  1. Jika Anda menemukan Ucapan yang benar-benar salah, Anda dapat menghapusnya menggunakan tombol Hapus di sisi kanan layar.

    Menghapus ucapan yang salah

  2. Atau jika Anda merasa bahwa LUIS telah menginterpretasikan Ucapan dengan benar, Anda dapat memvalidasi pemahamannya dengan menggunakan tombol Tambahkan Ke Niat yang Selaras.

    Tambahkan ke niat yang diratakan

  3. Setelah Anda mengurutkan semua Ucapan yang ditampilkan, coba muat ulang halaman untuk melihat apakah ada lebih banyak yang tersedia.

  4. Sangat penting untuk mengulangi proses ini sebanyak mungkin untuk meningkatkan pemahaman aplikasi Anda.

Selamat bersenang-senang!

Aplikasi LUIS Integrated Anda yang sudah selesai

Selamat, Anda membangun aplikasi realitas campuran yang memanfaatkan Azure Language Understanding Intelligence Service, untuk memahami apa yang dikatakan pengguna, dan bertindak berdasarkan informasi tersebut.

Hasil lab

Latihan bonus

Latihan 1

Saat menggunakan aplikasi ini, Anda mungkin melihat bahwa jika Anda menatap objek Lantai dan meminta untuk mengubah warnanya, itu akan melakukannya. Dapatkah Anda mencari tahu cara menghentikan aplikasi Anda mengubah warna Lantai?

Latihan 2

Coba perluas kemampuan LUIS dan Aplikasi, tambahkan fungsionalitas tambahan untuk objek dalam adegan; sebagai contoh, buat objek baru di titik hit Tatap, tergantung pada apa yang dikatakan pengguna, dan kemudian dapat menggunakan objek tersebut bersama objek adegan saat ini, dengan perintah yang ada.