O reconhecimento de voz com certeza é uma das coisas mais fascinantes quando se fala das tecnologias que estão se desenvolvendo atualmente (2019). Isso, porque ele nos permite controlar aparelhos e fazer certas tarefas sem tocar em nada. Basta falarmos alguma coisa para acender uma lâmpada, criar um lembrete, ligar pra alguém ou até, dependendo, fazer uma compra.

reconhecimento de voz ilustrativo

E é muito interessante pensar em implementar o controle de voz em nossas aplicações e projetos. Portanto, vou mostrar os melhores métodos que encontrei para fazer isso ao longo de uma pesquisa de meses (2018).


Aparelhos existentes

Existem alguns aparelhos que já podem ser comprados que permitem a interação com um sistema por meio da voz. Os mais conhecidos são o Google Home (imagem abaixo) e o Amazon Echo.

Fonte: Wikipedia

Esses dispositivos são bem interessantes e funcionam muito bem em relação à detecção. Porém, eles ainda não são uma realidade no Brasil, já que ou não estão a venda no mercado interno ou ainda não suportam o português brasileiro. O fato dele não ser vendido aqui, implica que para comprá-lo ele tem que ser importado e isso significa um custo ainda mais alto.

E sem falar que eles não possuem uma dinâmica muito boa de comandos, isto é, a forma como os comandos são falados, geralmente, são específicas e limitadas. Por exemplo, se você tentar falar um comando de uma forma mais natural, como se faz em uma conversa talvez não seja possível.

Levando em conta esses fatos, surge a necessidade de fazer um sistema próprio que seja: mais barato, tenha suporte para português brasileiro, possua comandos dinâmicos (pode criar seus próprios comandos e a fala fica natural) e automatizado em relação ao controle dos eletrodomésticos.


Divisão das Soluções

Vou fazer uma série de posts mostrando como usar as soluções válidas e os pontos a favor e contra de cada uma. Para facilitar o entendimento, eu dividi as soluções em três categorias:

Computadorizada

O reconhecimento de voz é feito pelo computador ou celular e o processamento do sistema também ocorre nele. O sistema externo (circuitos/microcontrolador) serve apenas para receber diretamente comandos do celular/computador e acionar alguma coisa.

A desvantagem desse tipo de solução é o fato de ser necessário um computador para rodar e usar o sistema. Isso é ruim porque o computador representa um gasto maior de energia, comparado a um simples microcontrolador. Já que, um bom sistema ficaria praticamente o dia todo ligado. Além do gasto de se obter um computador, para aqueles que não possuem.

A vantagem é que as soluções para essa categoria são as mais fáceis de serem alcançadas para o caso das pessoas que já possuem um computador.

Mesclada

Essa é a solução que o processamento do sistema é feito no microcontrolador (ou microprocessador). Mas a interface do sistema é acessada pelo computador/celular e é nela que o reconhecimento de voz é feito.

A desvantagem é que o processo de usar o sistema é lento, já que é necessário fazer alguns procedimentos para acessar a interface do sistema. Por exemplo, desbloquear o celular, abrir um aplicativo, apertar um botão e só assim dar um comando.

A vantagem é que o gasto energético é reduzido, já que o sistema está na placa (microcontrolador ou microprocessador) e não no computador. O computador ou celular só são usados na hora de acessar o sistema.

Isolada

Seria a solução que usa apenas um microcontrolador (ou microprocessador) para fazer o processamento do sistema. E, também, não precisa necessáriamente de nenhum computador/celular para funcionar ou usar.

De acordo com as soluções que eu encontrei, a principal desvantagem é o investimento inicial, já que as plaquinhas ou módulos necessários, representam um custo considerável. E esse gasto é bem maior do que nas outras categorias.

As vantagens são as melhores: o gasto energético é bem próximo do que na solução mesclada e o sistema é instantâneo, não precisa de nenhuma etapa ou procedimento para usá-lo. Além disso, seu sistema é mais livre, pois pode não existir nenhuma necessidade do usuário de acessá-lo por meio de algum aplicativo ou programa.


Soluções

Computadorizadas

Microsoft Speech API

Essa com certeza é uma das piores soluções para usar com o idioma português brasileiro. Pois foi necessário baixar o Visual Studio que é um programa relativamente pesado. Além disso, pra usar a API, é necessário baixar uma série de pacotes, sendo que você ainda precisa alterar os dados base do instalador de um deles para fazer a API funcionar.

Independente de todo esse trabalho, essa API é bem imprecisa e o reconhecimento de voz está limitado a palavras que devem ser previamente registradas. Portanto, não vale a pena usar essa solução. Eu registrei ela aqui apenas para informar e adiantar a vida de quem estiver pesquisando sobre o assunto.

Processing

Acesse o post que ensina a implementar essa solução:

Reconhecimento de voz – Processing

Google Speech API

Com toda certeza, uma das coisas que se tem de mais avançado em relação a reconhecimento de voz é a plataforma da Google. Isso principalmente para o nosso idioma e muitos outros. Ela é bastante precisa, dinâmica e melhora todo dia. E é possível utilizá-la em diversas plataformas, porém na categoria computadorizada, eu cheguei a duas soluções:

Software

Um programa ou software é ideal, pois é possível desenvolver uma boa interface para o sistema. E usando o Visual Studio, é possível acessar a Google Speech API. O problema é que a plataforma da Google cobra pelo áudio enviado.

