> ## Content Index
> Fetch the complete content index at: https://blog.xavigonzalez.net/llms.txt
> Use this file to discover other available public pages before exploring further.

# Reconocimiento de voz con Raspberry Pi [HowTo]
- URL: https://blog.xavigonzalez.net/reconocimiento-de-voz-con-raspberry-pi-howto/
- Published: 2015-07-29T11:26:43.000Z
- Updated: 2017-05-15T22:42:13.000Z
- Author: Xavi Gonzalez
- Tags: Android, Curiosidades, HowTo, Informatica, Raspberry Pi, pi, reconocimento, reconocimiento por voz, speech to text, stt, text speech, tts, #wordpress, #Import 2026-10-27 20:56

¡Hola a todos! Esta semana me han regalado una **Raspberry Pi 2** por mi cumpleaños, y no he tardado nada en ponerme a[![](https://blog.xavigonzalez.net/content/images/wordpress/2015/07/PI-300x170.jpeg "PI")](https://blog.xavigonzalez.net/content/images/wordpress/2015/07/PI.jpeg) trastear con ella. De los proyectos que me rondaban la mente, el que me parecía más interesante es el de **Reconocimiento de voz**, pero no solo para hacer transcripciones, sino para ejecutar acciones con el **GPIO** de la Pi.  
Así que después de unos días de pruebas y testeos, he conseguido tener un proceso continuo que escucha la entrada de voz para ejecutar comandos como encender o apagar **LEDs** conectados al GPIO. A partir de aquí se puede hacer cualquier cosa que se nos pase por la imaginación. Queréis saber como hacer justo esto en vuestra **Raspberry**? Pues a seguir leyendo!

**¿Que necesitaremos?[![](https://blog.xavigonzalez.net/content/images/wordpress/2015/07/sonidoUSB-150x150.jpg "sonidoUSB")](https://blog.xavigonzalez.net/content/images/wordpress/2015/07/sonidoUSB.jpg)**  
– Una **Raspberry Pi,** en principio no importa el modelo  
– Una **tarjeta de sonido USB y un micro**, un microfono USB o una WebCam con Micro (por USB).  
– Algunos **LEDs**, yo he utilizado los de una caja de ordenador antigua (led de Power y HD)

Lo primero que haremos será instalar el software libre de reconocimiento de voz, llamado **PocketSphinx.**  
Para ello ejecutaremos los siguientes comandos (algunos requiere elevación). Con esto instalaremos y actualizaremos el software, además de dar preferencia a la tarjeta de audio o entrada por USB a la hora de hacer el reconocimiento de voz.

> apt-get install rpi-update> 
> apt-get install git-core> 
> rpi-update> 
> > 
> -> Conecta tu micro USB (o camara+micro, o tarjeta sonido + micro) y> 
> -> reinicia la RPi.> 
> > 
> vi /etc/modprobe.d/alsa-base.conf > 
> > 
> # Cambiamos lo siguiente:> 
> # Comentamos esta linia> 
> # options snd-usb-audio index=-2> 
> # Y añadimos la siguiente:> 
> options snd-usb-audio index=0> 
> > 
> -> Cerramos el archivo y recargamos alsa:> 
> > 
> alsa force-reload> 
> > 
> wget http://sourceforge.net/projects/cmusphinx/files/sphinxbase/\> 
> 0.8/sphinxbase-0.8.tar.gz/download> 
> mv download sphinxbase-0.8.tar.gz> 
> wget http://sourceforge.net/projects/cmusphinx/files/\> 
> pocketsphinx/0.8/pocketsphinx-0.8.tar.gz/download> 
> mv download pocketsphinx-0.8.tar.gz> 
> tar -xzvf sphinxbase-0.8.tar.gz> 
> tar -xzvf pocketsphinx-0.8.tar.gz> 
> > 
> apt-get install bison> 
> apt-get install libasound2-dev> 
> > 
> cd sphinxbase-0.8> 
> ./configure --enable-fixed> 
> make> 
> make install> 
> > 
> cd ../pocketsphinx-0.8/> 
> ./configure> 
> make> 
> sudo make install

Es recomendable utilizar las ultimas versiones del software.

Una vez instalado podemos ejecutar el comando **./** **pocketsphinx\_continuous** para empezar a probar si reconoce la voz.  
En el caso de que os de un **error de que no encuentra la entrada de audio**, ejecutaremos como **administrador con sudo.**

 Ahora, crearemos unos diccionarios con las palabras que queramos asignar a algunas acciones.  
Esto ayudara al software a realizar el Speech to text, ya que solo tendrá que comprobar la entrada de audio con las entradas que nosotros creamos en el diccionario.

En mi caso, cree un diccionario con pocas palabras como: *Green On, Red On, Green Off, Red Off*. Para encender y apagar los leds.**Para crear el diccionario**, crea un archivo de texto plano (.txt) con una palabra en cada fila.  
Luego entra en la siguiente dirección [(LM-TOOL)](http://www.speech.cs.cmu.edu/tools/lmtool-new.html?ref=blog.xavigonzalez.net) y sube el archivo txt.  
Te mostrará los enlaces para descargar tu diccionario.

Descarga el .**TAR** y descomprimelo en una carpeta donde ejecutaremos los **scripts**.

Para realizar las primeras pruebas, entra en la carpeta del diccionario y ejecuta el siguiente comando:

> sudo pocketsphinx\_continuous -lm 9640.lm -dict 9640.dic > capture.txt -samprate 16000/8000/48000

**Donde 9640.lm y 9640.dic sera substituido por el numero del diccionario que acabáis de crear.**

Al ejecutar el comando podéis decir las palabras del diccionario, y una vez acabéis (**Control+C** para cerrar) podéis leer el archivo **capture.txt** para comprobar si es correcto.

[![](https://blog.xavigonzalez.net/content/images/wordpress/2015/07/Raspberry-Pi-GPIO-pinouts-300x206.png "Raspberry-Pi-GPIO-pinouts")](https://blog.xavigonzalez.net/content/images/wordpress/2015/07/Raspberry-Pi-GPIO-pinouts.png)  
Ahora pasamos a conectar los **Leds** y empezar a jugar con ellos. Para empezar, conectaremos los **LEDS** en los Pines **GPIO17** y **Ground** (tierra) y **GPIO1** y **Ground**.

Ahora ejecutaremos los siguientes comandos para indicar que están activos, y que son de salida:

> echo 17 > /sys/class/gpio/export  
> echo 1 > /sys/class/gpio/export  
> echo out > /sys/class/gpio/gpio17/direction  
> echo out > /sys/class/gpio/gpio1/direction

Podemos apagarlos y encenderlos cambiando el valor, con el siguiente comando:

> echo 1 > /sys/class/gpio/gpio17/value  
> echo 0 > /sys/class/gpio/gpio17/value

Ahora, para empezar a hacer acciones basadas en los comandos de voz, he escrito algunos **Scripts** en **Python**, para hacer esto. La particularidad de este codigo es que ejecuta **PocketSphinx** y lo deja escuchando, para que cada vez que digamos un comando, automaticamente compruebe si esta descrito y ejecute la acción en cuestión.  
Asi que podeis crear los siguientes archivos y copiar el contenido para realizar las pruebas. Recordad que las palabras que utilizo estan creadas en mi diccionario. También podeis observar que pese a que esta comentado, también llamo a un programa llamado Festival, que es justamente lo contrario, un sintetizador de voz por si nos interesa que la Raspberry nos conteste cada vez que haga una acción.

Archivo **read.py:**

> #!/usr/bin/python  
> import os  
> import time
> 
> i=0
> 
> while i != 1 :  
> infile = open(‘capture.txt’, ‘r’)
> 
> for line in infile:  
> if line.find(«GREEN OFF») != -1 :  
> os.system(«echo 0 > /sys/class/gpio/gpio17/value»)  
> os.system(«true > capture.txt»)  
> #os.system(«festival -b ‘(SayText «Green led off»)'»)  
> if line.find(«GREEN OK») != -1 :  
> os.system(«echo 1 > /sys/class/gpio/gpio17/value»)  
> os.system(«true > capture.txt»)  
> #os.system(«festival -b ‘(SayText «Green led ON»)'»)  
> if line.find(«RED OFF») != -1 :  
> os.system(«echo 0 > /sys/class/gpio/gpio2/value»)  
> os.system(«true > capture.txt»)  
> #os.system(«festival -b ‘(SayText «Red led Off»)'»)  
> if line.find(«RED OK») != -1 :  
> os.system(«echo 1 > /sys/class/gpio/gpio2/value»)  
> os.system(«true > capture.txt»)  
> #os.system(«festival -b ‘(SayText «Red led ON»)'»)  
> if line.find(«TEST») != -1 :  
> os.system(«echo 1 > /sys/class/gpio/gpio2/value»)  
> os.system(«echo 1 > /sys/class/gpio/gpio17/value»)  
> os.system(«true > capture.txt»)  
> #os.system(«festival -b ‘(SayText «Green and red led ON»)'»)  
> if line.find(«EXIT») != -1 :  
> os.system(«sudo pkill -9 pocketsphinx»)  
> os.system(«true > capture.txt»)  
> #os.system(«festival -b ‘(SayText «Goodbye!»)'»)  
> i=1
> 
> infile.close()  
> time.sleep(2)

Y ahora el archivo **all.py**, que ejecuta PocketSphinx en «segundo plano».

> #!/usr/bin/python  
> import os  
> import subprocess, time
> 
> os.system(«rm capture.txt»)
> 
> #os.system(«./shut.py &»)
> 
> os.system(«sudo pocketsphinx\_continuous -lm 3906.lm -dict 3906.dic > capture.txt -samprate 16000/8000/48000 &»)
> 
> os.system(«./read.py &»)

Ahora damos permiso de ejecución a los dos programas:

> chmod +x all.py read.py

Y ya podemos ejecutar all.py para hacer la prueba.

Este «trozo» de codigo va a seguir en desarrollo para intentar encontrar mejoras. Lo ofrezco de forma libre para que cualquiera pueda utilizarlo y jugar un poco con todo esto.

Si quieres comprar una Raspberry Pi para empezar a trastear, puedes encontrarlas en Amazon a un precio buenisimo, además de que puedes disfrutar del envío gratis si pruebas Amazon Premium desde el enlace de abajo!  

Un saludo!!