Özel tanıma kısıtlamalarını tanımlama

Windows Uygulama SDK'sı uygulamanızda konuşma tanıma için özel kısıtlamaları tanımlamayı ve kullanmayı öğrenin.

Önemli

Konuşma tanıma için MSIX paket kimliği gerekir. Windows.Media.SpeechRecognition API’leri, yalnızca uygulamanız paket kimliğiyle (paketlenmiş veya dış konumla paketlenmiş olarak) çalıştığında kullanılabilir. Paketlenmemiş uygulamalar bu API'leri kullanamaz.

Anahtar API'leri

Genel Bakış

Konuşma tanıma, tanınabilir bir sözcük dağarcığı tanımlamak için en az bir kısıtlama gerektirir. Kısıtlama belirtmezseniz, önceden tanımlanmış dikte dil bilgisi kullanılır. Bkz . Konuşma tanıma.

SpeechRecognizer.Constraints Bir konuşma tanıyıcısına kısıtlamalar eklemek için özelliğini kullanın. Üç tür kısıtlama mevcuttur:

  • SpeechRecognitionTopicConstraint — Önceden tanımlanmış bir dil bilgisini (dikte veya web araması) temel alan bir kısıtlamadır.
  • SpeechRecognitionListConstraint — Sözcük veya tümcecik listesini temel alan bir kısıtlamadır.
  • SpeechRecognitionGrammarFileConstraint — Konuşma Tanıma Dil Bilgisi Belirtimi (SRGS) dosyasında tanımlanan kısıtlama.

Her konuşma tanıyıcısının bir kısıtlama koleksiyonu olabilir. Aşağıdaki birleşimler geçerlidir:

  • Tek bir konu kısıtlaması (dikte veya web araması)
  • Liste kısıtlamasıyla birlikte tek bir konu kısıtlaması
  • Liste kısıtlamaları ve/veya dil bilgisi dosyası kısıtlamalarının birleşimi

Önemli

Tanıma işlemini başlatmadan önce, kısıtlamaları derlemek için SpeechRecognizer.CompileConstraintsAsync çağrısını yapın.

Web araması dil bilgisi belirtme (SpeechRecognitionTopicConstraint)

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

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

    await speechRecognizer.CompileConstraintsAsync();

    Windows.Media.SpeechRecognition.SpeechRecognitionResult result =
        await speechRecognizer.RecognizeWithUIAsync();

    resultTextBlock.Text = result.Text;
}

Programlı liste kısıtlaması belirtme (SpeechRecognitionListConstraint)

Liste kısıtlamaları, sözcük veya tümcecik listesinden basit dil bilgisi oluşturmanın basit bir yoludur. Liste kısıtlaması, kısa ve ayrı tümcecikleri tanımak için iyi sonuç sağlar:

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

    string[] responses = { "Yes", "No" };

    var listConstraint = new Windows.Media.SpeechRecognition.SpeechRecognitionListConstraint(
        responses, "yesOrNo");

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

    await speechRecognizer.CompileConstraintsAsync();

    Windows.Media.SpeechRecognition.SpeechRecognitionResult result =
        await speechRecognizer.RecognizeWithUIAsync();

    resultTextBlock.Text = result.Text;
}

SRGS dil bilgisi kısıtlamasını belirtin (SpeechRecognitionGrammarFileConstraint)

SRGS dil bilgileri, sözcüklerin hangi sırada konuşulacağını belirtme, birden çok listeden sözcükleri birleştirme, diğer dil bilgilerine bağlanma ve anlamsal yorumlamayı kullanma gibi karmaşık ses etkileşimi için tam bir özellik kümesi sağlar:

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

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

    await speechRecognizer.CompileConstraintsAsync();

    Windows.Media.SpeechRecognition.SpeechRecognitionResult result =
        await speechRecognizer.RecognizeWithUIAsync();

    resultTextBlock.Text = result.Text;
}

.grxml SRGS kurallarına uyan XML tabanlı dil bilgisi belgeleri için dosya uzantısını kullanın. Dosyanın Derleme Eyleminiİçerik olarak ve Çıkış Dizinine Kopyala'yıher zaman Kopyala olarak ayarlayın.

SRGS öğeleri ve öznitelikleri hakkında daha fazla bilgi için bkz. SRGS Dil Bilgisi XML Başvurusu.

Kısıtlamaları yönetme

Bir kısıtlama koleksiyonu yükledikten sonra, tek tek kısıtlamaları IsEnabled özelliğini true veya false olarak ayarlayarak etkinleştirebilir ya da devre dışı bırakabilirsiniz. Varsayılan değer: true.

Kısıtlamaları bir kez yüklemek ve sonra gerektiğinde etkinleştirmek veya devre dışı bırakmak, her tanıma işlemi için kısıtlamaları yüklemek, kaldırmak ve derlemekten daha verimlidir.

Etkin kısıtlamaların sayısını kısıtlamak, konuşma tanımanın hem performansını hem de doğruluğunu artırır. Uygulamanızın geçerli bağlamda bekleyebileceğiniz tümceciklere göre hangi kısıtlamaların etkinleştirileceğine karar verin.