Delen via


Aangepaste herkenningsbeperkingen definiëren

Meer informatie over het definiëren en gebruiken van aangepaste beperkingen voor spraakherkenning.

Belangrijke API's: SpeechRecognitionTopicConstraint, SpeechRecognitionListConstraint, SpeechRecognitionGrammarFileConstraint

Voor spraakherkenning is ten minste één beperking vereist om een herkenbare woordenlijst te definiëren. Als er geen beperking is opgegeven, wordt de vooraf gedefinieerde grammatica van Universele Windows-apps gebruikt. Zie Spraakherkenning.

Beperkingen toevoegen

Gebruik de eigenschap SpeechRecognizer.Constraints om beperkingen toe te voegen aan een spraakherkenningsroutine.

Hier behandelen we de drie soorten spraakherkenningsbeperkingen die vanuit een app worden gebruikt. (Zie Een voorgrond-app met spraakopdrachten via Cortana activeren voor beperkingen voor spraakopdrachten via Cortana.)

Elke spraakherkenning kan één verzameling beperkingen hebben. Alleen deze combinaties van beperkingen zijn geldig:

  • Een beperking voor één onderwerp (dicteren of zoeken op internet)
  • Voor Windows 10 Fall Creators Update (10.0.16299.15) en hoger kan één onderwerpbeperking worden gecombineerd met een lijstbeperking
  • Een combinatie van lijstbeperkingen en/of beperkingen voor grammaticabestanden.

Belangrijk

Roep de methode SpeechRecognizer.CompileConstraintsAsync aan om de beperkingen te compileren voordat u het herkenningsproces start.

Een grammatica voor zoeken op internet opgeven (SpeechRecognitionTopicConstraint)

Onderwerpbeperkingen (dicteren of grammatica op internet zoeken) moeten worden toegevoegd aan de beperkingenverzameling van een spraakherkenningsfunctie.

Opmerking

U kunt een SpeechRecognitionListConstraint gebruiken in combinatie met een SpeechRecognitionTopicConstraint om de nauwkeurigheid van de dicteerfunctie te verhogen door een set domeinspecifieke trefwoorden op te geven die waarschijnlijk worden gebruikt tijdens het dicteren.

Hier voegen we een grammatica voor zoeken op internet toe aan de verzameling beperkingen.

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

Een programmatische lijstbeperking opgeven (SpeechRecognitionListConstraint)

Lijstbeperkingen moeten worden toegevoegd aan de beperkingenverzameling van een spraakherkenningsfunctie.

Houd rekening met de volgende punten:

  • U kunt meerdere lijstbeperkingen toevoegen aan een verzameling beperkingen.
  • U kunt elke verzameling gebruiken die IIterable<String> implementeert voor de tekenreekswaarden.

Hier geven we programmatisch een matrix met woorden op als een lijstbeperking en voegen we deze toe aan de verzameling beperkingen van een spraakherkenning.

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

Geef een SRGS-grammaticabeperking op (SpeechRecognitionGrammarFileConstraint)

SRGS-grammaticabestanden moeten worden toegevoegd aan de beperkingenverzameling van een spraakherkenningsfunctie.

De SRGS-versie 1.0 is de industriestandaard opmaaktaal voor het maken van grammatica in XML-indelingen voor spraakherkenning. Hoewel universele Windows-apps alternatieven bieden voor het gebruik van SRGS voor het maken van grammaticalen voor spraakherkenning, kunt u merken dat het gebruik van SRGS om grammatica's te maken de beste resultaten oplevert, met name voor meer betrokken scenario's voor spraakherkenning.

SRGS-grammatica's bieden een volledige set functies om u te helpen complexe spraakinteractie voor uw apps te ontwerpen. Met SRGS-grammatica's kunt u bijvoorbeeld het volgende doen:

  • Geef de volgorde op waarin woorden en woordgroepen moeten worden herkend.
  • Combineer woorden uit meerdere lijsten en woordgroepen die moeten worden herkend.
  • Verwijzing naar andere grammaticaregels.
  • Wijs een gewicht toe aan een alternatief woord of een alternatieve woordgroep om de kans te vergroten of te verkleinen dat deze wordt gebruikt om te voldoen aan spraakinvoer.
  • Voeg optionele woorden of woordgroepen toe.
  • Gebruik speciale regels waarmee u niet-opgegeven of onverwachte invoer kunt filteren, zoals willekeurige spraak die niet overeenkomt met de grammatica of achtergrondruis.
  • Gebruik semantiek om te definiëren wat spraakherkenning betekent voor uw app.
  • Geef uitspraaken op, hetzij inline in een taalregel of via een koppeling naar een lexicon.

Zie de XML-verwijzing voor SRGS-grammatica voor meer informatie over SRGS-elementen en -kenmerken. Zie Een eenvoudige XML-grammatica maken om aan de slag te gaan met het maken van een SRGS-grammatica.

Houd rekening met de volgende punten:

  • U kunt meerdere beperkingen voor grammaticabestanden toevoegen aan een verzameling beperkingen.
  • Gebruik de bestandsextensie .grxml voor op XML gebaseerde grammaticadocumenten die voldoen aan SRGS-regels.

In dit voorbeeld wordt een SRGS-grammatica gebruikt die is gedefinieerd in een bestand met de naam srgs.grxml (later beschreven). In de bestandseigenschappen wordt de pakketactie ingesteld op Inhoud met Kopiëren naar Uitvoermap ingesteld op Altijd kopiëren:

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

Dit SRGS-bestand (srgs.grxml) bevat semantische interpretatietags. Deze tags bieden een mechanisme voor het retourneren van overeenkomende grammaticagegevens aan uw app. Grammatica's moeten voldoen aan de Semantic Interpretation for Speech Recognition (SISR) 1.0-specificatie van het World Wide Web Consortium (W3C).

Hier luisteren we naar varianten van 'ja' en 'nee'.

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

Beperkingen beheren

Nadat een verzameling beperkingen is geladen voor herkenning, kan uw app beheren welke beperkingen zijn ingeschakeld voor herkenningsbewerkingen door de eigenschap IsEnabled van een beperking in te stellen op waar of onwaar. De standaardinstelling is true.

Het is meestal efficiënter om beperkingen eenmaal te laden, deze indien nodig in te schakelen en uit te schakelen, in plaats van beperkingen te laden, te verwijderen en samen te stellen voor elke herkenningsbewerking. Gebruik indien nodig de eigenschap IsEnabled .

Het beperken van het aantal beperkingen dient om de hoeveelheid gegevens te beperken die de spraakherkenning nodig heeft om te zoeken en overeen te komen met de spraakinvoer. Dit kan zowel de prestaties als de nauwkeurigheid van spraakherkenning verbeteren.

Bepaal welke beperkingen zijn ingeschakeld op basis van de zinnen die uw app kan verwachten in de context van de huidige herkenningsbewerking. Als de huidige app-context bijvoorbeeld een kleur weergeeft, hoeft u waarschijnlijk geen beperking in te schakelen waarmee de namen van dieren worden herkend.

Als u de gebruiker wilt vragen wat er kan worden gesproken, gebruikt u de eigenschappen SpeechRecognizerUIOptions.AudiblePrompt en SpeechRecognizerUIOptions.ExampleText , die zijn ingesteld met behulp van de eigenschap SpeechRecognizer.UIOptions . Als u gebruikers voorbereidt op wat ze kunnen zeggen tijdens de herkenningsbewerking, neemt de kans toe dat ze een woordgroep spreken die kan worden vergeleken met een actieve beperking.

Samples