Raspberry Pi – Reconeixement de veu en espanyol

Bo, bo, després d'un llarg estiu de gaudi i oci tornem a la càrrega!!! En aquest document veurem com fer que una Raspberry Pi ens estigui escoltant, esperant que li parlem i executi els comandaments que li indiquem. És una cosa realment molt senzilla de fer, he estat temps provant alternatives més complexes tant d'instal·lar com de configurar, i aquesta per a mi és la millor. El que vau veure en aquest document el podreu implementar en menys de 30 minuts! i dir-li… “Antonia, ponme Telecinco”!

Raspberry_reconocimiento_voz_espanol_03-bujarra

Ens basarem en una Raspberry Pi 2 o 3 amb Jessie instal·lat i actualitzat, a aquesta Raspberry li instal·larem Apache i li posarem una web que permetrà que el navegador que la visiti, connecti el seu microfon i li parli. La web tractarà el que escolti executant qualsevol comandament que configurem prèviament. A aquesta web ens podrem connectar des d'un PC/Portatil/mòbil/tauleta i amb el Chrome, ens demanarà accés al microfon i ens estarà escoltant en tot moment. L'ideal és fer tot a la mateixa Raspberry Pi, m'explico, connectar-la a ella un microfon i fer que autologeixi en reiniciar i executi el Chromium contra si mateix. Per la qual cosa la Pi estarà servint una web que escoltarà quan et connectis a ella i amb el seu propi navegador i el seu microfon farà de 'client’ i de 'servidor'.

 

Raspberry_reconocimiento_voz_espanol_02-bujarra

Bé, tot això és possible gràcies a una llibreria de Javascript que tindrà la web (html) anomenada Annyang, afegint la possibilitat d' usar reconeixement de veu als usuaris que es connectin. Reenviarà el que escolti una petita web de php que executarà els comandaments. En el meu cas després de pronunciar el seu nom (Antonia), agafarà les següents paraules i buscarà si hi ha algun comandament que executar. Tinc posat també que si l'anomeno d'una altra forma (Manolo), em buscarà a WolframAlpha la resposta a la pregunta que li faci 🙂 però això no ho he posat en aquest document per no despistar; anem, l'ús normal amb Antonia és que m'encengui/regule/apague la llum de la sala, puja/baje estores, canviï de canal de TV al qual jo li digui ;), posi la calefacció, l'alarma, em digui temperatures, previsions del temps…

 

Raspberry_reconocimiento_voz_espanol_01-bujarra

I a més, això es pot fer amb qualsevol idioma! en aquest document es tractarà de reconèixer l' Espanyol o Castellà, és gratuït, ocupa 1kb el script… què més! Per cert, per al que pregunti, estic fent servir un micròfon bonillo (en la meva humil opinió), omnidireccional, que escolta perfectament des de qualsevol lloc (tinc una sala de 30m2 i està amagat) és un CAD Audio U9 Condenser Microphone, Omni. Però anem que amb qualsevol micròfon funciona, sigui USB o d'una webcam. Ja us dic, ho podeu posar a la mateixa Pi, o usar-lo des d'altres equips a la casa.

 

Instal·lació d'Apache,

El primer de tot serà instal·lar apatxe amb php i els seus requisits:

[sourcecode language =”plain”]sudo apt-get install apache2 php5 libapache2-mod-php5[/sourcecode]

 

Canviarem l'usuari que executarà apatxe2 (ho faig perquè escolti l'àudio dels meus comandaments, per no posar l' usuari d' apatxe en el grup d' àudio):

[sourcecode language =”plain”]sudo vim /etc/apache2/envvars[/sourcecode]

I modifiquem:

[sourcecode language =”plain”]export APACHE_RUN_USER = pi
export APACHE_RUN_GROUP = pi[/sourcecode]

 

Bé, perquè la web no estigui constantment demanant accés al micròfon, si fem que el lloc sigui segur (HTTPS) i instal·lem un certificat autofirmat, el navegador confiarà en el lloc i ja no demanarà accés al micro més que la primera vegada. Pel que us poseu aquí els passos necessaris per securitzar la web, crearem un directori per guardar aquí els certificats, crearem el certificat i la clau privada, habiliten els moduls en apatxe, creem enllaç a la configuració d'Apache i l'editarem per indicar les rutes correctes dels certificats:

[sourcecode language =”plain”]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[/sourcecode]

 

I modifiquem:

[sourcecode language =”plain”]SSLCertificateFile /etc/apache2/ssl/server.crt
SSLCertificateKeyFile /etc/apache2/ssl/server.key[/sourcecode]

 

Finalment, reiniciem Apache i llest!

[sourcecode language =”plain”]sudo /etc/init.d/apache2 restart[/sourcecode]

 

