Definir restrições de reconhecimento personalizadas

Aprenda a definir e usar restrições personalizadas para reconhecimento de fala na sua aplicação SDK de Aplicações Windows.

Importante

O reconhecimento de voz requer a identidade do pacote MSIX. As APIs Windows.Media.SpeechRecognition estão disponíveis apenas quando a sua aplicação é executada com identidade de pacote (empacotada ou empacotada com localização externa). As aplicações não embaladas não podem usar estas APIs.

APIs principais

Descrição geral

O reconhecimento de fala requer pelo menos uma restrição para definir um vocabulário reconhecível. Se não especificares uma restrição, usa-se a gramática de ditado pré-definida. Ver Reconhecimento de Fala.

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

  • SpeechRecognitionTopicConstraint — Uma restrição baseada numa gramática predefinida (ditado ou pesquisa na web).
  • SpeechRecognitionListConstraint — Uma restrição baseada numa lista de palavras ou frases.
  • SpeechRecognitionGrammarFileConstraint — Uma restrição definida num ficheiro de Especificação de Gramática de Reconhecimento de Fala (SRGS).

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

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

Importante

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

Especifique uma gramática de pesquisa na web (SpeechRecognitionTopicConstraint - Restrição de Tópico de Reconhecimento de Fala)

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

Especifique uma restrição gramatical do SRGS (SpeechRecognitionGrammarFileConstraint)

As gramáticas SRGS fornecem um conjunto completo de funcionalidades para interações vocais complexas, incluindo especificar a ordem em que as palavras devem ser pronunciadas, combinar palavras de várias listas, ligar 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 extensão de .grxml ficheiro para documentos gramaticais baseados em XML que cumpram as regras SRGS. Defina a Ação de Compilação do ficheiro como Conteúdo e Copiar para o Diretório de Saída como Copiar sempre.

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

Gerir restrições

Depois de carregar uma coleção de restrições, pode ativar ou desativar restrições individuais definindo a IsEnabled propriedade como true ou false. A predefinição é true.

Carregar restrições uma vez e depois ativar ou desativá-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 tanto o desempenho como a precisão do reconhecimento de voz. Decida quais as restrições a ativar com base nas frases que a sua aplicação pode esperar no contexto atual.