Wiki

Clone wiki

gpyvozcontrol / cmusphinx

Creación del modelo acústico con CMUSphinx


  1. Bibliotecas (libraries) de software necesarias
  2. Creación de la gramática
  3. Preparación de datos de entrenamiento
  4. Entrenamiento del modelo acústico
  5. Ejecución de PocketSphinx

Bibliotecas de software necesarias

Los programas necesarios para crear este modelo acústico con el kit de herramientas de CMUSphinx y utilizados para este proyecto son:

SphinxBase
Es un conjunto de bibliotecas utilizadas para los proyectos de CMUSphinx. Se puede descargar desde: http://sourceforge.net/projects/cmusphinx/files/sphinxbase/5prealpha.
SphinxTrain
Es una suite de herramientas que llevan a cabo el entrenamiento del modelo acústico. Se puede descargar desde: http://sourceforge.net/projects/cmusphinx/files/sphinxtrain/5prealpha. Se recomienda descargar el tar.gz desde: http://cmusphinx.org/download/nightly/SphinxTrain.nightly.tar.gz.
Sphinx3
Es un reconocedor de voz ligeramente más lento que Sphinx 2 pero más preciso. Se puede descargar con svn desde: https://cmusphinx.svn.sourceforge.net/svnroot/cmusphinx/trunk/sphinx3.
PocketSphinx
Es un reconocedor de voz que puede ser utilizado en sistemas embebidos. Se puede descargar desde: http://sourceforge.net/projects/cmusphinx/files/pocketsphinx/5prealpha.

Creación de la gramática

Para utilizar una gramática en "gpyvozcontrol" con CMUSphinx, se crea el archivo "gpyvozcontrol.gram' y que contiene:

#JSGF V1.0;

grammar gpyvozcontrol;

public <gpyvozcontrol-listens> = <comando>;

<comando> = vozcontrol | <accion> (editor de <edicion> | <programa_o> | carpeta <archivo>) | <accion_v> | <accion_v> (ventana | todas las ventanas) | <lamina> <accion_r> | <accion_l> <lamina> | <accion_rp> volumen al <sistema> | <accion_rp_1> al reproductor | <accion_s> (sistema | equipo) |  presentar (proyecto| tesis) | <accion_a> <programa_accesibilidad> | <cambiar> a la lamina (<numero5> | <numero9> | <numero10> | dieci <numero9> | veinte | veinti (<numero5> |<numero9>) | <numero100> | <numero100> y (<numero5> | <numero9>)) | <decir> <date> | titulo de la (cancion | ventana);
<accion> = abrir | abre ;
<accion_v> = cerrar | cierra | minimizar | minimiza | maximizar | maximiza;
<accion_r> =F##
 siguiente | anterior  | actual;
<accion_l> =  primera | ultima ;
<accion_rp> = bajar | subir ;
<accion_rp_1> = cierra | cerrar | pausa | pausar ;
<accion_s> = apagar | reiniciar ;
<accion_a> = activar | activa | desactivar | desactiva ;
<archivo> = videos | musica | documentos | descargas | personal ;
<lamina> = cancion | lamina ;
<edicion> = texto | documento | hoja | presentacion ;
<programa_o> = terminal | consola | texto | documento | calculadora | navegador | reproductor ;
<sistema> = equipo | reproductor | sistema ;
<programa_accesibilidad> = orca | teclado | magnificador ;
<cambiar> = cambia | cambiar;
<numero5> = uno | dos | tres | cuatro | cinco;
<numero9> = seis | siete | ocho | nueve;
<numero10> = diez | once | doce | trece | catorce | quince;
<numero100> = treinta | cuarenta | cincuenta | sesenta | setenta | ochenta | noventa;
<date> = hora | fecha;
<decir> = dime | decir;

donde están todas las instrucciones que reconocerá el sistema de órdenes de voz.

Preparación de datos de entrenamiento

Una base de datos de entrenamiento es un conjunto de muestras de voz capturadas en señales de audio, que el software de "entrenamiento", al que llamamos el entrenador, aprende los parámetros de los modelos de las unidades de sonido (fonemas). Contiene la información necesaria para extraer las estadisticas del discurso en forma de modelo acústico.

Es necesario decirle al entrenador las unidades de sonido (los fonemas) que se desean aprender y por lo menos la secuencia en que se producen en cada señal de voz en la base de datos de entrenamiento. Esto se proporciona al entrenador a través de un archivo llamado el archivo de transcripción, en el que la secuencia de palabras y los sonidos no vocales se escriben exactamente como se producen en una señal de voz, seguido de una etiqueta que se puede utilizar para asociar esta secuencia con la señal de voz correspondiente.

