Framboesa Pi – Reconocimiento de voz en español

Poço, Poço, tras un largo verano de disfrute y ocio volvemos a la carga!!! En este documento veremos cómo hacer que una Raspberry Pi nos esté escuchando, esperando a que le hablemos y ejecute los comandos que le indiquemos. Es algo realmente muy sencillo de hacer, he estado tiempo probando alternativas más complejas tanto de instalar como de configurar, y esta para mí es la mejor. Lo que vais a ver en este documento lo podréis implementar en menos de 30 ata! y decirle… “Antonia, ponme Telecinco”!

Raspberry_reconocimiento_voz_espanol_03-bujarra

Nos basaremos en una Raspberry Pi 2 ou 3 con Jessie instalado y actualizado, a esta Raspberry le instalaremos Apache y le pondremos una web que permitirá que el navegador que la visite, conecte su microfono y le hable. A web irá tratar o que ouvir executando qualquer comando que configurarmos previamente. A esta web podemos ligar-nos a partir de um PC/Portátil/móvel/tablet e com o Chrome, irá solicitar-nos acesso ao microfone e estará a ouvir-nos em todo momento. O ideal é fazer tudo na mesma Raspberry Pi, explico-me, ligar-lhe um microfone e fazer com que faça login automático ao reiniciar e execute o Chromium contra si própria. Portanto, a Pi estará a servir uma web que ouvirá quando te ligares a ela e com o seu próprio navegador e microfone fará de ‘cliente'’ e de ‘servidor'.

 

Raspberry_reconhecimento_voz_espanhol_02-bujarra

Nada mau, tudo isto é possível graças a uma biblioteca de Javascript que a web terá (HTML) chamada Annyang, añadiendo la posibilidad de usar reconocimiento de voz a los usuarios que se conecten. Reenviará lo que escuche a una pequeña web de php que executará los comandos. En mi caso tras pronunciar su nombre (Antonia), cogerá las siguientes palabras y buscará si há algum comando que executar. Tengo puesto también que si le llamo de otra forma (Manolo), me buscará en WolframAlpha a resposta à pergunta que le haga 🙂 pero eso no lo he puesto en este documento para no despistar; Vamos, el uso normal con Antonia es que me encienda/regule/apague la luz de la sala, suba/baje estores, cambie de canal de TV al que yo le diga ;), ponga la calefacción, la alarma, me diga temperaturas, previsiones del tiempo…

 

Raspberry_reconocimiento_voz_espanol_01-bujarra

Y además, esto se pode fazer com qualquer idioma! neste documento tratará de reconhecer o Español o Castellano, es gratuito, ocupa 1kb el script… qué más! A propósito, para el que pregunte, estoy usando un micrófono buenillo (en mi humilde opinión), omnidireccional, que ouve perfeitamente desde qualquer sitio (tenho uma sala de 30m2 y está escondido) es un CAD Audio U9 Condenser Microphone, Omni. Mas vamos que com qualquer micrófono funciona, sea USB o de una webcam. Ya os digo, lo podeis poner en la misma Pi, o usarlo desde outros equipos en la casa.

 

Instalación de Apache,

O primeiro de tudo será instalar apache con php y sus requisitos:

[sourcecode language=”plain”]sudo apt-get install apache2 php5 libapache2-mod-php5[/Código-fonte]

 

Cambiaremos el usuario que ejecutará apache2 (lo hago para que escuche el audio de mis comandos, por no meter al usuario de apache en el grupo de audio):

[sourcecode language=”plain”]sudo vim /etc/apache2/envvars[/Código-fonte]

Y modificamos:

[sourcecode language=”plain”]export APACHE_RUN_USER=pi
export APACHE_RUN_GROUP=pi[/Código-fonte]

 

Nada mau, para que la web no esté constantemente pidiendo acceso al micrófono, si hacemos que el sitio sea seguro (HTTPS) e instalamos un certificado autofirmado, el navegador confiará en el sitio y ya no pedirá acceso al micro más que la primera vez. Por lo que os pongo aquí los pasos necesarios para securizar la web, crearemos un directorio para guardar ahí los certificados, crearemos el certificado y la clave privada, habilitamos los modulos en apache, creamos enlace a la configuración de Apache y la editaremos para indicar las rutas correctas de los certificados:

[sourcecode language=”plain”]sudo mkdir /etc/apache2/ssl
sudo openssl req -x509 -nodes -days 1095 -newkey rsa:2048 -out /etc/apache2/ssl/server.crt -keyout /etc/apache2/ssl/server.key
sudo a2enmod ssl
sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/000-default-ssl.conf
sudo vim /etc/apache2/sites-enabled/000-default-ssl.conf[/Código-fonte]

 

Y modificamos:

[sourcecode language=”plain”]SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key[/Código-fonte]

 

Finalmente, reiniciamos Apache y listo!

[sourcecode language=”plain”]sudo /etc/init.d/apache2 restart[/Código-fonte]

 

Ficheros necesarios,

Os dejo aquí los dos únicos ficheros necesarios, los dejaremos en /var/www/html/:

 

index.html

