Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Use o reconhecimento de voz para fornecer input, especificar ações ou comandos e realizar tarefas na sua aplicação do 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 voz consiste num ambiente de execução de voz, APIs de reconhecimento para programar esse ambiente de execução, gramáticas prontas a utilizar para ditado e pesquisa Web, e uma interface de utilizador predefinida do sistema que ajuda os utilizadores a descobrir e a utilizar funcionalidades de reconhecimento de voz.
Configurar reconhecimento de voz
Para suportar o reconhecimento de voz, o utilizador deve ligar e ativar um microfone no seu dispositivo e aceitar a Política de Privacidade da Microsoft que concede permissão para a sua aplicação utilizá-lo.
Defina a funcionalidade do dispositivo Microfone no manifesto do pacote da sua aplicação para pedir ao utilizador permissão de acesso ao microfone. Para mais informações, consulte declarações de capacidades da aplicação.
Se o utilizador conceder acesso, a sua aplicação aparece na lista de aplicações aprovadas em Definições > Privacidade > Microfone. Como o utilizador pode desativar esta definição a qualquer momento, confirme se a sua aplicação tem acesso ao microfone antes de tentar usá-la.
Se também quiser suportar ditado ou outros serviços de reconhecimento de voz (como uma gramática pré-definida definida numa restrição de tópico), confirme que o reconhecimento de fala Online (Configurações > de Privacidade > de Fala) está ativado.
O exemplo seguinte mostra como verificar se um microfone está presente e se a sua aplicação tem permissão para o usar.
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 uma aplicação reconhece na entrada da fala. As restrições estão no centro do reconhecimento de voz e dão à sua aplicação maior controlo sobre a precisão do reconhecimento.
Pode usar os seguintes tipos de restrições.
Gramáticas pré-definidas
A ditadura pré-definida e as gramáticas de pesquisa na web fornecem reconhecimento de fala sem exigir que escreva uma gramática. Quando utiliza estas gramáticas, um serviço web remoto realiza o reconhecimento e devolve os resultados ao dispositivo.
A gramática padrão de ditado em texto livre reconhece a maioria das palavras e frases que um utilizador pode dizer numa determinada língua, estando otimizada para frases curtas. Se não especificar quaisquer restrições para o seu SpeechRecognizer, é usada a gramática de ditado pré-definida.
A gramática de pesquisa na web contém um grande número de palavras e expressões, otimizadas para termos que as pessoas normalmente usam ao pesquisar na internet.
Observação
As gramáticas de ditado e pesquisa web pré-definidas podem ser grandes e, como estão online (não no dispositivo), o desempenho pode não ser tão rápido como com uma gramática personalizada instalada localmente.
Estas gramáticas predefinidas reconhecem até 10 segundos de entrada de fala e não requerem esforço de autoria. No entanto, requerem uma ligação à rede.
Veja SpeechRecognitionTopicConstraint.
Restrições de listas programáticas
As restrições de listas programáticas fornecem uma abordagem leve para criar gramáticas simples, utilizando uma lista de palavras ou frases. Uma restrição de lista funciona bem para reconhecer frases curtas e distintas. Especificar todas as palavras numa gramática melhora a precisão do reconhecimento porque o motor de reconhecimento de fala só precisa de processar a fala para confirmar uma correspondência. A lista também pode ser atualizada programaticamente.
Consulte SpeechRecognitionListConstraint.
Gramáticas SRGS
Uma gramática da Especificação de Gramáticas de Reconhecimento de Fala (SRGS) é um documento estático que utiliza o formato XML definido na SRGS Versão 1.0. Uma gramática SRGS dá-lhe o maior controlo sobre a experiência de reconhecimento de voz ao permitir-lhe captar múltiplos significados semânticos num único reconhecimento.
Consulte SpeechRecognitionGrammarFileConstraint.
Restrições de comandos de voz
Use um ficheiro XML de Definição de Comando de Voz (VCD) para definir os comandos que o utilizador pode dar para iniciar ações ao ativar a sua aplicação. Consulte SpeechRecognitionVoiceCommandDefinitionConstraint.
Para começar com restrições, veja Definir restrições de reconhecimento personalizadas.
Exemplo básico de reconhecimento
O exemplo seguinte cria um reconhecedor de fala, compila as restrições de ditado predefinidas e começa a escutar a entrada de voz.
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). Se quiseres usar a interface de reconhecimento incorporada, liga RecognizeWithUIAsync em vez disso. Consulte SpeechRecognizerUIOptions para ver as opções de personalização.
Personalize a interface de reconhecimento
Quando a sua aplicação chama o SpeechRecognizer.RecognizeWithUIAsync, o sistema apresenta vários ecrãs em sequência:
- Para gramáticas pré-definidas (ditado ou pesquisa na web): Ouvir → Pensar → Ouvi-te dizer (ou erro).
- Para restrições de lista ou SRGS: A escutar → Disseste (se ambíguo) → Ouvi dizer (ou erro).
Use a classe SpeechRecognizerUIOptions (obtida através de SpeechRecognizer.UIOptions) para personalizar o ecrã de Escuta :
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