
Lampone Pi – Riconoscimento vocale in spagnolo
Bene, Bene, Dopo una lunga estate di divertimento e svago siamo tornati alla mischia!!! In questo documento vedremo come farci ascoltare da un Raspberry Pi, aspettando che gli parliamo ed eseguiamo i comandi che istruiamo. È davvero semplice da fare, Sto testando da tempo alternative più complesse sia da installare che da configurare, E questo per me è il migliore. Quello che vedrai in questo documento potrai implementarlo in meno di 30 verbale! E dirgli… “Antonia, mettimi Telecinco”!
Nos basaremos en una Raspberry Pi 2 o 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. La web tratará lo que escuche ejecutando cualquier comando que configuremos previamente. A esta web nos podremos conectar desde un PC/Portatil/móvil/tableta y con el Chrome, nos solicitará acceso al microfono y nos estará escuchando en todo momento. Lo ideal es hacer todo en la misma Raspberry Pi, me explico, conectarla a ella un microfono y hacer que autologee al reiniciar y ejecute el Chromium contra sí mismo. Por lo que la Pi estará sirviendo una web que escuchará cuando te conectes a ella y con su propio navegador y su microfono hará de ‘cliente’ y de ‘servidor’.
Non male, todo esto es posible gracias a una librería de Javascript que tendrá la web (HTML) llamada 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 ejecutará los comandos. En mi caso tras pronunciar su nombre (Antonia), cogerá las siguientes palabras y buscará si hay algún comando que ejecutar. Tengo puesto también que si le llamo de otra forma (Manolo), me buscará en WolframAlpha la respuesta a la pregunta que le haga 🙂 pero eso no lo he puesto en este documento para no despistar; Andiamo, 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…
Y además, esto se puede hacer con cualquier idioma! en este documento se tratará de reconocer el Español o Castellano, es gratuito, ocupa 1kb el script… qué más! A proposito, para el que pregunte, estoy usando un micrófono buenillo (en mi humilde opinión), omnidireccional, que escucha perfectamente desde cualquier sitio (tengo una sala de 30m2 y está escondido) es un CAD Audio U9 Condenser Microphone, Omni. Pero vamos que con cualquier micrófono funciona, sea USB o de una webcam. Ya os digo, lo podeis poner en la misma Pi, o usarlo desde otros equipos en la casa.
Instalación de Apache,
Lo primero de todo será instalar apache con php y sus requisitos:
[linguaggio del codice sorgente=”Pianura”]sudo apt-get install apache2 php5 libapache2-mod-php5[/Codice sorgente]
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):
[linguaggio del codice sorgente=”Pianura”]sudo vim /etc/apache2/envvars[/Codice sorgente]
Y modificamos:
[linguaggio del codice sorgente=”Pianura”]export APACHE_RUN_USER=pi
export APACHE_RUN_GROUP=pi[/Codice sorgente]
Non male, 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:
[linguaggio del codice sorgente=”Pianura”]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[/Codice sorgente]
Y modificamos:
[linguaggio del codice sorgente=”Pianura”]SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key[/Codice sorgente]
Finalmente, reiniciamos Apache y listo!
[linguaggio del codice sorgente=”Pianura”]sudo /etc/init.d/apache2 restart[/Codice sorgente]
Ficheros necesarios,
Os dejo aquí los dos únicos ficheros necesarios, los dejaremos en /var/www/html/:
index.html
[linguaggio del codice sorgente=”Pianura”]<HTML>
<HTML>
<head>
<meta charset="utf-8">
<script src="//cdnjs.cloudflare.com/ajax/libs/annyang/2.4.0/annyang.min.js"></copione>
</head>
<body>
<copione>
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();
}
</copione>
</body>
</HTML>
[/Codice sorgente]
Este fichero es la web inicial, la que carga el Javascript y permite grabar desde el audio de un navegador. Podremos cambiar ahí el idioma de origen y poner cualquier otro, así como la(s) palabra(s) que tiene que escuchar y tras ello lanzar una función que abre la web hector.php con las palabras dichas como argumentos en la URL. Ej, Dire: ‘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
[linguaggio del codice sorgente=”Pianura”]<HTML>
<body>
<?php
$valor = $_REQUEST[‘voz’];
se($valor==’apaga 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==’pon la sexta’ || $valor==’font la sexta’ || $valor==’por la sexta’)
{
Exec(‘/home/pi/textoAvoz.sh "Si mi amo"’);
Exec(‘/home/pi/la6_enciende.sh’);
}
echo "<copione>window.close();</copione>";
?>
</body>
</HTML>[/Codice sorgente]
Os pongo sólo un pequeño ejemplo del fichero para dar alguna idea, como veis es muy sencillo, sólo es captar los audios que nos escuche y ejecutar un script. En mi caso no siempre me escucha las palabras correctas, por lo que con ese pequeñito diccionario de posibles errores entiende los posibles fallos. Por lo que ‘pon’ a veces me entiende ‘font’, ‘por’… 🙂 Si alguna vez decimos un comando y no nos entiende, con ver el historial del navegador y ver ‘qué’ nos ha entendido y añadirlo a las posibilidades. Con eso ya escucha perfecto!
Instalar Chromium
Non male, Questo è facoltativo. Si queremos que la propia Raspberry tenga el micrófono seguiremos estos pasos también, ya que le instalaremos Chrome y haremos que se abra automáticamente cuando la sesión de ‘pi’ arranque para que se conecte contra el servidor web.
Estos pasos son para instalar Chromium en una Raspberry Pi 3:
[linguaggio del codice sorgente=”Pianura”]
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[/Codice sorgente]
Ahora haremos que cuando autologuee la sesión de ‘pi’ en las X, abra Chromium contra el servicio web:
[linguaggio del codice sorgente=”Pianura”]vim ~/.config/lxsession/LXDE-pi/autostart[/Codice sorgente]
Y añadimos al final:
[linguaggio del codice sorgente=”Pianura”]@chromium-browser https://127.0.0.1[/Codice sorgente]
Collaudo,
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’.
Yo la manera que lo he hecho (no la mejor, pero rápida y funcional) es que tras escucharnos, el navegador abrirá en una pestaña la URL con las palabras que nos ha entendido atacando a hector.php pasandoselas como variable. Luego se cerrará la pestaña!
Bene, pues esto es todo, agradecer a Miguel Ignacio Guerra del blog Cucopc alguna ayudita que me ha echado. Gracias a todos y espero que lo disfrutéis, combinando este tipo de documentos con otros que veréis en la sección de Lampone Pi, podemos hacer un hogar inteligente totalmente intuitivo y poderoso.