Definire vincoli di riconoscimento personalizzatiDefine custom recognition constraints

Scopri come definire e usare vincoli personalizzati per il riconoscimento vocale.Learn how to define and use custom constraints for speech recognition.

API importanti: SpeechRecognitionTopicConstraint, SpeechRecognitionListConstraint, SpeechRecognitionGrammarFileConstraintImportant APIs: SpeechRecognitionTopicConstraint, SpeechRecognitionListConstraint, SpeechRecognitionGrammarFileConstraint

Il riconoscimento vocale richiede almeno un vincolo per definire un vocabolario riconoscibile.Speech recognition requires at least one constraint to define a recognizable vocabulary. Se non si specifica alcun vincolo, viene usata la grammatica per la dettatura predefinita delle app di Windows universali.If no constraint is specified, the predefined dictation grammar of Universal Windows apps is used. Vedi Riconoscimento vocale.See Speech recognition.

Aggiungere i vincoliAdd constraints

Usa la proprietà SpeechRecognizer.Constraints per aggiungere vincoli al riconoscimento vocale.Use the SpeechRecognizer.Constraints property to add constraints to a speech recognizer.

In questo argomento descriveremo i tre tipi di vincoli per il riconoscimento vocale usati all'interno di un'app.Here, we cover the three kinds of speech recognition constraints used from within an app. Per i vincoli del comando Voice Cortana, vedere avviare un'app in primo piano con i comandi vocali in Cortana.(For Cortana voice command constraints, see Launch a foreground app with voice commands in Cortana.)

Ogni riconoscimento vocale può avere una raccolta di vincoli.Each speech recognizer can have one constraint collection. Solo valide solo le combinazioni di vincoli seguenti:Only these combinations of constraints are valid:

  • Vincolo a argomento singolo (dettatura o ricerca Web)A single-topic constraint (dictation or web search)
  • Per Windows 10 Fall Creators Update (10.0.16299.15) e versioni successive, un singolo vincolo di argomento può essere combinato con un vincolo ListFor Windows 10 Fall Creators Update (10.0.16299.15) and newer, a single topic constraint can be combined with a list constraint
  • Combinazione di vincoli elenco e/o vincoli file di grammatica.A combination of list constraints and/or grammar-file constraints.

Importante

Chiamare il metodo SpeechRecognizer. CompileConstraintsAsync per compilare i vincoli prima di avviare il processo di riconoscimento.Call the SpeechRecognizer.CompileConstraintsAsync method to compile the constraints before starting the recognition process.

Specifica di una grammatica per ricerca sul Web (SpeechRecognitionTopicConstraint)Specify a web-search grammar (SpeechRecognitionTopicConstraint)

I vincoli argomento (grammatica per la dettatura o la ricerca sul Web) devono essere aggiunti alla raccolta di vincoli del riconoscimento vocale.Topic constraints (dictation or web-search grammar) must be added to the constraints collection of a speech recognizer.

Nota

È possibile usare un SpeechRecognitionListConstraint insieme a un SpeechRecognitionTopicConstraint per aumentare l'accuratezza della dettatura fornendo un set di parole chiave specifiche del dominio che si ritiene possano essere usate durante la dettatura.You can use a SpeechRecognitionListConstraint in conjunction with a SpeechRecognitionTopicConstraint to increase dictation accuracy by providing a set of domain-specific keywords that you think are likely to be used during dictation.

In questo caso aggiungiamo una grammatica di ricerca sul Web alla raccolta di vincoli.Here, we add a web-search grammar to the constraints collection.

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

Specifica di un vincolo elenco a livello di codice (SpeechRecognitionListConstraint)Specify a programmatic list constraint (SpeechRecognitionListConstraint)

I vincoli elenco devono essere aggiunti alla raccolta di vincoli del riconoscimento vocale.List constraints must be added to the constraints collection of a speech recognizer.

Tieni presenti i punti seguenti:Keep the following points in mind:

  • Puoi aggiungere più vincoli elenco a una raccolta di vincoli.You can add multiple list constraints to a constraints collection.
  • Puoi usare qualsiasi raccolta che implementi IIterable<String> per i valori della stringa.You can use any collection that implements IIterable<String> for the string values.

In questo caso specifichiamo una matrice di parole come vincolo elenco e la aggiungiamo alla raccolta di vincoli del riconoscimento vocale.Here, we programmatically specify an array of words as a list constraint and add it to the constraints collection of a speech recognizer.

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

Specifica di un vincolo grammatica SRGS (SpeechRecognitionGrammarFileConstraint)Specify an SRGS grammar constraint (SpeechRecognitionGrammarFileConstraint)

I file di grammatica SRGS devono essere aggiunti alla raccolta di vincoli del riconoscimento vocale.SRGS grammar files must be added to the constraints collection of a speech recognizer.

SRGS Version 1.0 è il linguaggio di markup standard del settore per la creazione di grammatiche in formato XML per il riconoscimento vocale.The SRGS Version 1.0 is the industry-standard markup language for creating XML-format grammars for speech recognition. Anche se le app di Windows universali forniscono alternative all'uso di SRGS per la creazione di grammatiche per il riconoscimento vocale, tieni presente che l'utilizzo di SRGS consente di ottenere i risultati migliori specialmente per gli scenari di riconoscimento vocale più comuni.Although Universal Windows apps provide alternatives to using SRGS for creating speech-recognition grammars, you might find that using SRGS to create grammars produces the best results, particularly for more involved speech recognition scenarios.