O serviço é gratuito até 60min de áudio enviado, porém para aplicações de uso constante isso vira um problema. Um ponto bom desse tipo de solução é que dá para acessar a porta paralela do computador facilmente (para os que ainda possuem) e assim o circuito externo se torna bem simples.

Não vou fazer um post sobre como fazer, porque acredito que a solução do “Processing” seja melhor. Mas, se você tiver interesse, este vídeo é um bom direcionamento.

Extensão de Navegador

Acesse o post que ensina a implementar essa solução:

Reconhecimento de voz – Extensão Google Chrome

Mesclada

NodeMCU e Google Speech API (acesso por página na internet)

Acesse o post que ensina como funciona aqui.

NodeMCU e Google Speech API (aplicativo)

Usar a placa NodeMCU com a interface em um aplicativo de celular é uma das melhores soluções. Mas ainda assim existem alguns problemas como, pode ser trabalhoso criar um aplicativo e o processo de acessar o sistema é “lento”.

E, se você tem interesse, existem alguns tutoriais na internet que, para a criação do aplicativo, utilizam o Appinvetor. Aqui no site existe um tutorial ensinando a criar um aplicativo com o Appinvetor e comunicar com o Arduino via Bluetooth.

BITVOICER

Não cheguei a testar esta solução. Isso, porque é necessário comprar o programa. Porém, vou falar pelas minhas pesquisas a respeito.

Essa não parece ser uma solução difícil ou complicada de se usar. Além disso, ela pode ser implementada em um Arduino micro, não necessitando de nenhum microcontrolador com acesso à internet. E a aquisição da fala pode ser feita por um microfone ligado ao microcontrolador (bem como pelo computador). É necessário apenas o computador ligado recebendo os dados do microcontrolador pelo USB para que o programa do Bitvoicer processe o áudio. E, assim, envie de volta o texto reconhecido para o microcontrolador.

Mas é possível fazer a comunicação com o computador pela rede, sendo necessário alguma forma do microcontrolador ter acesso à rede. Enfim, é uma solução que vale a pena dar uma olhada e até usar, caso esteja disposto a pagar (não é um preço absurdo). Você pode ver todas as informações na página oficial.

Antes de mais nada, não posso deixar de falar das desvantagem singular dessa solução que é o custo. Já que na solução usando o NodeMcu, você tem apenas o custo do NodeMcu e mais nada. Neste caso você tem o Bitvoicer, o microcontrolador e, dependendo, o circuito para comunicar com o computador. Se for usar o Arduino, seria o custo da plaquinha e do Bitvoicer.

Isolada

NodeMCU e Google Speech API c/ microfone na placa

Essa é uma solução que se aplica a praticamente qualquer outro microcontrolador que possua acesso a internet. Essa seria uma ótima solução, pois a placa NodeMCU é barata (para uma placa com todas as funcionalidades que ela tem). Só não é, porque a memória dela se torna um problema, acompanhe para entender.

Para fazer o projeto funcionar dessa forma, seria preciso gravar o áudio por um microfone, codificar esse áudio e mandá-lo para o servidor da Google, e assim, receber uma resposta. A própria tarefa de gravar o áudio e codificá-lo se torna um problema para quem não tem muito conhecimento sobre. Porém, o áudio, por menor que seja, ocupa um espaço considerável na memória para ser processado. E, nesse caso, nós precisaríamos mantê-lo na memoria RAM, e ainda ir codificando o áudio, o que ocupa mais memória.

Até da pra fazer, porque o NodeMCU possui uma memória RAM considerável para um microcontrolador, que é de 128kB. Mas ainda assim é necessário fazer alguns truques para conseguir fazer o programa caber nessa memória (tempo máximo de áudio extremamente pequeno). E, particularmente, eu não tenho muita experiência com essa parte de gravação e manipulação de áudio, então eu não saberia nem por onde começar direito.

Exite um curso do MIT que ensina a fazer isso (6.08), mas em outra placa. O link do curso vive mudando, mas aqui você pode encontrar as experiências de uma aluna do curso.

Modulo de reconhecimento de voz

Acesse o post que ensina a implementar essa solução:

Módulo de reconhecimento de voz V2

Google Speech API e Raspberry PI

De acordo com as pesquisas e testes que fiz, essa é a melhor solução de todas quando você desconsidera a questão praticidade.

O Raspberry PI pode ser definido como computador, mas não entra na categoria de solução computadorizada, porque ele pode controlar facilmente elementos externos, se assemelhando a um microcontrolador. Nessa solução, você não precisa gastar com cada áudio enviado e não precisa acessar nenhum site ou aplicativo para fazer o reconhecimento. Basta um simples microfone na placa.

Para descobrir como fazer é um tanto complicado, mas, depois de saber as bibliotecas certas, fica bem tranquilo. O resultado é bem satisfatório, considerando as limitações do microfone e dos sistemas atuais de reconhecimento de voz. E a comunicação com circuitos externos é bem fácil de ser feita, pois o Raspberry possui portas de saída e entrada para fazer este controle.

Se você tem interesse em implementá-la, deixo aqui o link da biblioteca do Python que utilizei. A maior dificuldade é conseguir configurar o microfone no Raspberry.