ラズベリーパイ – スペイン語の音声認識
まぁ, まぁ, 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”!
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 (アントニア), 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:
[ソースコード 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[/ソースコード]
そして次のように変更します:
[ソースコード language=”平地”]export APACHE_RUN_USER=pi
export APACHE_RUN_GROUP=pi[/ソースコード]
悪くありません, ウェブサイトが常にマイクへのアクセスを求めないようにするために, サイトを安全にすれば (HTTPS) 自己署名証明書をインストールすれば, ブラウザはサイトを信頼し、最初の一度だけマイクへのアクセスを求めるようになります. したがって、ウェブサイトをセキュアにするために必要なステップをここに示します, 証明書を保存するディレクトリを作成します, 証明書と秘密鍵を作成します, Apacheでモジュールを有効にします, Apacheの設定へのリンクを作成し、証明書の正しいパスを示すために編集します:
[ソースコード 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[/ソースコード]
そして次のように変更します:
[ソースコード 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) キーワード(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
[ソースコード 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 ‘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:
[ソースコード 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 ‘pi’ en las X, ウェブサービスに対してChromiumを開く:
[ソースコード language=”平地”]vim ~/.config/lxsession/LXDE-pi/autostart[/ソースコード]
そして最後に追加する:
[ソースコード language=”平地”]@chromium-browser https://127.0.0.1[/ソースコード]
テスティング,

Raspberry PiのIPアドレスに対してブラウザを開くとマイクのアクセスを求められる, httpsで接続したため:// 今回だけ求められ、それ以降は設定に保存される. デフォルトでは問題がなければ ‘index.html’ が開かれる.
私がやった方法は (最良ではないが, 速くて機能的) 聞いた後に, ブラウザが別タブで認識した単語をURLに付けて hector.php に渡す. その後、タブは閉じられる!
まぁ, 以上です, 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.












































