30 09 2014
Reconhecimento de voz em aplicativos para a Windows Store
Caro(a) leitor(a), na semana passada escrevi sobre síntese de voz em aplicativos para a Windows Store. Para completar o ciclo, nesta semana vou abordar o reconhecimento de voz (speech recognition) em aplicativos para a Windows Store.
Como mencionei no artigo da semana passada, a sistemática para reconhecimento de voz em aplicativos para a Windows Store mudou bastante ao compararmos com a maneira como isso é feito em aplicativos desktop “normais“. Em aplicativos para a Windows Store precisamos utilizar o controle Bing Speech Recognition. Porém, não basta simplesmente instalar e sair utilizando. Temos que seguir todo um processo estranho e atualmente mal documentado. Por isso decidi fazer algo como um passo-a-passo neste artigo.
Instalando o controle Bing Speech Recognition
O primeiro (e mais fácil) passo desse processo é instalar o controle “Bing Speech Recognition“. Para isso, vá até a página do controle, clique em “Baixar” e siga as instruções do instalador. Isso fará com que o controle seja adicionado ao seu Visual Studio 2013. O próximo passo é criar um aplicativo no Microsoft Azure Marketplace.
Criando um aplicativo no Microsoft Azure Marketplace
Esse é o passo mais sinistro e mal documentado de todo o processo. Consegui fazer um dos exemplos da própria Microsoft funcionar com a ajuda de um outro MVP da Bélgica (o Diederik Krols). Hoje, ao escrever esse artigo, fui me aprofundando mais e mais na documentação e, depois de vários cliques, acabei chegando neste documento da Microsoft. Em uma das categorias desse documento você consegue encontrar o procedimento para registrar a aplicação no Marketplace e conseguir as credenciais para fazer o controle funcionar. Vou poupar o seu trabalho e detalhar o processo com algumas screenshots.
A primeira etapa é ir até o Microsoft Azure Marketplace (que, a propósito, eu nem sabia que existia) e criar uma conta, caso você ainda não tenha uma. É importante que você utilize o país “United States“, pois o controle do Bing Speech Recognition só está disponível nessa região. Caso você já tenha uma conta no Microsoft Azure Marketplace, é só ir em “My Account” e mudar o país para “United States“.
Após ter criado a conta, vá até a página do Speech Recognition Control Data e clique em “Sign Up“. Siga os passos até que o controle seja adicionado à sua conta.
Feito isso, agora é hora de criar uma application no Azure Marketplace. Vá até a página de aplicações para desenvolvedores e clique em “Register“:
Na página que se abre, preencha as informações necessárias e clique em “Create“, atentando principalmente para os campos “Client ID” e “Client secret“, uma vez que você irá precisar dessas informações mais para frente na construção da aplicação de exemplo. No campo “Client ID” você pode escolher um ID para a sua aplicação. E o campo “Client secret” vem automaticamente preenchido com o token a ser utilizado na aplicação para realizar a autenticação.
Feito o registro, feche a página do Microsoft Azure Marketplace e abra o Visual Studio para construirmos a nossa aplicação de exemplo (ufa!).
Utilizando o controle Bing Speech Recognition
No Visual Studio 2013, crie uma Windows Store Blank App. Logo de cara, vá até as referências e adicione a referência ao Bing.Speech, que você encontra dentro da categoria “Extensions“:
Feito isso, na MainPage, logo no topo do XAML, na declaração da Page, adicione o namespace para o Bing Speech Recognition (xmlns:speech=”using:Bing.Speech.Xaml”):
<Page x:Class="App3.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:App3" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:speech="using:Bing.Speech.Xaml" mc:Ignorable="d">
Tente compilar a aplicação e veja que você não vai conseguir. Isso se deve ao fato de que o controle do Bing Speech não funciona com a arquitetura “Any CPU“, que é o default do Visual Studio quando criamos uma solução para a Windows Store:
Portanto, temos que alterar a arquitetura de “Any CPU” para alguma das opções disponíveis (ARM, x86 ou x64) na barra do Visual Studio ou na página “Build” das propriedades da sua aplicação:
Eu recomendo nesse caso, pelo menos para desenvolver, a utilização da arquitetura x86, uma vez que, com essa arquitetura, o designer do XAML funciona perfeitamente. Recompile a solução e veja que, após a alteração da arquitetura, ela é compilada com sucesso.
Agora, dentro do Grid, vamos criar um StackPanel com três controles: um SpeechRecognizerUx (que é o controle de UI do Bing Speech Recognition), um TextBlock (que vai armazenar o texto reconhecido) e um AppBarButton (que servirá para começar o processo de reconhecimento):
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <StackPanel> <speech:SpeechRecognizerUx Height="100" x:Name="SpeechControl" /> <TextBlock x:Name="ResultText" FontSize="60"/> <AppBarButton x:Name="SpeakButton" Icon="Microphone" Click="SpeakButton_Click"></AppBarButton> </StackPanel> </Grid>
Depois vá até o code-behind da MainPage, declare um Bing.Speech.SpeechRecognizer e, no evento Loaded da MainPage, vamos inicializá-lo:
private Bing.Speech.SpeechRecognizer _recognizer; public MainPage() { this.InitializeComponent(); this.Loaded += MainPage_Loaded; } void MainPage_Loaded(object sender, RoutedEventArgs e) { var credentials = new Bing.Speech.SpeechAuthorizationParameters(); credentials.ClientId = "SEU_CLIENT_ID"; credentials.ClientSecret = "SEU_CLIENT_SECRET"; _recognizer = new Bing.Speech.SpeechRecognizer("en-US", credentials); SpeechControl.SpeechRecognizer = _recognizer; }
Note que nesse passo é importante que você configure corretamente o “ClientID” e “ClientSecret” obtidos no passo anterior, durante a criação do aplicativo no Microsoft Azure Marketplace.
O passo final no desenvolvimento do exemplo é implementar o handler para o evento Click do botão que iniciará o processo de reconhecimento de voz. Nesse evento, vamos chamar o método RecognizeSpeechToTextAsync e colocar o resultado do reconhecimento no TextBlock que chamamos anteriormente de ResultText:
private async void SpeakButton_Click(object sender, RoutedEventArgs e) { try { var result = await _recognizer.RecognizeSpeechToTextAsync(); if (result.TextConfidence != Bing.Speech.SpeechRecognitionConfidence.Rejected) ResultText.Text = result.Text; else ResultText.Text = "Desculpe, não consegui detectar o que você falou..."; } catch (Exception) { ResultText.Text = "Erro durante o reconhecimento de voz..."; } }
Por fim, os únicos passos que estão faltando são adicionar a “capability” de microfone e adicionar mais algumas informações no seu arquivo appxmanifest. Para adicionar a capability de microfone, abra o arquivo appxmanifest da sua aplicação, vá até a aba “Capabilities” e marque a opção “Microphone“:
Agora só falta a gambiarra nível “pro” de adicionar “na mão” umas extensions no seu arquivo appxmanifest, caso contrário a aplicação não funcionará e lançará uma exception durante o processo de reconhecimento. Para isso, clique com o botão direito no seu appxmanifest no Solution Explorer e escolha a opção “Open with“:
Na caixa de opções, escolha “XML (Text) Editor“:
No arquivo XML que se abre, logo após o fechamento da tag “Capabilities“, adicione o seguinte código:
<Extensions> <Extension Category="windows.activatableClass.inProcessServer"> <InProcessServer> <Path>Microsoft.Speech.VoiceService.MSSRAudio.dll</Path> <ActivatableClass ActivatableClassId="Microsoft.Speech.VoiceService.MSSRAudio.Encoder" ThreadingModel="both" /> </InProcessServer> </Extension> <Extension Category="windows.activatableClass.proxyStub"> <ProxyStub ClassId="5807FC3A-A0AB-48B4-BBA1-BA00BE56C3BD"> <Path>Microsoft.Speech.VoiceService.MSSRAudio.dll</Path> <Interface Name="IEncodingSettings" InterfaceId="C97C75EE-A76A-480E-9817-D57D3655231E" /> </ProxyStub> </Extension> <Extension Category="windows.activatableClass.proxyStub"> <ProxyStub ClassId="F1D258E4-9D97-4BA4-AEEA-50A8B74049DF"> <Path>Microsoft.Speech.VoiceService.Audio.dll</Path> <Interface Name="ISpeechVolumeEvent" InterfaceId="946379E8-A397-46B6-B9C4-FBB253EFF6AE" /> <Interface Name="ISpeechStatusEvent" InterfaceId="FB0767C6-7FAA-4E5E-AC95-A3C0C4D72720" /> </ProxyStub> </Extension> </Extensions>
Espero que a Microsoft melhore esse processo no futuro, porque, do jeito que está agora não tem condições, não é mesmo?
Mas, enfim, agora sim o exemplo vai funcionar. Execute a aplicação e faça um teste você mesmo!
Infelizmente, o controle ainda não suporta o idioma português. Somente os seguintes idiomas são atualmente suportados (lista obtida da documentação na data de escrita desse artigo):
de-DE – German (Germany)
en–US – English (Unites States)
en-GB – English (Great Britain)
es-ES – Spanish (Spain)
fr-FR – French (France)
it-IT – Italian (Italy)
zh-CN – Chinese (China)
E aí, o que você está esperando para adicionar reconhecimento de voz no seu aplicativo? Eu particularmente não gostei dessa sistemática atualmente disponibilizada pela Microsoft, mas, o que podemos fazer se esse é a única maneira? Deixe o seu comentário logo abaixo e compartilhe sua opinião com a gente!
E inscreva-se na minha newsletter para ficar por dentro das novidades do blog e também para ficar sabendo em primeira mão sobre um produto que estou desenvolvendo no momento.
Até a próxima!
André Lima
Image by SparkCBC used under Creative Commons
https://www.flickr.com/photos/25031050@N06/4443536762/
Síntese de voz em aplicativos para a Windows Store Quando 8 + 1 = 10: conheça o Windows 10, o próximo sistema operacional da Microsoft
Um absurdo o produto comercializado e comprado no brasil não ter o reconhecimento de fala do idioma do País!
Se os anteriores tinham !
Bom nem mudando de idioma este bendito reconhecimento de fala funciona. O que fazer?
cade o vido do site http://windows.microsoft.com/pt-BR/windows-8/using-speech-recognition!
Trocar de idioma é o fim do mundo! ou nosso país já adotou o Espanhol como lingua oficia?
Olá Valderez!
Muito obrigado pelo seu comentário!
O reconhecimento de voz em português está disponível no Windows 8.1 diretamente no sistema operacional.. O que nós, programadores, não conseguimos fazer é utilizá-lo ao desenvolvermos aplicativos para a Windows Store (que rodam nessa nova interface “moderna” do Windows).. Nesse cenário, a única opção até o momento é utilizar esse controle que mencionei no artigo, o qual não suporta o idioma português até agora.. Acredito que eles adicionarão suporte ao nosso idioma em breve, visto que o idioma português tem se mostrado bastante importante para a Microsoft.. Inclusive, o Technical Preview do Windows 10 foi lançado também em português do Brasil, o que é um ótimo sinal..
Enfim, assim que eu souber que o controle está suportanto o português, eu atualizo o post..
E, caso queira ficar por dentro das novidades do meu site, inscreva-se!
Abraço!
André Lima