Bagikan melalui


Menentukan batasan pengenalan kustom

Pelajari cara menentukan dan menggunakan batasan kustom untuk pengenalan ucapan.

API Penting: SpeechRecognitionTopicConstraint, SpeechRecognitionListConstraint, SpeechRecognitionGrammarFileConstraint

Pengenalan ucapan memerlukan setidaknya satu batasan untuk menentukan kosakata yang dapat dikenali. Jika tidak ada batasan yang ditentukan, tata bahasa dikte yang telah ditentukan sebelumnya dari aplikasi Universal Windows digunakan. Lihat Pengenalan ucapan.

Menambahkan batasan

Gunakan properti SpeechRecognizer.Constraints untuk menambahkan batasan ke pengenal ucapan.

Di sini, kami membahas tiga jenis batasan pengenalan ucapan yang digunakan dari dalam aplikasi. (Untuk batasan perintah suara Cortana, lihat Meluncurkan aplikasi latar depan dengan perintah suara di Cortana.)

Setiap pengenal ucapan dapat memiliki satu koleksi batasan. Hanya kombinasi batasan ini yang valid:

  • Batasan topik tunggal (dikte atau pencarian web)
  • Untuk Windows 10 Fall Creators Update (10.0.16299.15) dan yang lebih baru, satu batasan topik dapat dikombinasikan dengan batasan daftar
  • Kombinasi batasan daftar dan/atau batasan file tata bahasa.

Penting

Panggil metode SpeechRecognizer.CompileConstraintsAsync untuk mengkompilasi batasan sebelum memulai proses pengenalan.

Tentukan tata bahasa pencarian web (SpeechRecognitionTopicConstraint)

Batasan topik (dikte atau tata bahasa pencarian web) harus ditambahkan ke kumpulan batasan pengenal ucapan.

Catatan

Anda dapat menggunakan SpeechRecognitionListConstraint bersama dengan SpeechRecognitionTopicConstraint untuk meningkatkan akurasi dikte dengan menyediakan sekumpulan kata kunci khusus domain yang menurut Anda kemungkinan akan digunakan selama dikte.

Di sini, kami menambahkan tata bahasa pencarian web ke koleksi batasan.

private async void WeatherSearch_Click(object sender, RoutedEventArgs e)
{
    // Create an instance of SpeechRecognizer.
    var speechRecognizer = new Windows.Media.SpeechRecognition.SpeechRecognizer();

    // Listen for audio input issues.
    speechRecognizer.RecognitionQualityDegrading += speechRecognizer_RecognitionQualityDegrading;

    // Add a web search grammar to the recognizer.
    var webSearchGrammar = new Windows.Media.SpeechRecognition.SpeechRecognitionTopicConstraint(Windows.Media.SpeechRecognition.SpeechRecognitionScenario.WebSearch, "webSearch");


    speechRecognizer.UIOptions.AudiblePrompt = "Say what you want to search for...";
    speechRecognizer.UIOptions.ExampleText = @"Ex. 'weather for London'";
    speechRecognizer.Constraints.Add(webSearchGrammar);

    // Compile the constraint.
    await speechRecognizer.CompileConstraintsAsync();

    // Start recognition.
    Windows.Media.SpeechRecognition.SpeechRecognitionResult speechRecognitionResult = await speechRecognizer.RecognizeWithUIAsync();
    //await speechRecognizer.RecognizeWithUIAsync();

    // Do something with the recognition result.
    var messageDialog = new Windows.UI.Popups.MessageDialog(speechRecognitionResult.Text, "Text spoken");
    await messageDialog.ShowAsync();
}

Tentukan batasan daftar terprogram (SpeechRecognitionListConstraint)

Batasan daftar harus ditambahkan ke kumpulan batasan pengenal ucapan.

Ingatlah hal-hal berikut:

  • Anda dapat menambahkan beberapa batasan daftar ke koleksi batasan.
  • Anda dapat menggunakan koleksi apa pun yang mengimplementasikan String> IIterable< untuk nilai string.

