Definir restrições de reconhecimento personalizadasDefine custom recognition constraints

Saiba como definir e usar restrições personalizadas para reconhecimento de fala.Learn how to define and use custom constraints for speech recognition.

APIs importantes: SpeechRecognitionTopicConstraint, SpeechRecognitionListConstraint, SpeechRecognitionGrammarFileConstraintImportant APIs: SpeechRecognitionTopicConstraint, SpeechRecognitionListConstraint, SpeechRecognitionGrammarFileConstraint

O reconhecimento de fala requer pelo menos uma restrição para definir um vocabulário reconhecível.Speech recognition requires at least one constraint to define a recognizable vocabulary. Se nenhuma restrição for especificada, será usada a gramática de ditado predefinida de Aplicativos Universais do Windows.If no constraint is specified, the predefined dictation grammar of Universal Windows apps is used. Consulte Reconhecimento de fala.See Speech recognition.

Adicionar restriçõesAdd constraints

Use a propriedade SpeechRecognizer.Constraints para adicionar restrições a um reconhecedor de fala.Use the SpeechRecognizer.Constraints property to add constraints to a speech recognizer.

Aqui, abordamos os três tipos de restrições de reconhecimento de fala usados de dentro de um aplicativo.Here, we cover the three kinds of speech recognition constraints used from within an app. (Para restrições de comando de voz da Cortana, consulte Iniciar um aplicativo em primeiro plano com comandos de voz no Cortana.)(For Cortana voice command constraints, see Launch a foreground app with voice commands in Cortana.)

Cada reconhecedor de fala pode ter uma coleção de restrição.Each speech recognizer can have one constraint collection. Somente estas combinações de restrições são válidas:Only these combinations of constraints are valid:

  • Uma restrição baseada em um único tópico (ditado ou pesquisa na Web)A single-topic constraint (dictation or web search)
  • No Windows 10 Fall Creators Update (10.0.16299.15) e posteriores, uma restrição baseada em um único tópico pode ser combinada com uma restrição de listaFor Windows 10 Fall Creators Update (10.0.16299.15) and newer, a single topic constraint can be combined with a list constraint
  • Uma combinação de restrições de lista e/ou restrições de arquivo de gramática.A combination of list constraints and/or grammar-file constraints.

Importante

Chame o método SpeechRecognizer.CompileConstraintsAsync para compilar as restrições antes de iniciar o processo de reconhecimento.Call the SpeechRecognizer.CompileConstraintsAsync method to compile the constraints before starting the recognition process.

Especifique uma gramática de pesquisa na Web (SpeechRecognitionTopicConstraint)Specify a web-search grammar (SpeechRecognitionTopicConstraint)

Restrições de tópico (ditado ou gramática de pesquisa na Web) devem ser adicionadas à coleção de restrições de um reconhecedor de fala.Topic constraints (dictation or web-search grammar) must be added to the constraints collection of a speech recognizer.

Observação

Você pode usar uma SpeechRecognitionListConstraint em conjunto com uma SpeechRecognitionTopicConstraint para aumentar a precisão do ditado fornecendo um conjunto de palavras-chave específicas ao domínio que, a seu ver, provavelmente serão usadas durante o ditado.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.

Aqui, adicionamos uma gramática de pesquisa na Web à coleção de restrições.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();
}

Especifique uma restrição de lista programática (SpeechRecognitionListConstraint)Specify a programmatic list constraint (SpeechRecognitionListConstraint)

Restrições de lista devem ser adicionadas à coleção de restrições de um reconhecedor de fala.List constraints must be added to the constraints collection of a speech recognizer.

Lembre-se bem do seguinte:Keep the following points in mind:

  • É possível adicionar várias restrições de lista a uma coleção de restrições.You can add multiple list constraints to a constraints collection.
  • É possível usar qualquer coleção que implemente IIterable<String> para os valores da cadeia de caracteres.You can use any collection that implements IIterable<String> for the string values.

Aqui, especificamos programaticamente uma matriz de palavras como uma restrição de lista e a adicionamos à coleção de restrições de um reconhecedor de fala.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();
}

Especifique uma restrição de gramática SRGS (SpeechRecognitionGrammarFileConstraint)Specify an SRGS grammar constraint (SpeechRecognitionGrammarFileConstraint)

Arquivos de gramática SRGS devem ser adicionados à coleção de restrições de um reconhecedor de fala.SRGS grammar files must be added to the constraints collection of a speech recognizer.

SRGS versão 1.0 é a linguagem de marcação padrão do setor para a criação de gramáticas em formato XML para reconhecimento de fala.The SRGS Version 1.0 is the industry-standard markup language for creating XML-format grammars for speech recognition. Embora os Aplicativos Universais do Windows ofereçam alternativas ao uso da SRGS para criar gramáticas de reconhecimento de fala, você poderá descobrir que usar a SRGS para criar gramáticas produz os melhores resultados, especialmente para cenários de reconhecimento de fala mais complexos.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.

