Bagikan melalui


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 mengekspos 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
  • memungkinkan DictationRecognizer aplikasi Anda mendengarkan kata apa pun dan memberi pengguna catatan atau tampilan ucapan mereka lainnya

Catatan

Dikte dan pengenalan 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 memungkinkan 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
Jenis: KeywordRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus

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

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 keyword-action>:

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, 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();

Pendiktean

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

DictationRecognizer Gunakan untuk mengonversi ucapan pengguna menjadi teks. DictationRecognizer mengekspos fungsionalitas dikte dan mendukung pendaftaran dan mendengarkan peristiwa hipotesis dan frasa 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, 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 dinyatakan 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. Berikan izin ke aplikasi untuk akses mikrofon di perangkat HoloLens Anda 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 itu:

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

Peristiwa ini diaktifkan setelah pengguna berhenti sejenak, biasanya di akhir kalimat. String lengkap yang dikenali 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
}

DictationHypothesis

Peristiwa ini diaktifkan terus menerus saat pengguna sedang berbicara. Saat pengenal mendengarkan, ini menyediakan teks tentang apa yang didengar sejauh ini.

Pertama, berlangganan acara DictationHypothesis :

dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;

Kemudian tangani panggilan balik DictationHypothesis:

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

DictationComplete

Peristiwa ini diaktifkan ketika pengenal berhenti, baik dari Stop() yang dipanggil, waktu habis 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 diaktifkan 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 di sekitar, 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 dilakukan 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 memulai 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 tetapkan, Anda tugas berikutnya adalah menjelajahi kemampuan platform Mixed Reality dan API:

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