[sourcecode language=”plain”]<HTML>
<HTML>
<head>
<meta charset="utf-8">
<script src="//cdnjs.cloudflare.com/ajax/libs/annyang/2.4.0/annyang.min.js"></roteiro>
</head>
<body>
<roteiro>
function openPage(voz){
window.open(‘hector.php?voz=’+voz);}

se (annyang) {
annyang.setLanguage(‘es-ES’);
var commands = {
‘Antonia *voz’ : openPage,
‘Manolo *voz’ : openPage
};
annyang.addCommands(commands);
annyang.start();
}
</roteiro>
</body>
</HTML>
[/Código-fonte]

Este fichero es la web inicial, la que carga el Javascript y permite grabar desde el audio de un navegador. Podremos mudar ahí o idioma de origem y poner qualquer outro, assim como la(s) palabra(s) que tem que ouvir e depois lançar uma função que abre la web hector.php com as palavras dichas como argumentos na URL. Ej, digo: 'Antonia, pon la uno'. Y abriría 'https://X.X.X.X/hector.php?voz=pon la 1’ en una pestaña y luego se cierra.

hector.php

[sourcecode language=”plain”]<HTML>
<body>
<?php
$valor = $_REQUEST['voz'];
se($valor=='apagar la música’ || $valor=='apagar la música’ || $valor=='para la música')
{
exec(‘/home/pi/textoAvoz.sh "Si mi amo"’);
exec('/home/pi/musica_apaga.sh');
}

se($valor=='sube electores’ || $valor=='sube el store')
{
exec(‘/home/pi/textoAvoz.sh "Si mi amo"’);
exec(‘/home/pi/estoresubeon.sh’);
}
se($valor=='põe a sexta'’ || $valor=='fonte a sexta'’ || $valor=='pela sexta')
{
exec(‘/home/pi/textoAvoz.sh "Si mi amo"’);
exec(‘/home/pi/la6_enciende.sh’);
}
echo "<roteiro>window.close();</roteiro>";
?>
</body>
</HTML>[/Código-fonte]

Dou-vos apenas um pequeno exemplo do ficheiro para dar uma ideia, como podem ver é muito simples, é apenas captar os áudios que nos escutem e executar um script. No meu caso, nem sempre me ouve as palavras corretas, portanto, com esse pequeno dicionário de possíveis erros, percebe as falhas possíveis. Por isso 'põe'’ às vezes entende-me 'fonte', 'pela'… 🙂 Se alguma vez dissermos um comando e ele não nos entender, basta ver o histórico do navegador e ver 'o que'’ ele nos entendeu e adicioná-lo às possibilidades. Com isso já ouve perfeitamente!

 

Instalar Chromium

Nada mau, isto é opcional. Se quisermos que a própria Raspberry tenha o microfone, seguiremos estes passos também, já que instalaríamos o Chrome e faríamos com que se abrisse automaticamente quando a sessão de ‘pi’ arrancasse para se conectar ao servidor web.

Estes passos são para instalar o Chromium numa Raspberry Pi 3:

[sourcecode language=”plain”]
wget https://launchpad.net/~canonical-chromium-builds/+archive/ubuntu/stage/+build/7916060/+files/chromium-browser_45.0.2454.85-0ubuntu0.15.04.1.1181_armhf.deb
wget https://launchpad.net/~canonical-chromium-builds/+archive/ubuntu/stage/+build/7916060/+files/chromium-codecs-ffmpeg-extra_45.0.2454.85-0ubuntu0.15.04.1.1181_armhf.deb
sudo dpkg -i chromium-codecs-ffmpeg-extra_45.0.2454.85-0ubuntu0.15.04.1.1181_armhf.deb chromium-browser_45.0.2454.85-0ubuntu0.15.04.1.1181_armhf.deb[/Código-fonte]

 

Ahora haremos que cuando autologuee la sesión de ‘pien las X, abra Chromium contra el servicio web:

[sourcecode language=”plain”]vim ~/.config/lxsession/LXDE-pi/autostart[/Código-fonte]

Y añadimos al final:

[sourcecode language=”plain”]@chromium-browser https://127.0.0.1[/Código-fonte]

 

Teste,

Raspberry_reconocimiento_voz_espanol_04-bujarra
Una vez abramos el navegador contra la dirección IP de la Raspberry Pi nos pedirá acceso al micrófono, al habernos conectado con https:// sólo nos lo pedirá esta vez y ya lo guardará en las preferencias. Por defecto si todo ha ido bien nos abrirá contra ‘index.html’.

 

Raspberry_reconocimiento_voz_espanol_05-bujarra

Yo la manera que lo he hecho (no la mejor, pero rápida y funcional) es que tras escucharnos, o navegador abrirá num separador a URL com as palavras que nos compreendeu atacando hector.php passando-as como variável. Depois, o separador será fechado!

 

Poço, pois é tudo, agradecer a Miguel Ignacio Guerra do blog Cucopc alguma ajudinha que me deu. Obrigado a todos e espero que desfrutem, combinando este tipo de documentos com outros que verão na secção de Framboesa Pi, podemos criar uma casa inteligente totalmente intuitiva e poderosa.

 

Postagens recomendadas

Autor

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, Não hesite em contactar-me, Vou tentar ajudá-lo sempre que puder, Compartilhar é viver ;) . Desfrute de documentos!!!