As gramáticas da SRGS fornecem um conjunto completo de recursos para ajudar você a definir a complexa arquitetura da interação de voz para seus aplicativos.SRGS grammars provide a full set of features to help you architect complex voice interaction for your apps. Por exemplo, com as gramáticas da SRGS você pode:For example, with SRGS grammars you can:

  • Especificar a ordem na qual as palavras e frases devem ser ditas para serem reconhecidas.Specify the order in which words and phrases must be spoken to be recognized.
  • Combinar palavras de várias listas e frases para serem reconhecidas.Combine words from multiple lists and phrases to be recognized.
  • Criar um link para outras gramáticas.Link to other grammars.
  • Atribuir um peso a uma outra palavra ou frase para aumentar ou diminuir a probabilidade de que ela será usada para corresponder à entrada de fala.Assign a weight to an alternative word or phrase to increase or decrease the likelihood that it will be used to match speech input.
  • Incluir palavras ou frases opcionais.Include optional words or phrases.
  • Utilize regras especiais que ajudam a filtrar entradas inesperadas ou não especificadas, como fala aleatória que não corresponde à gramática, ou ruído de fundo.Use special rules that help filter out unspecified or unanticipated input, such as random speech that doesn't match the grammar, or background noise.
  • Use a semântica para definir o reconhecimento de fala por meio de seu aplicativo.Use semantics to define what speech recognition means to your app.
  • Especifique as pronúncias, quer em linha com uma gramática ou por meio de um link de um léxico.Specify pronunciations, either inline in a grammar or via a link to a lexicon.

Para saber mais sobre elementos e atributos da SRGS, consulte a Referência XML para gramáticas da SRGS.For more info about SRGS elements and attributes, see the SRGS Grammar XML Reference . Para começar a criar uma gramática SRGS, consulte Como criar uma gramática XML básica.To get started creating an SRGS grammar, see How to Create a Basic XML Grammar.

Lembre-se bem do seguinte:Keep the following points in mind:

  • É possível adicionar várias restrições de lista à coleção de restrições.You can add multiple grammar-file constraints to a constraints collection.
  • Use a extensão de arquivo .grxml para documentos de gramática baseados em XML que estão em conformidade com as regras SRGS.Use the .grxml file extension for XML-based grammar documents that conform to SRGS rules.

Esse exemplo usa uma gramática SRGS definida em um arquivo denominado srgs.grxml (descrito posteriormente).This example uses an SRGS grammar defined in a file named srgs.grxml (described later). Nas propriedades do arquivo, Ação de Pacote é definida para Conteúdo com Copiar para diretório de saída definido para Copiar 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();
}

Esse arquivo SRGS (srgs.grxml) inclui tags de interpretação semântica.This SRGS file (srgs.grxml) includes semantic interpretation tags. Essas tags fornecem um mecanismo para retornar dados correspondentes de gramática para seu aplicativo.These tags provide a mechanism for returning grammar match data to your app. As gramáticas devem estar em conformidade com a SISR (interpretação semântica) da especificação de reconhecimento de fala (World Wide Web Consortium) 1,0 (W3C).Grammars must conform to the World Wide Web Consortium (W3C) Semantic Interpretation for Speech Recognition (SISR) 1.0 specification.

Aqui, escutamos as variantes de "sim" e "não".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>

Gerenciar restriçõesManage constraints

Depois que uma coleção de restrições for carregada para reconhecimento, seu aplicativo poderá gerenciar quais restrições são permitidas para operações de reconhecimento definindo a propriedade IsEnabled de uma restrição como true ou 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. A configuração padrão é true.The default setting is true.

Geralmente, é mais eficaz carregar restrições uma vez e, em seguida, habilitá-las ou desabilitá-las conforme necessário, em vez de carregar, descarregar e compilar restrições para cada operação de reconhecimento.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. Use a propriedade IsEnabled, conforme necessário.Use the IsEnabled property, as required.

Restringir o número de restrições para limitar a quantidade de dados que o reconhecedor de fala precisa pesquisar para localizar uma correspondência para entrada de fala.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. Isso pode melhorar o desempenho e a precisão do reconhecimento de fala.This can improve both the performance and the accuracy of speech recognition.

Decida quais restrições são habilitadas com base nas frases que seu aplicativo espera no contexto da operação de reconhecimento atual.Decide which constraints are enabled based on the phrases that your app can expect in the context of the current recognition operation. Por exemplo, se o contexto do aplicativo atual for exibir uma cor, você poderá não precisar habilitar uma restrição que reconheça os nomes de animais.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.

Para avisar o usuário sobre o que pode ser falado, use as propriedades SpeechRecognizerUIOptions.AudiblePrompt e SpeechRecognizerUIOptions.ExampleText, que é possível definir usando a propriedade 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. Preparar usuários sobre o que eles podem dizer durante a operação de reconhecimento aumenta a probabilidade deles falarem uma frase que possa ser correspondida a uma restrição ativa.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.

ExemplosSamples