El entrenador entonces ve en un diccionario que mapea cada palabra a una secuencia de unidades de sonido, para derivar la secuencia de unidades de sonido asociados con cada señal.

Archivos de configuración

Se crea los siguientes archivos de configuración para entrenar el modelo acústico, utilizado en el sistema de órdenes de voz "gpyvozcontrol":

  • Diccionario fonetico (gpyvozcontrol.dic): tiene todas las palabras que están en el archivo de transcripción, una por linea con su pronunciación fonetica, el formato es:
palabra_1   fonemas_palabra_1
palabra_2   fonemas_palabra_2
palabra_3   fonemas_palabra_3
palabra_4   fonemas_palabra_4
palabra_5   fonemas_palabra_5
... ...

para el sistema de órdenes de voz es (solo se muestran algunas palabras):

a a
aaronita  a a r o n i t a 
aar|ó|nico  a a r o n i k o 
aba  a b a 
ababa  a b a b a 
...
...
b  b e 
baalita  b a a l i t a 
baba  b a b a 
babada  b a b a d a 
babadero  b a b a d e r o 
...
...
ca  k a 
caamin|í|  k a a m i n i 
cabadelante  k a b a d e l a n t e 
cabal  k a b a l 
cabalar  k a b a l a r 
...
...
  • Archivo de fonemas (gpyvozcontrol.phone): tiene todos los fonemas utilizados en el diccionario, uno por linea, más el fonema especial 'sil' para el silencio, el formato es:

fonema_1
fonema_2
fonema_3
fonema_4
fonema_5
...
...
SIL

que para el sistema "gpyvozcontrol" es:

a
b
d
e
f
g
...
...
SIL

  • Archivo de relleno (gpyvozcontrol.filler): contiene los fonemas no cubiertos por el modelo de lenguaje como risas, aliento, entre otros o simplemente el silencio, a continuación se muestra el archivo creado para "gpyvozcontrol":
