Reconhecimento de Voz com Xamarin Forms no Android

Reconhecimento de voz com Xamarin Forms no Android

Fala pessoal!

Conforme prometido, venho falar sobre a criação de um App com interação mobile, que neste post será a busca por voz.

Ultimamente a demanda por Apps mobiles vem em crescente, mas você realmente já se perguntou quantos destes Apps inserem em suas funções recursos de interatividade mobile?

Pessoalmente, tenho visto poucos Apps que integram funções de comunicação com o sistema operacional, no geral quem tem por objetivo ter presença no cenário mobile, leva uma versão ‘menor’ do seu sistema já existente.

Desta forma, criei um protótipo para a minha empresa, afim de demonstrar dentro de um cenário mobile, como poderíamos caracterizar um recurso básico de sistemas de informação, uma busca por clientes, com um ‘toque’ de mobilidade nesta função.

Com isso decidi trazer um pouco dessa experiência com vocês. Vamos lá…

Primeiramente preciso dizer que esta versão destinasse inteiramente ao Android, ainda que estejamos em ‘terras do Xamarin Forms’, mas isto não quer dizer que não podemos ter o mesmo recurso para nossos iOS e Windows Phone (inclusive vamos fazer o mesmo para eles em breve).

Bom como pode parecer fácil descobrir, mas os recursos de sintetização de voz, Speech-to-Text e o Text-to-Speech, devem ser apropriados para o Xamarin Forms através de Renderes.  Hoje o recurso de Text-to-Speech já é comumente conhecido e já com excelentes interfaces disponíveis para o Forms através de componentes ou bibliotecas de terceiros.

Porém o recurso de captura de voz e sintetização disto em texto nos Apps, este ainda não vi nenhum componente que fizesse uso dos sintetizadores default das plataformas. Existe recursos que capturam o áudio, gravam este e enviam para um servidor na nuvem afim de que seja feito o processamento da informação para que um retorno em texto (JSON) seja dado.

Novamente não há nada de errado e isto na prática é o default para a maioria dos casos, nos bastidores da função, mas por que não fazer diferente? Então vamos começar!

Criando o projeto e as telas no Xamarin Forms

Como de costume inicie uma solução Xamarin Forms utilizando Portable Class Library

Criando Busca por Vor

Após isto vamos precisar de alguma interface para interação do nosso App. Neste exemplo eu criei uma lista com algumas pessoas da minha equipe e também uma tela de detalhe para cada pessoa, como podemos ver abaixo:


Lista PessoasDetalhePessoa
 

O layout criado foi seguindo alguns ensinamentos do mestre Adam Wolf, Xamarin MVP e escritor do blog Syntax is my UI. Meu código está um pouco diferente, mas alcancei o mesmo resultado.

Mas onde está o reconhecimento de voz?

Então onde está a tal ‘Busca por Voz’? Perceba que na primeira tela temos um botão buscar, este botão chamará um PageRender que irá redirecionar para o Android uma chamada para uma Activity que está será responsável pela chamada do sintetizador de voz via INTENT, a seguir o código do ICommand “BtnBuscarPessoaPorVoz_Click” da ViewModel a seguir:

Após o comando ser ativado é chamada a página customizada para ativar a busca por voz no android:

BuscarPessoa

O código da View no Forms, repare que utilizamos o MessageCenter, assunto que será tratado em um outro post.

Aqui nesta parte o método GetPessoaPorNome_Voz faz uma busca na minha base interna em SQLite para tentar encontrar um registro baseado no nome que fora capturado pelo que o usuário falou.

E nosso Renderer para comunicar com o Dispositivo:

O resultado no Android

Essencialmente, estes códigos acima são os que executam a “mágica”. Uma vez que o usuário pressionou o nosso botão Buscar, na interface do Xamarin Forms, é repassada a chamada para criar o objeto SpeechPage que por sua vez irá renderizar no Android o PageRender específico. Iremos então validar se o usuário está com o Microfone ativo, estando iremos criar uma “sessão” para armazenar o conteúdo falado e fazemos isto com a chamada do INTENT. Uma vez que o INTENT é chamado, passamos de vez a responsabilidade ao Android que se encarrega de “escutar” o usuário e de acordo com o que for capturado irá repassar a plataformar Xamarin Forms através do MessageCenter na MainActivity fazendo um override do método OnActivityResult, veja:

E aqui de acordo com o que acontecer, em caso de captura de algum som, este tentará ser sintetizado e se for será “escrito” em memória e enviado, como dito anteriormente, para a nossa página no Forms (SpeechPage) através do MessageCenter e com isto poderemos, como no caso, buscar em uma base interna ou chamar uma API para trabalharmos com o que fora dito pelo nosso usuário. Veja o resultado final:

Bom pessoal, é desta forma que podemos trabalhar com um dos vários recursos mobile em nossos Apps, em especial um recurso muito comum para nós (pessoas), a voz. Espero que vocês tenham gostado e que se interessem cada vez mais em adaptar de verdade conceitos mobile em nossos sistemas de informação.

 

Dúvidas? Deixe um comentário 😉 Não esqueça de avaliar esse post nas estrelinhas aqui abaixo, curtir nossa Fanpage e assinar nossa newsletter.

Reconhecimento de voz com Xamarin Forms no Android
5 (100%) 3 votos

Rodrigo Amaro

Desenvolvedor, apaixonado por tecnologia. Gosta de fazer um pouco de tudo, acredita que pode fazer a diferença no mundo através da tecnologia.

5 comentários em “Reconhecimento de voz com Xamarin Forms no Android

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

%d blogueiros gostam disto: