ラズベリーパイ – スペイン語の音声認識

まぁ, まぁ, 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… “アントニア, ponme Telecinco”!

Raspberry_reconocimiento_voz_espanol_03-bujarra

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 ‘clientey de ‘servidor’.

 

Raspberry_reconocimiento_voz_espanol_02-bujarra

悪くありません, 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 (アントニア), 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

 

Raspberry_reconocimiento_voz_espanol_01-bujarra

そしてまた, esto se puede hacer con cualquier idioma! en este documento se tratará de reconocer el Español o Castellano, es gratuito, ocupa 1kb el scriptqué 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:

[ソースコード language=”平地”]sudo apt-get 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):

[ソースコード language=”平地”]sudo vim /etc/apache2/envvars[/ソースコード]

Y modificamos:

[ソースコード language=”平地”]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:

[ソースコード language=”平地”]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:

[ソースコード language=”平地”]SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key[/ソースコード]

 

最後です, reiniciamos Apache y listo!

[ソースコード language=”平地”]sudo /etc/init.d/apache2 restart[/ソースコード]

 

Ficheros necesarios,

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

 

index.html

[ソースコード language=”平地”]<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(声){
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 1en una pestaña y luego se cierra.

hector.php

[ソースコード language=”平地”]<HTMLの>
<body>
<?PHPの
$valor = $_REQUEST[‘voz’];
もし($valor==’apaga la música’ || $valor==’apagar la música’ || $valor==’para la música’)
{
エグゼクティブ(‘/home/pi/textoAvoz.sh "Si mi amo"’);
エグゼクティブ(‘/home/pi/musica_apaga.sh’);
}

もし($valor==’sube electores’ || $valor==’sube el store’)
{
エグゼクティブ(‘/home/pi/textoAvoz.sh "Si mi amo"’);
エグゼクティブ(‘/home/pi/estoresubeon.sh’);
}
もし($valor==’pon la sexta’ || $valor==’font la sexta’ || $valor==’por la sexta’)
{
エグゼクティブ(‘/home/pi/textoAvoz.sh "Si mi amo"’);
エグゼクティブ(‘/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 ‘pona 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 ‘piarranque para que se conecte contra el servidor web.

Estos pasos son para instalar Chromium en una Raspberry Pi 3:

[ソースコード language=”平地”]
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 ‘pien las X, abra Chromium contra el servicio web:

[ソースコード language=”平地”]vim ~/.config/lxsession/LXDE-pi/autostart[/ソースコード]

Y añadimos al final:

[ソースコード language=”平地”]@chromium-browser https://127.0.0.1[/ソースコード]

 

テスティング,

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, 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.

 

おすすめの投稿

著者

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, 私に連絡することを躊躇しないでください, できる限りお手伝いします, シェアリングは生きていること ;) . ドキュメントを楽しむ!!!