Le grammatiche SRGS forniscono un set di funzionalità completo che consente di progettare interazioni vocali complesse per la tua app.SRGS grammars provide a full set of features to help you architect complex voice interaction for your apps. Grazie alle grammatiche SRGS è ad esempio possibile:For example, with SRGS grammars you can:

  • Specificare l'ordine in cui parole e frasi devono essere pronunciate per essere riconosciute.Specify the order in which words and phrases must be spoken to be recognized.
  • Unire parole di più elenchi e frasi da riconoscere.Combine words from multiple lists and phrases to be recognized.
  • Creare link ad altre grammatiche.Link to other grammars.
  • Assegnare un peso a una parola o una frase alternativa per aumentare o diminuire le probabilità che venga usata come parola o frase corrispondente all'input vocale.Assign a weight to an alternative word or phrase to increase or decrease the likelihood that it will be used to match speech input.
  • Includere parole o frasi facoltative.Include optional words or phrases.
  • Usare regole speciali che consentano di escludere input non specificato o imprevisto, come ad esempio l'input vocale casuale che non corrisponde alla grammatica o il rumore di fondo.Use special rules that help filter out unspecified or unanticipated input, such as random speech that doesn't match the grammar, or background noise.
  • Usare la semantica per definire il significato che il riconoscimento vocale ha per la tua app.Use semantics to define what speech recognition means to your app.
  • Specificare le pronunce, inline in una grammatica oppure mediante link a un lessico.Specify pronunciations, either inline in a grammar or via a link to a lexicon.

Per altre info sugli elementi e gli attributi SRGS, vedi la pagina relativa al riferimento XML per la grammatica SRGS.For more info about SRGS elements and attributes, see the SRGS Grammar XML Reference . Per informazioni introduttive sulla creazione di una grammatica SRGS, vedi la pagina relativa alla creazione di una grammatica XML di base.To get started creating an SRGS grammar, see How to Create a Basic XML Grammar.

Tieni presenti i punti seguenti:Keep the following points in mind:

  • Puoi aggiungere più vincoli file di grammatica a una raccolta di vincoli.You can add multiple grammar-file constraints to a constraints collection.
  • Usa l'estensione di file grxml per i documenti delle grammatiche basate su XML conformi alle regole SRGS.Use the .grxml file extension for XML-based grammar documents that conform to SRGS rules.

In questo esempio viene usata una grammatica SRGS definita in un file denominato srgs.grxml (descritto più avanti).This example uses an SRGS grammar defined in a file named srgs.grxml (described later). Nelle proprietà del file, Azione pacchetto è impostato su Contenuto con Copia in directory di output impostato su Copia sempre:In the file properties, the Package Action is set to Content with Copy to Output Directory set to Copy always:

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

Questo file SRGS (srgs.grxml) include tag di interpretazione semantica,This SRGS file (srgs.grxml) includes semantic interpretation tags. i quali forniscono un meccanismo per restituire i dati di corrispondenza con la grammatica.These tags provide a mechanism for returning grammar match data to your app. Le grammatiche devono essere conformi alla specifica World Wide Web Consortium (W3C) Semantic Interpretation for Speech Recognition (SISR) 1,0 .Grammars must conform to the World Wide Web Consortium (W3C) Semantic Interpretation for Speech Recognition (SISR) 1.0 specification.

Di seguito ascoltiamo le varianti di "yes" e "no".Here, we listen for variants of "yes" and "no".

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

Gestione dei vincoliManage constraints

Dopo il caricamento di una raccolta di vincoli per il riconoscimento, la tua app può definire i vincoli da abilitare per le operazioni di riconoscimento impostando la proprietà IsEnabled di un vincolo su true o false.After a constraint collection is loaded for recognition, your app can manage which constraints are enabled for recognition operations by setting the IsEnabled property of a constraint to true or false. L'impostazione predefinita è true.The default setting is true.

In genere è più efficiente caricare i vincoli una volta sola abilitandoli e disabilitandoli quando necessario, anziché caricare, scaricare e compilare vincoli per ogni operazione di riconoscimento.It's usually more efficient to load constraints once, enabling and disabling them as needed, rather than to load, unload, and compile constraints for each recognition operation. Usa la proprietà IsEnabled quando necessario.Use the IsEnabled property, as required.

La limitazione del numero di vincoli consente di ridurre la quantità di dati in cui il riconoscimento vocale deve eseguire ricerche per individuare una corrispondenza per l'input vocale.Restricting the number of constraints serves to limit the amount of data that the speech recognizer needs to search and match against the speech input. In questo modo si può ottenere un miglioramento delle prestazioni e della precisione del riconoscimento vocale.This can improve both the performance and the accuracy of speech recognition.

Decidi quali vincoli abilitare in base alle frasi che l'app può prevedere nel contesto dell'operazione di riconoscimento corrente.Decide which constraints are enabled based on the phrases that your app can expect in the context of the current recognition operation. Ad esempio, se il contesto corrente dell'app è la visualizzazione di un colore, non è consigliabile abilitare un vincolo che riconosca i nomi degli animali.For example, if the current app context is to display a color, you probably don't need to enable a constraint that recognizes the names of animals.

Per richiedere all'utente le informazioni che è possibile pronunciare, usare le proprietà SpeechRecognizerUIOptions. AudiblePrompt e SpeechRecognizerUIOptions. ExampleText , che vengono impostate tramite la proprietà SpeechRecognizer. UIOptions .To prompt the user for what can be spoken, use the SpeechRecognizerUIOptions.AudiblePrompt and SpeechRecognizerUIOptions.ExampleText properties, which are set by means of the SpeechRecognizer.UIOptions property. Preparare gli utenti a ciò che possono dire durante l'operazione di riconoscimento aumenta la probabilità che pronuncino una frase che corrisponde a un vincolo attivo.Preparing users for what they can say during the recognition operation increases the likelihood that they will speak a phrase that can be matched to an active constraint.

EsempiSamples