Reconocimiento de voz en la Beaglebone black

Para hablar de GNU/Linux o software libre en general.
Post Reply
kurtsik
Posts: 124
Joined: 30 Jan 2015 11:29

Reconocimiento de voz en la Beaglebone black

Post by kurtsik » 01 Feb 2015 12:35

En este pequeño manual vamos a ver como instalar la aplicacion de reconocimiento de voz ligera Pocketsphinx.
rbot.png
(31.59 KiB) Downloaded 287 times
En un post anterior se pueden ver algunos previos necesarios para poner en marcha estas instrucciones:

viewtopic.php?f=11&t=25

El procedimiento es algo laborioso por que implica la compilacion de las aplicaciones y lidiar con el complejo sistema de audio de GNU/Linux.

Para empezar instalaremos los paquetes necesarios:

Code: Select all

# apt-get install bison libasound2-dev pkg-config python-dev cython alsa-utils
En el proceso de configuracion es posible que se den problemas por que no se detecte correctamente el sistema ALSA y se enlace con Pulseaudio por lo que procederemos eliminar esta aplicacion para forzar el linkado con ALSA:

Code: Select all

# aptitude remove pulseaudio -y
# aptitude purge pulseaudio -y
# mv /usr/include/pulse/pulseaudio.h /usr/include/pulse/pulseaudio.h.old
Este es el error que obtendremos si realizamos la compilacion enlazando con pulseaudio:

Code: Select all

Error opening audio device plughw:1,0 for capture: Connection refused
Mixer load failed: Invalid argument FATAL_ERROR: “continuous.c”, line
246: Failed to open audio device
El siguiente paso sera descargar los dos paquetes necesarios: sphinxbase-0.8 y pocketsphinx-0.8, de la web del proyecto: http://cmusphinx.sourceforge.net/. Alli tambien podremos encontrar mucha documentacion interesante.

Descomprimimos ambos paquetes y comenzamos por sphinxbase. Accedemos al directoria con las fuentes y procedemos al configurado:

Code: Select all

$ ./configure --enable-fixed


Si hay errores por falta de dependencias las instalaremos y para terminar ejecutaremos:

Code: Select all

$ make && sudo make install
Y habilitaremos la disponibilidad de estas librerias para enlazar el siguiente paquete que compilaremos. Para ello editaremos el archivo /etc/ld.so.conf y añadiremos al final la siguiente linea: /usr/local/lib. Guardamos y ejecutamos:

Code: Select all

# /sbin/ldconfig
Vamos ahora con el segundo paquete, accedemos a las fuentes de pocketsphinx y ejecutamos la configuracion (si hay errores por dependencias las instalaremos), compilaremos e instalaremos:

Code: Select all

$ ./configure
$ make && sudo make install
Una vez instalado podremos comprobar que el sistema funciona correctamente ejecutando la siguiente aplicacion de testeo: pocketsphinx-0.8/src/programs/pocketsphinx_continuous,

Al ejecutar la aplicacion esta quedara a la espera de detectar audio asi que hablaremos al microfono, la aplicacion se activara y, entre muchos mensajes de debug, mostrara las palabras que ha identificado.

Por defecto el idioma que se identifica es el ingles, hay un proyecto para crear los modelos acusticos y los diccionarios pero parece ser que esta en una fase bastante temprana de desarrollo.

Rapidamente nos daremos cuenta que la aplicacion no es muy eficaz reconociendo el audio, para intentar mejorar la eficiencia podemos proporcionar una gramatica limitada a la aplicacion por ejemplo con las ordenes concretas que pensemos utilizar.

El procedimiento para hacer esto comienza creando un archivo de texto con las cadena que necesitemos, una por linea y sin simbolos de puntuacion:
gramatica.jpg
gramatica.jpg (12.57 KiB) Viewed 18792 times
Para compilar este fichero iremos a la siguiente URL: http://www.speech.cs.cmu.edu/tools/lmtool-new.html. Ahi se encuentra una herramienta llamada lmtool que es capaz de compilar de manera adecuada nuestra gramatica. Tal como indican en la web la aplicacion esta optimizada para ingles, concretamente el dialecto de EEUU.

Subiremos el archivo, pulsaremos COMPILE KNOWLEDGE BASE y descargaremos el comprimido que nos enlaza la web.

Ahora debemos descomprimir el archivo anterior y mover el contenido al directorio pocketsphinx-0.8/src/programs. Entonces invocaremos de nuevo pocketsphix indicandole que haga uso de nuestro diccionario:

Code: Select all

./pocketsphinx_continuous -lm 2607.lm -dict 2607.dic
La mejora es muy evidente.

Post Reply