Di sini, kami secara terprogram menentukan array kata sebagai batasan daftar dan menambahkannya ke kumpulan batasan pengenal ucapan.

private async void YesOrNo_Click(object sender, RoutedEventArgs e)
{
    // Create an instance of SpeechRecognizer.
    var speechRecognizer = new Windows.Media.SpeechRecognition.SpeechRecognizer();

    // You could create this array dynamically.
    string[] responses = { "Yes", "No" };


    // Add a list constraint to the recognizer.
    var listConstraint = new Windows.Media.SpeechRecognition.SpeechRecognitionListConstraint(responses, "yesOrNo");

    speechRecognizer.UIOptions.ExampleText = @"Ex. 'yes', 'no'";
    speechRecognizer.Constraints.Add(listConstraint);

    // Compile the constraint.
    await speechRecognizer.CompileConstraintsAsync();

    // Start recognition.
    Windows.Media.SpeechRecognition.SpeechRecognitionResult speechRecognitionResult = await speechRecognizer.RecognizeWithUIAsync();

    // Do something with the recognition result.
    var messageDialog = new Windows.UI.Popups.MessageDialog(speechRecognitionResult.Text, "Text spoken");
    await messageDialog.ShowAsync();
}

Tentukan batasan tata bahasa SRGS (SpeechRecognitionGrammarFileConstraint)

File tata bahasa SRGS harus ditambahkan ke kumpulan batasan pengenal ucapan.

SRGS Versi 1.0 adalah bahasa markup standar industri untuk membuat tata bahasa format XML untuk pengenalan ucapan. Meskipun aplikasi Universal Windows menyediakan alternatif untuk menggunakan SRGS untuk membuat tata bahasa pengenalan ucapan, Anda mungkin menemukan bahwa menggunakan SRGS untuk membuat tata bahasa menghasilkan hasil terbaik, terutama untuk skenario pengenalan ucapan yang lebih terlibat.

Tata bahasa SRGS menyediakan serangkaian fitur lengkap untuk membantu Anda merancang interaksi suara yang kompleks untuk aplikasi Anda. Misalnya, dengan tata bahasa SRGS Anda dapat:

  • Tentukan urutan kata dan frasa yang harus diucapkan untuk dikenali.
  • Gabungkan kata-kata dari beberapa daftar dan frasa yang akan dikenali.
  • Tautkan ke tata bahasa lainnya.
  • Tetapkan bobot ke kata atau frasa alternatif untuk menambah atau mengurangi kemungkinan akan digunakan untuk mencocokkan input ucapan.
  • Sertakan kata atau frasa opsional.
  • Gunakan aturan khusus yang membantu memfilter input yang tidak ditentukan atau tidak ditentukan, seperti ucapan acak yang tidak cocok dengan tata bahasa, atau kebisingan latar belakang.
  • Gunakan semantik untuk menentukan arti pengenalan ucapan untuk aplikasi Anda.
  • Tentukan pengucapan, baik sebaris dalam tata bahasa atau melalui tautan ke leksikon.

Untuk informasi selengkapnya tentang elemen dan atribut SRGS, lihat Referensi XML Tata Bahasa SRGS . Untuk mulai membuat tata bahasa SRGS, lihat Cara Membuat Tata Bahasa XML Dasar.

Ingatlah hal-hal berikut:

  • Anda dapat menambahkan beberapa batasan file tata bahasa ke koleksi batasan.
  • Gunakan ekstensi file .grxml untuk dokumen tata bahasa berbasis XML yang sesuai dengan aturan SRGS.

Contoh ini menggunakan tata bahasa SRGS yang ditentukan dalam file bernama srgs.grxml (dijelaskan nanti). Di properti file, Tindakan Paket diatur ke Konten dengan Salin ke Direktori Output diatur ke Salin selalu:

private async void Colors_Click(object sender, RoutedEventArgs e)
{
    // Create an instance of SpeechRecognizer.
    var speechRecognizer = new Windows.Media.SpeechRecognition.SpeechRecognizer();

    // Add a grammar file constraint to the recognizer.
    var storageFile = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Colors.grxml"));
    var grammarFileConstraint = new Windows.Media.SpeechRecognition.SpeechRecognitionGrammarFileConstraint(storageFile, "colors");

    speechRecognizer.UIOptions.ExampleText = @"Ex. 'blue background', 'green text'";
    speechRecognizer.Constraints.Add(grammarFileConstraint);

    // Compile the constraint.
    await speechRecognizer.CompileConstraintsAsync();

    // Start recognition.
    Windows.Media.SpeechRecognition.SpeechRecognitionResult speechRecognitionResult = await speechRecognizer.RecognizeWithUIAsync();

    // Do something with the recognition result.
    var messageDialog = new Windows.UI.Popups.MessageDialog(speechRecognitionResult.Text, "Text spoken");
    await messageDialog.ShowAsync();
}

File SRGS ini (srgs.grxml) menyertakan tag interpretasi semantik. Tag ini menyediakan mekanisme untuk mengembalikan data kecocokan tata bahasa ke aplikasi Anda. Tata bahasa harus sesuai dengan Interpretasi Semantik World Wide Web Consortium (W3C) untuk Pengenalan Ucapan (SISR) 1.0 .

Di sini, kami mendengarkan varian "ya" dan "tidak".

<grammar xml:lang="en-US" 
         root="yesOrNo"
         version="1.0" 
         tag-format="semantics/1.0"
         xmlns="http://www.w3.org/2001/06/grammar">

    <!-- The following rules recognize variants of yes and no. -->
      <rule id="yesOrNo">
         <one-of>
            <item>
              <one-of>
                 <item>yes</item>
                 <item>yeah</item>
                 <item>yep</item>
                 <item>yup</item>
                 <item>un huh</item>
                 <item>yay yus</item>
              </one-of>
              <tag>out="yes";</tag>
            </item>
            <item>
              <one-of>
                 <item>no</item>
                 <item>nope</item>
                 <item>nah</item>
                 <item>uh uh</item>
               </one-of>
               <tag>out="no";</tag>
            </item>
         </one-of>
      </rule>
</grammar>

Mengelola batasan

Setelah koleksi batasan dimuat untuk pengenalan, aplikasi Anda dapat mengelola batasan mana yang diaktifkan untuk operasi pengenalan dengan mengatur properti IsEnabled dari batasan ke true atau false. Pengaturan defaultnya adalah true.

Biasanya lebih efisien untuk memuat batasan sekali, mengaktifkan dan menonaktifkannya sesuai kebutuhan, daripada memuat, membongkar, dan mengkompilasi batasan untuk setiap operasi pengenalan. Gunakan properti IsEnabled , sesuai kebutuhan.

Membatasi jumlah batasan berfungsi untuk membatasi jumlah data yang perlu dicari dan dicocokkan dengan input ucapan. Ini dapat meningkatkan performa dan akurasi pengenalan ucapan.

Tentukan batasan mana yang diaktifkan berdasarkan frasa yang dapat diharapkan aplikasi Anda dalam konteks operasi pengenalan saat ini. Misalnya, jika konteks aplikasi saat ini adalah menampilkan warna, Anda mungkin tidak perlu mengaktifkan batasan yang mengenali nama hewan.

Untuk meminta pengguna tentang apa yang dapat diucapkan, gunakan properti SpeechRecognizerUIOptions.AudiblePrompt dan SpeechRecognizerUIOptions.ExampleText , yang diatur dengan properti SpeechRecognizer.UIOptions . Mempersiapkan pengguna untuk apa yang dapat mereka katakan selama operasi pengenalan meningkatkan kemungkinan mereka akan mengucapkan frasa yang dapat dicocokkan dengan batasan aktif.

Sampel