<s> SIL
</ s> SIL
<sil> SIL
  • Archivo de transcripción (gpyvozcontrol_train.transcription y gpyvozcontrol_test.transcription): es un archivo que contiene las transcripciones de entrenamiento y de pruebas para cada archivo de audio. Se pueden ver a continuación los archivos creados para el sistema:

    • Archivo gpyvozcontrol_train.transcription

      <s> entre los libros infantiles más leídos está el cuento de la caperucita roja </s> (01)
      <s> el inspector carlos ha tenido mucho peso en la resolución del caso </s> (02)
      <s> a lo lejos se divisaba una luz azulada que se mov{\'\i}a en zigzag </s> (03)
      <s> siempre se ha dicho que por la boca muere el pez </s> (04)
      <s> clavó el gusano en el anzuelo </s> (05)
      <s> las autoridades sanitarias advierten que el tabaco perjudica seriamente la salud </s> (06)
      <s> en el techo el yeso estaba agrietado </s> (07)
      <s> mi madre me ha dicho que coma todo lo que tengo en el plato </s> (08)
      <s> el mago parec{\'\i}a de goma se metió en la caja en un abrir y cerrar de ojos </s> (09)
      <s> el padre dio como dote unos zapatos y una colección de sellos muy cara </s> (10)
      <s> que uno más uno son tres es una afirmación falsa </s> (11)
      <s> la jota es un baile regional </s> (12)
      <s> el chico miró al asno con desdén </s> (13)
      <s> mi madre me mima mucho </s> (14)
      <s> no te voy a dar nada de nada </s> (15)
      <s> el coche estaba cubierto por una lona de color verde </s> (16)
      <s> el llanto del niño me romp{\'\i}a el corazón </s> (17)
      <s> mi carro me lo robaron </s> (18)
      <s> uno de los huesos más largos del cuerpo es el fémur </s> (19)
      <s> en esa aula doy clases de danza </s> (20)
      ...
      ...
      

    • Archivo gpyvozcontrol_test.transcription

<s> abrir reproductor </s> (01)
<s> cierra el reproductor </s> (02)
<s> activa orca </s> (03)
<s> reducir la ventana </s> (04)
<s> bajar volumen al equipo </s> (05)
<s> abrir calculadora </s> (06)
<s> minimizar las ventanas </s> (07)
<s> presentar proyecto </s> (08)
<s> cambiar a la lámina ochenta y cuatro </s> (09)
<s> vozcontrol </s> (10)
<s> maximizar las ventanas </s> (11)
<s> maximiza las ventanas </s> (12)
<s> apagar sistema </s> (13)
<s> subir volumen al equipo </s> (14)
<s> cambiar a la lámina once </s> (15)
<s> abrir mensajer{\'\i}a </s> (16)
<s> cerrar el reproductor </s> (17)
<s> reduce todas la ventanas </s> (18)
<s> cambiar a la lámina cincuenta y seis </s> (19)
<s> primera canción </s> (20)
...
...

Es importante resaltar que cada frase comienza con y termina con seguido con el identificador del audio entre paréntesis (solo el nombre del audio, no hace falta el camino o la dirección de la carpeta). Es fundamental que coincidan los identificadores de los archivos, Fileids, con los archivos de transcripción (estos dos archivos deben contener la misma cantidad de lineas).

  • Archivo Fileids (gpyvozcontrol_train.fileids y gpyvozcontrol_test.fileids): es un archivo que contiene los nombre de los audios de entrenamiento y pruebas, uno por línea, que para "gpyvozcontrol es:

    • gpyvozcontrol_train.fileids

ramirezm/01
ramirez/02
ramirezm/03
...
...
rincony/01
rincony/02
rincony/03
...
...
quinteron/01
quinteron/02
quinteron/03
...
...

+ gpyvozcontrol\_test.fileids

prueba1/01
prueba1/02
prueba1/03
...
...
prueba2/01
prueba2/02
prueba2/03
...
...
prueba3/01
prueba3/02
prueba3/03
...
...

Archivos de audio

Los audios para el entrenamiento deben tener las siguientes características:
+ Formato MSWav + Frecuencia de muestra 16 Khz + A 16-bits. + Stereo aplicación de escritorio.

Estos audios son las grabaciones de las frases que se encuentran en el archivo "gpyvozcontrol_train.transcription", cada una por separado y se deben ubicar en la carpeta "wav"

Configuración para la creación del modelo acústico

A continuación se describe el procedimiento realizado para la creación del modelo acústico.

- Se crea la carpeta "gpyvozcontrol", se entra a la misma y se ejecuta:

sphinxtrain -task gpyvozcontrol setup

esto genera la sub-carpeta "etc" con los archivos de configuración necesarios para el entrenamiento, además se copian los archivos de configuración del paso anterior (gpyvozcontrol_train.transcription, gpyvozcontrol_test.transcription, gpyvozcontrol_train.fileids, gpyvozcontrol_test.fileids, gpyvozcontrol.dic, gpyvozcontrol.phone y gpyvozcontrol.filler) dentro de la sub-carpeta.

Se modifica el archivo "etc/sphinx_train.sfg", según corresponda y quede de la siguiente forma:

  \CFG\_WAVFILES\_DIR = "\CFG\_BASE\_DIR/wav";
  \CFG\_WAVFILE\_EXTENSION = 'wav';
  \CFG\_WAVFILE\_TYPE = 'mswav'; # one of nist, mswav, raw
  \CFG\_HMM\_TYPE = '.cont.'; # Sphinx 4, PocketSphinx
  \CFG\_HMM\_TYPE  = '.semi.'; # PocketSphinx
  \CFG\_N\_TIED\_STATES = 200;

Entrenamiento del modelo acústico

Ya con los cambios mencionados, se procede al entrenamiento ejecutando:

sphinxtrain run

esto pasará por todos los procesos para entrenar el modelo, quedando la siguiente estructura:

  bwaccumdir/
  etc/
  feat/
  logdir/
  model\_architecture/
  model\_parameters/
  qmanager/
  result/
  trees/
  wav/
  gpyvozcontrol.html

El archivo "gpyvozcontrol.html" tiene registrada toda la información de los procesos realizados en el entrenamiento del modelo acústico.

El modelo acústico creado esta ubicado en la carpeta generada "model\_parameters/gpyvozcontrol.cd\_semi\_200/" y contiene los siguientes archivos:

- feat.params.
- mdef.
- means.
- mixture_weights.
- noisedict.
- sendump.
- transition_matrices.
- variances.

Ejecución de PocketSphinx

Para probar el modelo acústico creado, se ejecuta:
pocketsphinx_continuous -inmic yes -hmm model_parameters/gpyvozcontrol.cd_semi_200/ -lm etc/gpyvozcontrol.lm.DMP -dict etc/gpyvozcontrol.dic

También se puede probar el modelo acústico con una gramática, por lo que se ejecuta:

pocketsphinx_continuous -inmic yes -hmm model_parameters/gpyvozcontrol.cd_semi_200/ -dict etc/ordenes.dic -jsgf ordenes.gram

Para que pocketsphinx reconociera la entrada de voz, se tuvo que configurar el volumen del microfóno a un 25% - 30%. Volúmenes superiores bloquearon completamente el reconocimiento. Probablemente un problema de configuración del software de base.

anterior Inicio Siguiente

Updated