Input suara di Unity

Perhatian

Sebelum memulai, pertimbangkan untuk menggunakan plug-in Unity untuk Cognitive Speech Services SDK. Plugin ini memiliki hasil Akurasi Ucapan yang lebih baik dan akses mudah ke dekode ucapan ke teks, serta fitur ucapan tingkat lanjut seperti dialog, interaksi berbasis niat, terjemahan, sintesis teks ke ucapan, dan pengenalan ucapan bahasa alami. Untuk memulai, lihat sampel dan dokumentasi.

Unity memaparkan tiga cara untuk menambahkan input Voice ke aplikasi Unity Anda, dua di antaranya adalah jenis PhraseRecognizer:

  • memasok KeywordRecognizer aplikasi Anda dengan array perintah string untuk didengarkan
  • GrammarRecognizer memberi aplikasi Anda file SRGS yang menentukan tata bahasa tertentu untuk didengarkan
  • DictationRecognizer memungkinkan aplikasi Anda mendengarkan kata apa pun dan memberi pengguna catatan atau tampilan ucapan mereka lainnya

Catatan

Pengenalan dikte dan frasa tidak dapat ditangani secara bersamaan. Jika GrammarRecognizer atau KeywordRecognizer aktif, DictationRecognizer tidak dapat aktif dan sebaliknya.

Mengaktifkan kemampuan untuk Voice

Kemampuan Mikrofon harus dideklarasikan agar aplikasi dapat menggunakan input Voice.

  1. Di Editor Unity, navigasi ke Edit > Pemutar Pengaturan > Proyek
  2. Pilih tab Bursa Windows
  3. Di bagian Kemampuan Pengaturan > Penerbitan, periksa kemampuan Mikrofon
  4. Memberikan izin ke aplikasi untuk akses mikrofon di perangkat HoloLens Anda
    • Anda akan diminta untuk melakukan ini pada startup perangkat, tetapi jika Anda tidak sengaja mengklik "tidak" Anda dapat mengubah izin di pengaturan perangkat

Pengenalan Frasa

Untuk mengaktifkan aplikasi Anda mendengarkan frasa tertentu yang diucapkan oleh pengguna lalu mengambil beberapa tindakan, Anda perlu:

  1. Tentukan frasa mana yang akan didengarkan menggunakan KeywordRecognizer atau GrammarRecognizer
  2. OnPhraseRecognized Menangani peristiwa dan mengambil tindakan yang sesuai dengan frasa yang dikenali

Kata kunciRecognizer

Namespace:UnityEngine.Windows.Speech
Type:KeywordRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus

Kita akan membutuhkan beberapa menggunakan pernyataan untuk menyimpan beberapa penekanan tombol:

using UnityEngine.Windows.Speech;
using System.Collections.Generic;
using System.Linq;

Kemudian mari kita tambahkan beberapa bidang ke kelas Anda untuk menyimpan kamus recognizer dan kata kunci-tindakan>:

KeywordRecognizer keywordRecognizer;
Dictionary<string, System.Action> keywords = new Dictionary<string, System.Action>();

Sekarang tambahkan kata kunci ke kamus, misalnya dalam Start() metode . Kami menambahkan kata kunci "aktifkan" dalam contoh ini:

//Create keywords for keyword recognizer
keywords.Add("activate", () =>
{
    // action to be performed when this keyword is spoken
});

Buat pengenal kata kunci dan beri tahu apa yang ingin kita kenali:

keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());

Sekarang daftar untuk OnPhraseRecognized acara

keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;

Contoh handler adalah:

private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)
{
    System.Action keywordAction;
    // if the keyword recognized is in our dictionary, call that Action.
    if (keywords.TryGetValue(args.text, out keywordAction))
    {
        keywordAction.Invoke();
    }
}

Akhirnya, mulai mengenali!

keywordRecognizer.Start();

GrammarRecognizer

Namespace:UnityEngine.Windows.Speech
Jenis: GrammarRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus

