quarta-feira, 2 de setembro de 2015

Reconhecimento de Voz no Arduino

Pessoal,

Boa tarde! Vamos falar um pouco de audio/voz no Arduino? E também do reconhecimento de comandos vocais?

Quem estuda esse assunto sabe que a plataforma existente para fazer tal tarefa é o EasyVR Shield, conforme segue link:

http://www.veear.eu/products/

Parece que está na versão 3 e é largamente utilizado por quem quer implementar Reconhecimento de Voz no Arduino.

Eu mesmo quando decidi os tópicos do Curso Arduino Automation optei por essa plataforma para a aula 12, conforme segue a grade de aulas da época:

http://renatoaloi.blogspot.com.br/2013/02/grade-de-aulas-curso-arduino-automation_13.html

Repare que muita coisa ainda não foi resolvida até agora! A plataforma Wireless ainda estou fechando o projeto do Raduino e o EasyVR já está na sua segunda versão...

Muito bem, se eu tivesse produzido material logo na época, eu já teria que ter atualizado para a nova versão. Duas vezes, porque acabei de descobrir que está na versão 3!

Então o fato é que TODAS as plataformas estão amadurecendo. 

Eu estou terminando de resolver o Raduino e vou investir tempo de estudo no Reconhecimento de Voz, passando na frente dos outros assuntos.

O que é Reconhecimento de Voz (VR)?
VR é o acrônimo em inglês para Voice Recognition. Significa o computador capaz de receber comandos por voz humana.


No caso da Automação, VR serve para receber comandos de voz e ativar atuadores, acendendo luzes, abrindo portas, e qualquer outro aparelho compatível com a Internet das Coisas (IoT).

Existem outras tecnologias que podem ser anexadas ao Arduino para acrescentar a característica de VR:
  1. Usar um MACOSX para o VR e enviar comandos via serial para o Arduino.
  2. Usar o Siri do iPhone e conversar via bluetooth com o Arduino.

Mas porque não temos VR diretamente no Arduino?
Eu nunca vi pessoalmente um Shield EasyVR, mas percebi uma pasta cobrindo o chip... Que deve ser um FPGA ou ARM, para resolver a parte de Reconhecimento de Voz.

Eu precisaria estudar a fundo o funcionamento para determinar isso.

Mas o EasyVR NUNCA me interessou, sabe porque?

Desde quando eu publiquei a grade de aulas do Curso Arduino Automation, eu já desdenhava o EasyVR.

Vou explicar porque.

Eu tenho uma teoria maluca que é possível resolver isso apenas usando um Arduino UNO e um circuito simples com um microfone, desses de eletreto.

O ATMega328 possui um circuito interno de ADC de 10bits.

Tudo bem! Eu sei que os audiófilos vão reclamar: Só 10 bits!?

Ok, mas pense bem, só precisamos capturar a VOZ! É só voz humana! E 10 bits é mais que suficiente até para detectar a amplitude necessária para reconhecer alguns comandos de voz.

Existe outro problema que é reconhecer o dono da voz, mas isso não sei se o EasyVR faz...

Enfim, considerando que temos audio entrando em uma porta analógica do Arduino, exemplo A0, devidamente polarizado em 2,5V, oscilando para cima e para baixo conforme o som do microfone.

Exemplo de circuito:

Créditos do circuito:
http://electronics.stackexchange.com/questions/36795/using-a-microphone-with-an-arduino

Testando 1, 2, 3...

Bom, já temos audio no Arduino, então que tal usar algumas técnicas de "sampling" para formar pacotes de áudio.

Esses pacotes podem ser gravados na EEPROM ou em um SDCard. Não lembro do link agora, mas já vi uma longa discussão em um site gringo e é perfeitamente possível.

Agora Vem a Parte Legal, Quer Dizer, Neural!

Muito bem, essa parte é bacana! Se temos o audio já em pacotes na memória, podemos ler esses pacotes e utilizar uma Rede Neural Artificial (RNA) para "aprender" a "entender" os comandos de voz.

Como estamos falando de uma única dimensão, é bem mais fácil que implementar um LeCunn89! Basta um Perceptron simples, uma camada oculta e pronto! Temos nosso reconhecedor de voz!

Você ainda não acredita ser possível? Veja meu projeto de Rede Neural Perceptron para leitura de gabaritos:

http://seriallink.com.br/forum/viewtopic.php?f=68&t=3450&p=8847

Pronto! É só juntar todas as peças!

Divirtam-se!

Comentários?

Abraços,
Renato

Um comentário: