Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aprenda a definir e usar restrições personalizadas para reconhecimento de voz.
APIs importantes: SpeechRecognitionTopicConstraint, SpeechRecognitionListConstraint, SpeechRecognitionGrammarFileConstraint
O reconhecimento de fala requer pelo menos uma restrição para definir um vocabulário reconhecível. Se não for especificada nenhuma restrição, utiliza-se a gramática de ditado pré-definida das aplicações Universal Windows. Ver Reconhecimento de Fala.
Adicionar restrições
Use a propriedade SpeechRecognizer.Constraints para adicionar restrições a um reconhecedor de voz.
Aqui, abordamos os três tipos de restrições de reconhecimento de voz utilizadas dentro de uma aplicação. (Para restrições de comandos de voz da Cortana, veja Ativar uma aplicação em primeiro plano com comandos de voz através da Cortana.)
- Reconhecimento de FalaTópicoRestrição — Uma restrição baseada numa gramática pré-definida (ditado ou pesquisa na web).
- Reconhecimento de Fala Restrição de Lista—Uma restrição baseada numa lista de palavras ou frases.
- RestriçãoDeFicheiroDeGramáticaDeReconhecimentoDeFala — 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. Apenas estas combinações de restrições são válidas:
- Uma restrição de tema único (ditado ou pesquisa na web)
- Para Windows 10 Fall Creators Update (10.0.16299.15) e versões posteriores, uma restrição de tópico único pode ser combinada com uma restrição de lista
- Uma combinação de restrições de lista e/ou restrições de ficheiro gramatical.
Importante
Chame o método 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)
As 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.
Observação
Pode usar um SpeechRecognitionListConstraint em conjunto com um SpeechRecognitionTopicConstraint para aumentar a precisão do ditado, fornecendo um conjunto de palavras-chave específicas do domínio que acha que são provavelmente usadas durante o ditado.
Aqui, adicionamos uma gramática de pesquisa na web à coleção de restrições.
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();
}
Especificar uma restrição de lista programática (SpeechRecognitionListConstraint)
As restrições de lista devem ser adicionadas à coleção de restrições de um reconhecedor de voz.
Tenha em mente os seguintes pontos:
- Pode adicionar múltiplas restrições de lista a uma coleção de restrições.
- Podes usar qualquer coleção que implemente IIterable<String> para os valores das strings.
Aqui, especificamos programaticamente uma matriz de palavras como restrição de lista e adicionamo-la à coleção de restrições de um reconhecedor de voz.
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 gramatical do SRGS (SpeechRecognitionGrammarFileConstraint)
Os ficheiros gramaticais SRGS devem ser adicionados à coleção de restrições de um reconhecedor de voz.
A Versão 1.0 do SRGS é a linguagem de marcação padrão da indústria para criar gramáticas em formato XML para reconhecimento de voz. Embora as aplicações universais para Windows ofereçam alternativas ao uso do SRGS para criar gramáticas de reconhecimento de voz, pode descobrir que usar o SRGS para criar gramáticas produz os melhores resultados, especialmente em cenários mais complexos de reconhecimento de voz.
As gramáticas SRGS fornecem um conjunto completo de funcionalidades para o ajudar a arquitetar interações vocais complexas para as suas aplicações. Por exemplo, com gramáticas do SRGS pode-se:
- Especifique a ordem em que as palavras e frases devem ser ditas para serem reconhecidas.
- Combine palavras de várias listas e frases para serem reconhecidas.
- Link para outras gramáticas.
- Atribuir peso a uma palavra ou frase alternativa para aumentar ou diminuir a sua probabilidade de ser utilizada para corresponder à entrada da fala.
- Inclua palavras ou frases opcionais.
- Use regras especiais que ajudem a filtrar entradas não especificadas ou inesperadas, como fala aleatória que não corresponde à gramática, ou ruído de fundo.
- Use a semântica para definir o que o reconhecimento de fala significa para a sua aplicação.
- Especifique as pronúncias, seja em linha numa gramática ou através de um link para um léxico.
Para mais informações sobre elementos e atributos do SRGS, consulte a Referência XML de Gramática do SRGS . Para começar a criar uma gramática SRGS, veja Como Criar uma Gramática XML Básica.
Tenha em mente os seguintes pontos:
- Pode adicionar múltiplas restrições de ficheiros gramaticais a uma coleção de restrições.
- Use a extensão de ficheiro .grxml para documentos gramaticais baseados em XML que cumpram as regras SRGS.
Este exemplo utiliza uma gramática SRGS definida num ficheiro chamado srgs.grxml (descrito mais adiante). Nas propriedades do ficheiro, a Ação de Pacote é definida como Conteúdo , com Copiar para o Diretório de Saída definido para Copiar sempre:
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();
}
Este ficheiro SRGS (srgs.grxml) inclui etiquetas de interpretação semântica. Estas etiquetas fornecem um mecanismo para devolver dados de correspondência gramatical à sua aplicação. As gramáticas devem estar em conformidade com a especificação Interpretação Semântica para Reconhecimento de Fala (SISR) 1.0 do World Wide Web Consortium (W3C).
Aqui, ouvimos 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>
Gerir restrições
Depois de uma coleção de restrições ser carregada para reconhecimento, a sua aplicação pode gerir quais as restrições ativadas para operações de reconhecimento, definindo a propriedade IsEnabled de uma restrição como verdadeiro ou falso. A definição padrão é a verdadeira.
Normalmente é mais eficiente carregar as restrições uma vez, ativando-as e desativando-as 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 serve para limitar a quantidade de dados que o reconhecedor de fala precisa de pesquisar e comparar com a entrada de voz. Isto pode melhorar tanto o desempenho como a precisão do reconhecimento de voz.
Decida quais as restrições ativadas com base nas frases que a sua aplicação pode esperar no contexto da operação de reconhecimento atual. Por exemplo, se o contexto atual da aplicação for para mostrar uma cor, provavelmente não precisa de ativar uma restrição que reconheça os nomes dos animais.
Para orientar o utilizador sobre o que pode ser dito, utilize as propriedades SpeechRecognizerUIOptions.AudiblePrompt e SpeechRecognizerUIOptions.ExampleText, que são definidas através da propriedade SpeechRecognizer.UIOptions. Preparar os utilizadores para o que podem dizer durante a operação de reconhecimento aumenta a probabilidade de pronunciarem uma frase que possa ser associada a uma restrição ativa.
Artigos relacionados
Samples
Windows developer