
树莓派 – 西班牙语语音识别
井, 井, 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 纪要! y decirle… “Antonia, ponme Telecinco”!
Nos basaremos en una Raspberry Pi 2 或 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’.
不错, 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; 我们走吧, 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…
而且, 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! 顺便一提, 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:
[源码语言=”平原”]sudo apt-get install apache2 php5 libapache2-mod-php5[/源代码]
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):
[源码语言=”平原”]sudo vim /etc/apache2/envvars[/源代码]
Y modificamos:
[源码语言=”平原”]export APACHE_RUN_USER=pi
export APACHE_RUN_GROUP=pi[/源代码]
不错, 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:
[源码语言=”平原”]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[/源代码]
Y modificamos:
[源码语言=”平原”]SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key[/源代码]
最后, reiniciamos Apache y listo!
[源码语言=”平原”]sudo /etc/init.d/apache2 restart[/源代码]
Ficheros necesarios,
Os dejo aquí los dos únicos ficheros necesarios, los dejaremos en /var/www/html/:
index.html
[源码语言=”平原”]<HTML格式>
<HTML格式>
<head>
<meta charset="utf-8">
<script src="//cdnjs.cloudflare.com/ajax/libs/annyang/2.4.0/annyang.min.js"></脚本>
</head>
<body>
<脚本>
function openPage(voz){
window.open(‘hector.php?voz=’+voz);}
如果 (annyang) {
annyang.setLanguage(‘es-ES’);
var commands = {
‘Antonia *voz’ : openPage,
‘Manolo *voz’ : openPage
};
annyang.addCommands(commands);
annyang.start();
}
</脚本>
</body>
</HTML格式>
[/源代码]
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, 说: ‘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
[源码语言=”平原”]<HTML格式>
<body>
<?菲律宾语
$valor = $_REQUEST[‘voz’];
如果($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’);
}
如果($valor==’sube electores’ || $valor==’sube el store’)
{
exec(‘/home/pi/textoAvoz.sh "Si mi amo"’);
exec(‘/home/pi/estoresubeon.sh’);
}
如果($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 "<脚本>window.close();</脚本>";
?>
</body>
</HTML格式>[/源代码]
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
不错, 这是可选的. 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:
[源码语言=”平原”]
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[/源代码]
Ahora haremos que cuando autologuee la sesión de ‘pi’ en las X, abra Chromium contra el servicio web:
[源码语言=”平原”]vim ~/.config/lxsession/LXDE-pi/autostart[/源代码]
Y añadimos al final:
[源码语言=”平原”]@chromium-browser https://127.0.0.1[/源代码]
测试,
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!
井, 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 树莓派, podemos hacer un hogar inteligente totalmente intuitivo y poderoso.