GrammarRecognizer digunakan jika Anda menentukan tata bahasa pengenalan menggunakan SRGS. Ini dapat berguna jika aplikasi Anda memiliki lebih dari sekadar beberapa kata kunci, jika Anda ingin mengenali frasa yang lebih kompleks, atau jika Anda ingin dengan mudah mengaktifkan dan menonaktifkan serangkaian perintah. Lihat: Membuat Tata Bahasa Menggunakan XML SRGS untuk informasi format file.

Setelah Anda memiliki tata bahasa SRGS Anda, dan itu ada di proyek Anda di folder StreamingAssets:

<PROJECT_ROOT>/Assets/StreamingAssets/SRGS/myGrammar.xml

GrammarRecognizer Buat dan teruskan jalur ke file SRGS Anda:

private GrammarRecognizer grammarRecognizer;
grammarRecognizer = new GrammarRecognizer(Application.streamingDataPath + "/SRGS/myGrammar.xml");

Sekarang daftar untuk OnPhraseRecognized acara

grammarRecognizer.OnPhraseRecognized += grammarRecognizer_OnPhraseRecognized;

Anda akan mendapatkan panggilan balik yang berisi informasi yang ditentukan dalam tata bahasa SRGS, yang dapat Anda tangani dengan tepat. Sebagian besar informasi penting akan diberikan dalam semanticMeanings array.

private void Grammar_OnPhraseRecognized(PhraseRecognizedEventArgs args)
{
    SemanticMeaning[] meanings = args.semanticMeanings;
    // do something
}

Akhirnya, mulai mengenali!

grammarRecognizer.Start();

Dikte

Namespace:UnityEngine.Windows.Speech
Jenis: DictationRecognizer, SpeechError, SpeechSystemStatus

DictationRecognizer Gunakan untuk mengonversi ucapan pengguna menjadi teks. DictationRecognizer memaparkan fungsionalitas dikte dan mendukung pendaftaran dan mendengarkan hipotesis dan frasa peristiwa yang selesai, sehingga Anda dapat memberikan umpan balik kepada pengguna Anda baik saat mereka berbicara maupun sesudahnya. Start() dan Stop() metode masing-masing mengaktifkan dan menonaktifkan pengenalan dikte. Setelah selesai dengan recognizer, itu harus dibuang menggunakan Dispose() untuk merilis sumber daya yang digunakannya. Ini akan merilis sumber daya ini secara otomatis selama pengumpulan sampah dengan biaya performa tambahan jika tidak dirilis sebelum itu.

Hanya ada beberapa langkah yang diperlukan untuk memulai dikte:

  1. Membuat baru DictationRecognizer
  2. Menangani peristiwa Dikte
  3. Memulai DictationRecognizer

Mengaktifkan kemampuan untuk dikte

Kemampuan Klien Internet dan Mikrofon harus dideklarasikan agar aplikasi dapat menggunakan dikte:

  1. Di Editor Unity, buka Edit > Pemutar Pengaturan > Proyek
  2. Pilih pada tab Bursa Windows
  3. Di bagian Kemampuan Pengaturan > Penerbitan, periksa kemampuan InternetClient
    • Secara opsional, jika Anda belum mengaktifkan mikrofon, periksa kemampuan Mikrofon
  4. Memberikan izin ke aplikasi untuk akses mikrofon di perangkat HoloLens jika Anda belum melakukannya
    • Anda akan diminta untuk melakukan ini pada startup perangkat, tetapi jika Anda tidak sengaja mengklik "tidak" Anda dapat mengubah izin di pengaturan perangkat

DictationRecognizer

Buat DictationRecognizer seperti ini:

dictationRecognizer = new DictationRecognizer();

Ada empat peristiwa dikte yang dapat berlangganan dan ditangani untuk menerapkan perilaku dikte.

  1. DictationResult
  2. DictationComplete
  3. DictationHypothesis
  4. DictationError

DictationResult

Kejadian ini diaktifkan setelah pengguna berhenti sejenak, biasanya di akhir kalimat. String yang dikenali penuh dikembalikan di sini.

Pertama, berlangganan acara DictationResult :

dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;

Kemudian, tangani panggilan balik DictationResult:

private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
{
    // do something
}

DikteHipotesis

Kejadian ini diaktifkan terus menerus saat pengguna sedang berbicara. Seperti yang didengarkan pengenal, ini memberikan teks tentang apa yang didengarkannya sejauh ini.

Pertama, berlangganan acara DictationHypothesis :

dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;

Kemudian, tangani panggilan balik DikteHypothesis:

private void DictationRecognizer_DictationHypothesis(string text)
{
    // do something
}

DictationComplete

Peristiwa ini diaktifkan ketika pengenal berhenti, baik dari Stop() yang dipanggil, waktu habis yang terjadi, atau beberapa kesalahan lainnya.

Pertama, berlangganan acara DictationComplete :

dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;

Kemudian tangani panggilan balik DictationComplete:

private void DictationRecognizer_DictationComplete(DictationCompletionCause cause)
{
   // do something
}

DictationError

Kejadian ini dimunculkan ketika terjadi kesalahan.

Pertama, berlangganan acara DictationError :

dictationRecognizer.DictationError += DictationRecognizer_DictationError;

Kemudian, tangani panggilan balik DictationError:

private void DictationRecognizer_DictationError(string error, int hresult)
{
    // do something
}

Setelah Anda berlangganan dan menangani peristiwa dikte yang Anda pedulikan, mulai pengenal dikte untuk mulai menerima peristiwa.

dictationRecognizer.Start();

Jika Anda tidak ingin lagi menyimpan DictationRecognizer, Anda perlu berhenti berlangganan dari peristiwa dan Membuang DictationRecognizer.

dictationRecognizer.DictationResult -= DictationRecognizer_DictationResult;
dictationRecognizer.DictationComplete -= DictationRecognizer_DictationComplete ;
dictationRecognizer.DictationHypothesis -= DictationRecognizer_DictationHypothesis ;
dictationRecognizer.DictationError -= DictationRecognizer_DictationError ;
dictationRecognizer.Dispose();

Tips

  • Start() dan Stop() metode masing-masing mengaktifkan dan menonaktifkan pengenalan dikte.
  • Setelah selesai dengan recognizer, itu harus dibuang menggunakan Dispose() untuk merilis sumber daya yang digunakannya. Ini akan merilis sumber daya ini secara otomatis selama pengumpulan sampah dengan biaya performa tambahan jika tidak dirilis sebelum itu.
  • Batas waktu terjadi setelah periode waktu yang ditetapkan. Anda dapat memeriksa batas waktu ini dalam peristiwa tersebut DictationComplete . Ada dua batas waktu yang perlu diperhatikan:
    1. Jika pengenal dimulai dan tidak mendengar audio apa pun selama lima detik pertama, waktunya akan habis.
    2. Jika pengenal telah memberikan hasil, tetapi kemudian mendengar keheningan selama 20 detik, waktunya akan habis.

Menggunakan Pengenalan Frasa dan Dikte

Jika Anda ingin menggunakan pengenalan frasa dan dikte di aplikasi, Anda harus sepenuhnya mematikannya sebelum dapat memulai yang lain. Jika Anda memiliki beberapa KeywordRecognizers yang berjalan, Anda dapat mematikan semuanya sekaligus dengan:

PhraseRecognitionSystem.Shutdown();

Anda dapat memanggil Restart() untuk memulihkan semua pengenal ke status sebelumnya setelah DictationRecognizer berhenti:

PhraseRecognitionSystem.Restart();

Anda juga dapat memulai KeywordRecognizer, yang juga akan memulai ulang PhraseRecognitionSystem.

Input suara di Mixed Reality Toolkit

Anda dapat menemukan contoh MRTK untuk input suara dalam adegan demo berikut:

Titik Pemeriksaan Pengembangan Berikutnya

Jika Anda mengikuti perjalanan titik pemeriksaan pengembangan Unity yang telah kami susun, Anda tugas berikutnya adalah menjelajahi kemampuan platform dan API Mixed Reality:

Anda selalu dapat kembali ke titik pemeriksaan pengembangan Unity kapan saja.