Fitxers necessaris,

Us deixo aquí els dos únics fitxers necessaris, els deixarem a /var/www/html/:

 

index.html

[sourcecode language =”plain”]<html>
<html>
<head>
<meta charset =" utf-8">
<script src="//cdnjs.cloudflare.com/ajax/libs/annyang/2.4.0/annyang.min.js"></script>
</head>
<body>
<script>
function openPage(veu){
window.open('hector.php?veu =' + veu);}

if (annyang) {
annyang.setLanguage('es-ES');
var commands = {
'Antonia *veu’ : openPage,
'Manolo *veu’ : openPage
};
annyang.addCommands(commands);
annyang.start();
}
</script>
</body>
</html>
[/sourcecode]

Aquest fitxer és el web inicial, la que carrega el Javascript i permet gravar des de l'àudio d'un navegador. Podrem canviar ací l'idioma d'origen i posar qualsevol altre, així com la(s) paraula(s) que ha d'escoltar i després d'això llançar una funció que obre la web hector.php amb les paraules dites com a arguments a la URL. Ex, dic: 'Antonia, pon la uno'. I obriria 'https://X.X.X.X/hector.php?veu = pon la 1’ en una pestanya i després es tanca.

hector.php

[sourcecode language =”plain”]<html>
<body>
<?php
$valor = $_REQUEST['veu'];
if($valor==' apaga la música’ || $valor ='apagar la música’ || $valor = =' per a la música')
{
Exec('/home/pi/textoAvoz.sh "Si el meu amo"');
Exec('/home/pi/musica_apaga.sh');
}

if($valor =' puja electors’ || $valor ='puja l'store')
{
Exec('/home/pi/textoAvoz.sh "Si el meu amo"');
Exec('/home/pi/estoresubeon.sh');
}
if($valor = =' pon la sisena’ || $valor =' font la sisena’ || $valor = =' per la sisena')
{
Exec('/home/pi/textoAvoz.sh "Si el meu amo"');
Exec('/home/pi/la6_enciende.sh');
}
echo "<script>window.close();</script>";
?>
</body>
</html>[/sourcecode]

Us poso només un petit exemple del fitxer per donar alguna idea, com veieu és molt senzill, només és captar els àudios que ens escolti i executar un script. En el meu cas no sempre m'escolta les paraules correctes, per la qual cosa amb aquest pitjor diccionari de possibles errors entén les possibles fallades. Per la qual cosa 'pon’ de vegades m'entén 'font', 'per'… 🙂 Si alguna vegada diem un comandament i no ens entén, amb veure l'historial del navegador i veure 'què’ ens ha entès i afegir-ho a les possibilitats. Amb això ja escolta perfecte!

 

Instalar Chromium

Bé, això és opcional. Si volem que la mateixa Raspberry tingui el micròfon seguirem aquests passos també, ja que li instal·larem Chrome i farem que s'obri automàticament quan la sessió de 'pi’ perquè es connecti contra el servidor web.

Aquests passos són per instal·lar Chromium en una Raspberry Pi 3:

[sourcecode language =”plain”]
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[/sourcecode]

 

Ara farem que quan autologui la sessió de 'pi’ a les X, obri Chromium contra el servei web:

[sourcecode language =”plain”]vim ~/.config/lxsession/LXDE-pi/autostart[/sourcecode]

I afegim al final:

[sourcecode language =”plain”]@chromium-browser https://127.0.0.1[/sourcecode]

 

Provant,

Raspberry_reconocimiento_voz_espanol_04-bujarra
Un cop obrim el navegador contra l'adreça IP de la Raspberry Pi ens demanarà accés al micròfon, en haver-nos connectat amb https:// només ens ho demanarà aquesta vegada i ja ho guardarà en les preferències. Per defecte si tot ha anat bé ens obrirà contra 'index.html'.

 

Raspberry_reconocimiento_voz_espanol_05-bujarra

Jo la manera que ho he fet (no la millor, però ràpida i funcional) és que després d'escoltar-nos, el navegador obrirà en una pestanya la URL amb les paraules que ens ha entès atacant hector.php passant-se-les com a variable. Després es tancarà la pestanya!

 

Bo, doncs això és tot, agrair a Miguel Ignacio Guerra del blog Cucopc alguna ajudeta que m'ha enxampat. Gràcies a tots i espero que ho disfrutin, combinant aquest tipus de documents amb altres que veureu a la secció de Raspberry Pi, podem fer una llar intel·ligent totalment intuïtiva i poderosa.

 

Posts recomanats

Autor

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, no dubtis a contactar amb mi, us intentareu ajudar sempre que pugui, compartir és viure ;) . Gaudir dels documents!!!