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.
Use o reconhecimento de fala para fornecer entrada, especificar ações ou comandos e realizar tarefas 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
- Windows.Media.SpeechRecognition
- Speechrecognizer
- SpeechRecognitionResult
Visão geral
O reconhecimento de fala consiste em um ambiente de execução de fala, APIs de reconhecimento para programar esse ambiente de execução, gramáticas prontas para uso para ditado e pesquisas na Web e uma interface de usuário padrão do sistema que ajuda os usuários a descobrir e usar recursos de reconhecimento de fala.
Configurar o reconhecimento de fala
Para dar suporte ao reconhecimento de fala, o usuário deve se conectar e habilitar um microfone em seu dispositivo e aceitar a permissão de concessão da Política de Privacidade Microsoft para que seu aplicativo o use.
Defina a funcionalidade do dispositivo Microfone no manifesto do pacote do aplicativo para solicitar ao usuário permissão de acesso ao microfone. Para obter mais informações, consulte as declarações de funcionalidade do aplicativo.
Se o usuário conceder acesso, seu aplicativo aparecerá na lista de aplicativos aprovados em Configurações > Privacidade > Microfone. Como o usuário pode desabilitar essa configuração a qualquer momento, confirme se seu aplicativo tem acesso ao microfone antes de tentar usá-la.
Se você também quiser dar suporte a ditado ou a outros serviços de reconhecimento de fala (como uma gramática predefinida definida em uma restrição de tópico), confirme se o reconhecimento de fala online (Configurações > Privacidade > Fala) está habilitado.
O exemplo a seguir mostra como verificar se um microfone está presente e se seu aplicativo tem permissão para usá-lo.
public class AudioCapturePermissions
{
private static int NoCaptureDevicesHResult = -1072845856;
/// <summary>
/// Checks whether the microphone is available and the app has permission to use it.
/// Perform this check every time the app gets focus, because the user can change
/// the setting while the app is suspended or not in focus.
/// </summary>
/// <returns>True if the microphone is available.</returns>
public static async Task<bool> RequestMicrophonePermission()
{
try
{
var settings = new MediaCaptureInitializationSettings
{
StreamingCaptureMode = StreamingCaptureMode.Audio,
MediaCategory = MediaCategory.Speech
};
var capture = new MediaCapture();
await capture.InitializeAsync(settings);
}
catch (TypeLoadException)
{
// Media player components are not available.
return false;
}
catch (UnauthorizedAccessException)
{
// Permission to use the audio capture device is denied.
return false;
}
catch (Exception exception)
{
if (exception.HResult == NoCaptureDevicesHResult)
{
// No audio capture devices are present on this system.
return false;
}
throw;
}
return true;
}
}
Reconhecer entrada de fala
Uma restrição define as palavras e frases (vocabulário) que um aplicativo reconhece na entrada de fala. As restrições estão no centro do reconhecimento de fala e dão ao seu aplicativo maior controle sobre a precisão do reconhecimento.
Você pode usar os seguintes tipos de restrições.
Gramáticas predefinidas
O ditado predefinido e as gramáticas de pesquisa na Web fornecem reconhecimento de fala sem exigir que você crie uma gramática. Quando você usa essas gramáticas, um serviço Web remoto executa o reconhecimento e retorna os resultados para o dispositivo.
A gramática de ditado de texto livre padrão reconhece a maioria das palavras e frases que um usuário pode dizer em um idioma específico e é otimizada para frases curtas. Se você não especificar nenhuma restrição para o SpeechRecognizer, a gramática de ditado predefinida será usada.
A gramática de pesquisa na Web contém um grande número de palavras e frases, otimizadas para termos que as pessoas normalmente usam ao pesquisar na Web.
Observação
O ditado predefinido e as gramáticas de pesquisa na Web podem ser grandes e, por estarem online (não no dispositivo), o desempenho pode não ser tão rápido quanto com uma gramática personalizada instalada localmente.
Essas gramáticas predefinidas reconhecem até 10 segundos de entrada de fala e não exigem esforço de criação. No entanto, eles exigem uma conexão de rede.
Consulte SpeechRecognitionTopicConstraint.
Restrições de listas programáticas
As restrições de lista programática fornecem uma abordagem leve para criar gramáticas simples usando uma lista de palavras ou frases. Uma restrição de lista funciona bem para reconhecer frases curtas e distintas. Especificar todas as palavras em uma gramática melhora a precisão do reconhecimento porque o mecanismo de reconhecimento de fala só precisa processar a fala para confirmar uma correspondência. A lista também pode ser atualizada programaticamente.
Consulte SpeechRecognitionListConstraint.
Gramáticas SRGS
Uma gramática SRGS (Especificação de Gramática de Reconhecimento de Fala) é um documento estático que usa o formato XML definido pelo SRGS Versão 1.0. Uma gramática SRGS oferece o maior controle sobre a experiência de reconhecimento de fala, permitindo que você capture vários significados semânticos em um único reconhecimento.
Consulte SpeechRecognitionGrammarFileConstraint.
Restrições de comando de voz
Use um arquivo XML de Definição de Comando de Voz (VCD) para definir os comandos que o usuário pode dizer para iniciar ações ao ativar seu aplicativo. Consulte SpeechRecognitionVoiceCommandDefinitionConstraint.
Para começar a usar restrições, consulte Definir restrições de reconhecimento personalizadas.
Exemplo de reconhecimento básico
O exemplo a seguir cria um reconhecedor de fala, compila as restrições de ditado padrão e começa a escutar a entrada de fala.
private async void StartRecognizing_Click(object sender, RoutedEventArgs e)
{
var speechRecognizer = new Windows.Media.SpeechRecognition.SpeechRecognizer();
// Compile the default dictation grammar.
await speechRecognizer.CompileConstraintsAsync();
// Start recognition.
Windows.Media.SpeechRecognition.SpeechRecognitionResult result =
await speechRecognizer.RecognizeAsync();
// Display the recognized text.
if (result.Status == Windows.Media.SpeechRecognition.SpeechRecognitionResultStatus.Success)
{
resultTextBlock.Text = result.Text;
}
}
Observação
Este exemplo usa RecognizeAsync (sem interface do usuário). Se você quiser usar a interface de usuário de reconhecimento integrada, chame RecognizeWithUIAsync em vez disso. Consulte SpeechRecognizerUIOptions para ver as opções de personalização.
Personalizar a interface de reconhecimento
Quando seu aplicativo chama SpeechRecognizer.RecognizeWithUIAsync, o sistema exibe várias telas em sequência:
- Para gramáticas predefinidas (ditado ou pesquisa na Web): Escutando → Pensando → ouvi você dizer (ou erro).
- Para restrições de lista ou SRGS: Ouvindo → Você disse (se ambíguo) → Ouvi você dizer (ou erro).
Use a classe SpeechRecognizerUIOptions (obtida por meio de SpeechRecognizer.UIOptions) para personalizar a tela Escutando:
private async void WeatherSearch_Click(object sender, RoutedEventArgs e)
{
var speechRecognizer = new Windows.Media.SpeechRecognition.SpeechRecognizer();
speechRecognizer.RecognitionQualityDegrading += SpeechRecognizer_RecognitionQualityDegrading;
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;
}
Artigos relacionados
Windows developer