
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”!
Ci baseremo su una Raspberry Pi 2 o 3 con Jessie installato e aggiornato, a questa Raspberry installeremo Apache e metteremo un sito web che permetterà al browser che lo visita, di connettere il suo microfono e di parlargli. Il sito web tratterà ciò che ascolta eseguendo qualsiasi comando che configureremo in precedenza. A questo sito ci potremo connettere da un PC/Portatile/mobile/tablet e con Chrome, ci chiederà accesso al microfono e ci ascolterà in ogni momento. L'ideale è fare tutto sulla stessa Raspberry Pi, mi spiego, collegarle un microfono e farla accedere automaticamente al riavvio ed eseguire Chromium contro se stessa. 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), la risposta alla domanda che gli farò sarà cercata su WolframAlpha 🙂 ma non l'ho messo in questo documento per non distrarre; Andiamo, l'uso normale con Antonia è che mi accendi/regoli/spenga la luce della sala, alzi/abbassi le tende, cambi canale TV a quello che le dico ;), accendi il riscaldamento, l'allarme, mi dica le temperature, previsioni del tempo…
E inoltre, questo si può fare con qualsiasi lingua! in questo documento si tratterà di riconoscere lo Spagnolo o Castellano, è gratuito, il script occupa 1kb… che altro! A proposito, per chi domanda, sto usando un buon microfono (a mio modesto parere), omnidirezionale, che ascolta perfettamente da qualsiasi luogo (ho una sala di 30m2 ed è nascosto) è un CAD Audio U9 Microfono a Condensatore, Omni. Ma va bene, con qualsiasi microfono funziona, sia USB o di una webcam. Ve lo dico già, potete metterlo nello stesso Pi, o usarlo da altri dispositivi in casa.
Installazione di Apache,
La prima cosa da fare sarà installare apache con php e i suoi requisiti:
[linguaggio del codice sorgente=”Pianura”]sudo apt-get install apache2 php5 libapache2-mod-php5[/Codice sorgente]
Cambiaremo l'utente che eseguirà apache2 (lo faccio per far sentire l'audio dei miei comandi, per non inserire l'utente di apache nel gruppo audio):
[linguaggio del codice sorgente=”Pianura”]sudo vim /etc/apache2/envvars[/Codice sorgente]
E modifichiamo:
[linguaggio del codice sorgente=”Pianura”]export APACHE_RUN_USER=pi
export APACHE_RUN_GROUP=pi[/Codice sorgente]
Non male, affinché il sito non chieda continuamente accesso al microfono, se facciamo in modo che il sito sia sicuro (HTTPS) e installiamo un certificato autofirmato, il browser si fiderà del sito e non chiederà accesso al microfono più della prima volta. Quindi vi elenco qui i passi necessari per mettere in sicurezza il sito web, creeremo una directory per conservare lì i certificati, creeremo il certificato e la chiave privata, abilitiamo i moduli in apache, creeremo un collegamento alla configurazione di Apache e la modificheremo per indicare i percorsi corretti dei certificati:
[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]
E modifichiamo:
[linguaggio del codice sorgente=”Pianura”]SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key[/Codice sorgente]
Finalmente, riavviamo Apache e il gioco è fatto!
[linguaggio del codice sorgente=”Pianura”]sudo /etc/init.d/apache2 restart[/Codice sorgente]
File necessari,
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]
Ora faremo in modo che quando accediamo automaticamente alla sessione di 'pi’ nelle X, apra Chromium contro il servizio web:
[linguaggio del codice sorgente=”Pianura”]vim ~/.config/lxsession/LXDE-pi/autostart[/Codice sorgente]
E aggiungiamo in fondo:
[linguaggio del codice sorgente=”Pianura”]@chromium-browser https://127.0.0.1[/Codice sorgente]
Collaudo,
Una volta che apriamo il browser all'indirizzo IP della Raspberry Pi ci chiederà accesso al microfono, avendo effettuato il collegamento tramite 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.