Share via


Como definir restrições de reconhecimento personalizadas (HTML)

[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente]

Saiba como definir e usar restrições personalizadas para reconhecimento de fala.

Observação  Comandos de voz e reconhecimento de fala não têm suporte em aplicativos da Windows Store no Windows 8 e no Windows 8.1.

 

O reconhecimento de fala requer pelo menos uma restrição para definir um vocabulário reconhecível. Se nenhuma restrição for especificada, será usada a gramática de ditado predefinida de Aplicativos Universais do Windows. Consulte o Guia de início rápido: reconhecimento de fala.

O que você precisa saber

Tecnologias

Pré-requisitos

Este tópico faz parte do Início de início rápido: reconhecimento de fala.

Para concluir este tutorial, dê uma olhada nestes tópicos para se familiarizar com as tecnologias discutidas aqui:

Instruções

Etapa 1: Adicionar restrições

Use a propriedade SpeechRecognizer.Constraints para adicionar restrições a um reconhecedor de fala.

Aqui abordamos os três tipos de restrições de reconhecimento de fala usados de dentro de um aplicativo. (Para restrições de comando de voz, veja Guia de início rápido: comandos de voz.)

Cada reconhecedor de fala pode ter uma coleção de restrição. Somente essas combinações de restrições são válidas:

  • Uma restrição baseada em um único tópico ou gramática predefinida (ditado ou pesquisa na Web). Nenhuma outra restrição é permitida.
  • Uma combinação da lista de restrições e/ou restrições de arquivo de gramática.

Lembre-se: Chame o método SpeechRecognizer.CompileConstraintsAsync para compilar restrições antes de iniciar o processo de reconhecimento.

