Definir restrições de reconhecimento personalizadas

Saiba como definir e usar restrições personalizadas para reconhecimento de fala em seu aplicativo SDK do Aplicativo Windows.

Importante

O reconhecimento de fala requer a identidade do pacote MSIX. As APIs Windows.Media.SpeechRecognition estão disponíveis somente quando seu aplicativo é executado com identidade de pacote (empacotado ou empacotado com localização externa). Aplicativos não empacotados não podem usar essas APIs.

APIs de chave

Visão geral

O reconhecimento de fala requer pelo menos uma restrição para definir um vocabulário reconhecível. Se você não especificar uma restrição, a gramática de ditado predefinida será usada. Consulte o reconhecimento de fala.

Use a SpeechRecognizer.Constraints propriedade para adicionar restrições a um reconhecedor de fala. Três tipos de restrições estão disponíveis:

  • SpeechRecognitionTopicConstraint — uma restrição baseada em uma gramática predefinida (ditado ou pesquisa na Web).
  • SpeechRecognitionListConstraint – uma restrição baseada em uma lista de palavras ou frases.
  • SpeechRecognitionGrammarFileConstraint — uma restrição definida em um arquivo SRGS (Especificação de Gramática de Reconhecimento de Fala).

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

  • Uma restrição de tópico único (ditado ou pesquisa na Web)
  • Uma única restrição de tópico combinada com uma restrição de lista
  • Uma combinação de restrições de lista e/ou restrições de arquivo gramatical

Importante

Chame SpeechRecognizer.CompileConstraintsAsync para compilar as restrições antes de iniciar o processo de reconhecimento.

Especificar uma gramática de pesquisa na Web (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;
}

Especificar uma restrição de lista programática (SpeechRecognitionListConstraint)

As restrições de lista são uma maneira leve de criar gramáticas simples a partir de uma lista de palavras ou frases. Uma restrição de lista funciona bem para reconhecer frases curtas e distintas:

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

Especificar uma restrição de gramática SRGS (SpeechRecognitionGrammarFileConstraint)

As gramáticas SRGS fornecem um conjunto completo de recursos para interação de voz complexa, incluindo especificar a ordem na qual as palavras devem ser faladas, combinar palavras de várias listas, vincular a outras gramáticas e usar interpretação semântica:

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

Use a .grxml extensão de arquivo para documentos gramaticais baseados em XML que estejam em conformidade com as regras do SRGS. Defina a Ação de Compilação do arquivo como Conteúdo e Copiar para o Diretório de Saída como Copiar sempre.

Para obter mais informações sobre elementos e atributos do SRGS, consulte a Referência XML de Gramática SRGS.

Gerenciar restrições

Depois de carregar uma coleção de restrições, você pode habilitar ou desabilitar restrições individuais definindo a IsEnabled propriedade como true ou false. O padrão é true.

Carregar restrições uma vez e depois habilitá-las ou desabilitá-las conforme necessário é mais eficiente do que carregar, descarregar e compilar restrições para cada operação de reconhecimento.

Restringir o número de restrições ativas melhora o desempenho e a precisão do reconhecimento de fala. Decida quais restrições habilitar com base nas frases que seu aplicativo pode esperar no contexto atual.