Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Saiba como capturar e reconhecer a entrada de fala de ditado contínuo de forma longa 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
No reconhecimento de fala, você aprenderá a capturar e reconhecer a entrada de fala curta usando RecognizeAsync ou RecognizeWithUIAsync. Para sessões mais longas e contínuas de reconhecimento de fala — como ditado ou e-mail — use a propriedade ContinuousRecognitionSession de um SpeechRecognizer para obter um objeto SpeechContinuousRecognitionSession.
Observação
O suporte à linguagem de ditado depende do dispositivo em que seu aplicativo está em execução. Para computadores e laptops, somente en-US é reconhecido por ditado, enquanto Xbox pode reconhecer todos os idiomas compatíveis com o reconhecimento de fala. Para obter mais informações, consulte Especificar o idioma do reconhecedor de fala.
Configuração
Seu aplicativo precisa dos seguintes objetos para gerenciar uma sessão de ditado contínuo:
- Uma instância de um objeto
SpeechRecognizer. - Uma referência ao dispatcher da UI para atualizar a interface do usuário durante o ditado.
- Uma maneira de acompanhar as palavras acumuladas faladas pelo usuário.
Declare uma SpeechRecognizer instância e uma StringBuilder para acumular resultados de reconhecimento como campos de sua classe de página:
private SpeechRecognizer speechRecognizer;
private StringBuilder dictatedTextBuilder;
No WinUI 3, você usa DispatcherQueue para encaminhar atualizações da interface do usuário a partir de threads em segundo plano (não CoreDispatcher):
// Get the DispatcherQueue for the current thread (UI thread).
private Microsoft.UI.Dispatching.DispatcherQueue dispatcherQueue =
Microsoft.UI.Dispatching.DispatcherQueue.GetForCurrentThread();
Inicializar
Durante a inicialização, você:
- Inicialize o reconhecedor de fala.
- Compile a gramática de ditado interna (ou adicione restrições personalizadas).
- Configure ouvintes de eventos para os eventos de reconhecimento.
// Initialize the speech recognizer.
speechRecognizer = new SpeechRecognizer();
// Compile the default dictation grammar.
SpeechRecognitionCompilationResult result =
await speechRecognizer.CompileConstraintsAsync();
// Subscribe to continuous recognition events.
speechRecognizer.ContinuousRecognitionSession.ResultGenerated +=
ContinuousRecognitionSession_ResultGenerated;
speechRecognizer.ContinuousRecognitionSession.Completed +=
ContinuousRecognitionSession_Completed;
speechRecognizer.HypothesisGenerated +=
SpeechRecognizer_HypothesisGenerated;
dictatedTextBuilder = new StringBuilder();
Manipular eventos de reconhecimento
Resultado gerado
O ResultGenerated evento é acionado enquanto o usuário fala. O reconhecedor envia periodicamente um segmento da entrada de fala. Verifique a Confidence propriedade para decidir se aceita o resultado.
Como esse evento é acionado em um thread em segundo plano, use DispatcherQueue.TryEnqueue para atualizar a interface do usuário:
private void ContinuousRecognitionSession_ResultGenerated(
SpeechContinuousRecognitionSession sender,
SpeechContinuousRecognitionResultGeneratedEventArgs args)
{
if (args.Result.Confidence == SpeechRecognitionConfidence.Medium ||
args.Result.Confidence == SpeechRecognitionConfidence.High)
{
dictatedTextBuilder.Append(args.Result.Text + " ");
dispatcherQueue.TryEnqueue(() =>
{
dictationTextBox.Text = dictatedTextBuilder.ToString();
btnClearText.IsEnabled = true;
});
}
}
Concluído
O Completed evento indica que a sessão de reconhecimento contínuo terminou. A sessão termina quando você chama StopAsync ou CancelAsync, ou quando ocorre um erro, ou quando o usuário parou de falar.
private void ContinuousRecognitionSession_Completed(
SpeechContinuousRecognitionSession sender,
SpeechContinuousRecognitionCompletedEventArgs args)
{
if (args.Status != SpeechRecognitionResultStatus.Success)
{
dispatcherQueue.TryEnqueue(() =>
{
if (args.Status == SpeechRecognitionResultStatus.TimeoutExceeded)
{
dictationTextBox.Text = dictatedTextBuilder.ToString();
}
});
}
}
HypothesisGenerated
Manipule o HypothesisGenerated evento para mostrar resultados provisórios enquanto o reconhecedor ainda está sendo processado. Isso melhora a capacidade de resposta fornecendo comentários ao usuário antes que um resultado final esteja disponível:
private void SpeechRecognizer_HypothesisGenerated(
SpeechRecognizer sender,
SpeechRecognitionHypothesisGeneratedEventArgs args)
{
string hypothesis = args.Hypothesis.Text;
string textboxContent = dictatedTextBuilder.ToString() + " " + hypothesis + " ...";
dispatcherQueue.TryEnqueue(() =>
{
dictationTextBox.Text = textboxContent;
btnClearText.IsEnabled = true;
});
}
Iniciar e interromper o reconhecimento
Verifique o estado do reconhecedor antes de iniciar ou parar uma sessão:
// Start continuous recognition.
if (speechRecognizer.State == SpeechRecognizerState.Idle)
{
await speechRecognizer.ContinuousRecognitionSession.StartAsync();
}
// Stop continuous recognition (lets pending events complete).
if (speechRecognizer.State != SpeechRecognizerState.Idle)
{
await speechRecognizer.ContinuousRecognitionSession.StopAsync();
}
Para cancelar imediatamente e descartar resultados pendentes, chame CancelAsync em vez de StopAsync.
Observação
Um ResultGenerated evento pode ser acionado depois que você chamar CancelAsync devido ao multithreading. Se você definir campos privados ao cancelar a sessão de reconhecimento, sempre valide seus valores no ResultGenerated manipulador.
Artigos relacionados
- Reconhecimento de fala
- Interações de fala
- Definir restrições de reconhecimento personalizadas
Windows developer