O reconhecimento de voz com certeza é uma das coisas mais fascinantes quando se fala das tecnologias que estão se desenvolvendo atualmente. Isso porque, ele nos permite controlar aparelhos e fazer várias coisas sem usar o corpo. 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.


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. Além disso, os gastos aqui são minimamente maiores que a solução computadorizada.

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 como funciona aqui.

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 é extremamente 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 outro ponto bom desse tipo de solução é que da 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 quem tiver interesse, esse vídeo ensina mais ou menos como faz.

Extensão de Navegador

Acesse o post que ensina como funciona aqui.

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 comunicar com o sistema é lento.

E quem tiver interesse, existem alguns tutoriais na internet que, pra criação do aplicativo, utilizam o appinvetor.

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 audio. E, assim, enviar de volta para o microcontrolador.

Mas é possível fazer a comunicação com o computador pela rede, e ai seria 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 de 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.

Existe um “tutorial” que explica muito bem como você faz isso passo a passo, mas ele usa outra placa. Eu tentei passar a lógica do programa para o NodeMCU, mas ele usa uma biblioteca para decodificação que não funciona (incompatível com a arquitetura da placa) no NodeMCU e eu não faço a menor ideia de como reproduzir essa biblioteca.

Modulo de reconhecimento de voz

Acesse o post que ensina como funciona aqui.

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 e acabou.

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.

Futuramente, farei um post mostrando como fazer passo a passo, depois de fazer as primeiras aulas de um curso sobre como usar o Raspberry. Até lá, deixo aqui o link da biblioteca de python que utilizei para isso.