Etapa 2: Especifique uma gramática de pesquisa na Web (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.

Aqui, adicionamos uma gramática de pesquisa na Web para a coleção de restrições.

function buttonSpeechRecognizerWebSearchClick() {
    // Create an instance of SpeechRecognizer.
    var speechRecognizer =
      new Windows.Media.SpeechRecognition.SpeechRecognizer();

    // 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.append(webSearchGrammar);

    // Compile the default dictation grammar.
    speechRecognizer.compileConstraintsAsync().done(
      // Success function.
      function (result) {
          // Start recognition.
          speechRecognizer.recognizeWithUIAsync().done(
            // Success function.
            function (speechRecognitionResult) {
                // Do something with the recognition result.
                var messageDialog =
                  new Windows.UI.Popups.MessageDialog(
                  speechRecognitionResult.text, "Text spoken");
                messageDialog.showAsync();
            },
            // Error function.
            function (err) {
                WinJS.log && WinJS.log("Speech recognition failed.");
            });
      },
      // Error function.
      function (err) {
          WinJS.log && WinJS.log("Constraint compilation failed.");
      });
    speechRecognizer.close();
}

Etapa 3: Especifique uma restrição de lista programática (SpeechRecognitionListConstraint)

Restrições de lista devem ser adicionadas à coleção de restrições de um reconhecedor de fala.

Lembre-se bem do seguinte:

  • É possível adicionar várias restrições de lista a uma coleção de restrições.
  • É possível usar qualquer coleção que implemente IIterable<String> para os valores da cadeia de caracteres.

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.

function buttonSpeechRecognizerListConstraintClick() {
    // Create an instance of SpeechRecognizer.
    var speechRecognizer =
      new Windows.Media.SpeechRecognition.SpeechRecognizer();

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

    // Add a web search grammar to the recognizer.
    var listConstraint =
        new Windows.Media.SpeechRecognition.SpeechRecognitionListConstraint(
        responses,
        "YesOrNo");

    speechRecognizer.uiOptions.audiblePrompt = "Say what you want to search for...";
    speechRecognizer.uiOptions.exampleText = "Ex. 'Yes', 'No'";
    speechRecognizer.constraints.append(listConstraint);

    // Compile the default dictation grammar.
    speechRecognizer.compileConstraintsAsync().done(
      // Success function.
      function (result) {
          // Start recognition.
          speechRecognizer.recognizeWithUIAsync().done(
            // Success function.
            function (speechRecognitionResult) {
                // Do something with the recognition result.
                var messageDialog =
                  new Windows.UI.Popups.MessageDialog(
                  speechRecognitionResult.text, "Text spoken");
                messageDialog.showAsync();
            },
            // Error function.
            function (err) {
                WinJS.log && WinJS.log("Speech recognition failed.");
            });
      },
      // Error function.
      function (err) {
          WinJS.log && WinJS.log("Constraint compilation failed.");
      });
    speechRecognizer.close();
}

Etapa 4: Especifique uma restrição de gramática SRGS (SpeechRecognitionGrammarFileConstraint)

Arquivos de gramática SRGS devem ser adicionados à coleção de restrições de um reconhecedor de fala.

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

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. Por exemplo, com as gramáticas da SRGS você pode:

  • Especificar a ordem na qual as palavras e frases devem ser ditas para serem reconhecidas.
  • Combinar palavras de várias listas e frases para serem reconhecidas.
  • Criar um link para outras gramáticas.
  • 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.
  • Incluir palavras ou frases opcionais.
  • 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 a semântica para definir o reconhecimento de fala por meio de seu aplicativo.
  • Especifique as pronúncias, quer em linha com uma gramática ou por meio de um link de um léxico.

Veja a Referência XML para gramáticas da SRGS para obter mais informações sobre elementos e atributos da SRGS. Para começar a criar uma gramática do SRGS, veja Como criar uma gramática XML básica.

Lembre-se bem do seguinte:

  • É possível adicionar várias restrições de lista à coleção de restrições.
  • Use a extensão de arquivo .grxml para documentos de gramática baseados em XML que estão em conformidade com as regras SRGS.

Esse exemplo usa uma gramática SRGS definida em um arquivo denominado srgs.grxml (descrito posteriormente). Nas propriedades do arquivo, Ação de Pacote é definida para Conteúdo com Copiar para diretório de saída definido para Copiar sempre:

function buttonSpeechRecognizerSRGSConstraintClick() {
    // Create an instance of SpeechRecognizer.
    var speechRecognizer =
      new Windows.Media.SpeechRecognition.SpeechRecognizer();

    speechRecognizer.uiOptions.audiblePrompt = "Say what you want to search for...";
    speechRecognizer.uiOptions.exampleText = "Ex. 'yes', 'no'";

    // Add a grammar file constraint to the recognizer.
    var uri = new Windows.Foundation.Uri("ms-appx:///data/srgs.grxml");
    var storageFile =
        Windows.Storage.StorageFile.getFileFromApplicationUriAsync(uri).then(
        // Success function.
        function (srgs) {
            var grammarfileConstraint =
                new Windows.Media.SpeechRecognition.SpeechRecognitionGrammarFileConstraint(srgs, "yesorno");
            speechRecognizer.constraints.append(grammarfileConstraint);
            // Compile the default dictation grammar.
            speechRecognizer.compileConstraintsAsync().then(
              // Success function.
              function (result) {
                  // Start recognition.
                  speechRecognizer.recognizeWithUIAsync().done(
                    // Success function.
                    function (speechRecognitionResult) {
                        // Do something with the recognition result.
                        var messageDialog =
                          new Windows.UI.Popups.MessageDialog(
                          speechRecognitionResult.text, "Text spoken");
                        messageDialog.showAsync();
                    },
                    // Error function.
                    function (err) {
                        WinJS.log && WinJS.log("Speech recognition failed.");
                    });
              },
              // Error function.
              function (err) {
                  WinJS.log && WinJS.log("Constraint compilation failed.");
              });
        },
        // Error function.
        function (err) {
            WinJS.log && WinJS.log("File retrieval failed.");
        });
    speechRecognizer.close();
}

Esse arquivo SRGS (srgs.grxml) inclui tags de interpretação semântica. Essas tags fornecem um mecanismo para retornar dados correspondentes de gramática para seu aplicativo. As gramáticas devem estar em conformidade com a especificação de Interpretação Semântica para Reconhecimento de Fala (SISR) 1.0 do World Wide Web Consortium (W3C).

Aqui, escutamos as variantes de "sim" e "não".

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

Etapa 5: Gerenciar restrições

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. A configuração padrão é 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. Use a propriedade IsEnabled, conforme necessário.

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. Isso pode melhorar o desempenho e a precisão do reconhecimento de fala.

Decida quais restrições são habilitadas com base nas frases que seu aplicativo espera no contexto da operação de reconhecimento atual. 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.

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

Tópicos relacionados

Respondendo a interações de fala

Designers

Diretrizes para design de controle por voz