Reconocimiento de voz en la Beaglebone black

Para hablar de GNU/Linux o software libre en general.
kurtsik
Mensajes: 124
Registrado: 30 Ene 2015 11:29

Reconocimiento de voz en la Beaglebone black

Mensaje por 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) Descargado 287 veces
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:

Código: Seleccionar todo

# 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:

Código: Seleccionar todo

# 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:

Código: Seleccionar todo

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:

Código: Seleccionar todo

$ ./configure --enable-fixed


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

Código: Seleccionar todo

$ 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:

Código: Seleccionar todo

# /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:

Código: Seleccionar todo

$ ./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) Visto 1682 veces
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:

Código: Seleccionar todo

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

Responder