En este pequeño manual vamos a ver como instalar la aplicacion de reconocimiento de voz ligera Pocketsphinx.
En un post anterior se pueden ver algunos previos necesarios para poner en marcha estas instrucciones:
http://www.bilbaomakers.org/blog/2015/11/10/sintesis-de-voz-en-la-beaglebone-black/
Para empezar instalaremos los paquetes necesarios:
# 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:
# 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:
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
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:
$ ./configure --enable-fixed
Si hay errores por falta de dependencias las instalaremos. Y para terminar ejecutaremos:
$ make && sudo make install
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:
# /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:
$ ./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:
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:
./pocketsphinx_continuous -lm 2607.lm -dict 2607.dic
La mejora es muy evidente.