Sei sulla pagina 1di 14

Abstracto:

En este documento se encuentra un ejemplo práctico de la aplicación de un reconocimiento


de voz offline, que requiere bajos recursos del procesador y que aparte es independiente del
hablante. Para esta aplicación se pretendía implementar un control por voz de vocabulario
limitado para controlar un brazo mecánico tipo Jaco, el cual sirve como apoyo de actividades
diarias a personas con impedimentos motrices. Se presentan algunas alternativas de sistemas
que cumplen dichas características, y se logra implementar un sistema con 90% de detección
en idioma inglés y un 75% para el idioma francés, su implementación en el brazo robótico aún
queda pendiente.

Introducción:

El reconocimiento de voz es una herramienta muy utilizada para múltiples propósitos. Para la
mayoría de nosotros no es anormal utilizarlo en el día a día al manejar o para acceder
rápidamente a un contacto o aplicación desde el celular. A pesar de que el reconocimiento de
voz ha existido desde mitad del siglo XX, no había sido utilizado debido a su falta precisión
y su limitado vocabulario había hecho impráctico su uso. El primer sistema de
reconocimiento de voz se creó en 1952 bajo el nombre de Audrey; era un sistema de
reconocimiento dependiente del hablante que podía reconocer 10 dígitos. No se hicieron
avances significativos hasta los años 70s el Departamento de Defensa de Estados Unidos
(DARPA) desarrollo un sistema con capacidades mejoradas con posibilidad de implementar
un vocabulario de hasta 1,000 palabras (SONIX). Este tipo de procesamiento se basaba en
detectar los patrones del sonido para hacer una comparación exhaustiva a una base datos, lo
que requería un gran poder de procesamiento y almacenamiento para todas las combinaciones
del vocabulario. Debido a eso todos los esfuerzos se centraban en crear una síntesis de sonido
digital más parecido e intuitivo como el del ser humano. No fue hasta la introducción del
modelo estadístico de “Hidden Markov” que el procesamiento de las señales analógicas pudo
crear sistemas más flexibles, con mayor robustez. A la par del mejoramiento de los modelos
estadísticos, los sistemas de adquisición de señales y sistemas de procesamiento se
perfeccionaron de igual forma.

Para este proyecto se pretendió crear un sistema de reconcomiendo de voz capaz de reconocer
un vocabulario que comprende comandos de posición. Este sistema se pretendía implementar
en un sistema robótico de apoyo para personas con problemas motrices parciales, enfocado
para dar soporte dinámico en tareas diarias. Debido a que este sistema robótico estaría
funcionando esporádicamente todo el día y se requiere la mayor portabilidad posible, esto
quiere decir que el sistema no debe depender de estar conectado a internet, debe ser un sistema
que demande bajos recursos energéticos y de procesamiento. A pesar que, actualmente existen
muchos de sistemas reconocimiento de voz, la gran mayoría de estos hacen procesamiento en
la nube y algunos de los sistemas offline requieren de hardware especifico o no tienen la
precisión adecuada para esta aplicación. Es importante recalcar que debido al corto tiempo
para desarrollar el proyecto, se evitó implementar un sistema desde cero. Y finalmente, debido
a que se pretendía probar en la Ciudad de Quebec, se pretendió crear modelos personalizados
en inglés y francés. Se seleccionaron dos distintos sistemas de detección: TIesr Speech
Recognition System y CMUSphinx. Cada uno de estos representa una opción viable con sus
respectivas ventajas y desventajas que se analizaran a lo largo de este documento. Además, es
muy importante resaltar que gran parte del material audiovisual utilizado en este reporte
proviene de una serie de tutoriales realizados por el propio investigador y estudiante Erick
Martínez Blas como apoyo al departamento de Ingeniería Mecánica. En estos tutoriales se
explica más a detalle todos los pasos para lograr instalar y programar las aplicaciones, debido
a que cada tutorial requirió de la aplicación de más 30 pasos por sistema de reconocimiento,
se decidió dejar algunos pasos como apoyo para el reporte, pero la demás información se deja
fuera de la extensión de este documento.

Marco Teórico

El reconocimiento de voz sigue siendo todo un reto para los investigadores. El problema recae
en la naturaleza de la señal y que en muchas ocasiones se requiere de un cierto grado de
comprensión para que ciertas palabras puedan tener significado. Como ya se ha mencionado
anteriormente, el modelo más utilizado para estas aplicaciones es el llamado Hidden Markov,
el cual utiliza ciertos algoritmos estocásticos de redes neuronales, en donde una vez que se
obtiene una señal se compara con un árbol de decisiones que el cual toma la secuencia de
palabras que tengan más sentido en un cierto contexto. Como otras redes neuronales este
modelo tiene que ser entrenado por una serie datos de referencia. Que, para esta aplicación
comúnmente se utilizan tres diferentes niveles: se utiliza un modelo de lenguaje acústico,
diccionario fonético, y diccionario escrito o se puede modificar directamente un árbol de
decisiones.
A pesar de que estos programas utilizan el modelo Hidden Markov de diferentes maneras y
en diferentes niveles, se puede observar cierta similitud. El modelo de Markov viene de las
Cadenas de Markov, que en un principio es fácil de comprender y que en bajos niveles es muy
sencillo de aplicar, pero mientras vaya aumentando la cantidad de elementos a considerar en
la cadena de decisiones su complejidad aumentara en la misma medida. Este modelo como su
nombre lo indica y explicada de una manera simplificada se basa en la demostración y
comparación de una serie de eventos estadísticos para los cuales se tiene que definir una serie
de probabilidades y esas probabilidades se plasman en el árbol de decisiones entonces existen
distintas probabilidades para todas las posibles combinaciones en el árbol de decisiones.
Entonces, en el Hidden Markov Model reconoce los patrones probabilísticos en para ser
reconocidos en el proceso estocástico comprendida por una o más cadenas de Markov. Las
características de estos modelos es que las cadenas deben de ser finitas y también así el
conjunto de distribución de probabilidad de resultados. Entonces cuando se aplica al
reconocimiento de voz, la mayoría de las veces se obtiene mediante un algoritmo de
retroactivo que asigna una probabilidad para un vector futuro de un estado de Cadena de
Markov. Cuando se entrena un modelo por medio del algoritmo Viterbi, se construye un árbol
de decisiones con la información del diccionario fonético con la cual se construirían los
nuevos vectores. Así se encuentra la combinación más probable al comparar el modelo con la
señal de entrada y se fuerza a esa posibilidad.

En cuanto al modelo acústico, se pueden grabar muestras de las palabras o de los fonemas a
replicar, el número de muestras puede variar dependiendo si se requiere que sea dependiendo
o independiente del hablante. Para algunos sistemas de reconocimiento de voz se necesitan
alrededor de 500 muestras para una sola palabra para poder crear un modelo independiente
del hablante. Y existen algunos proyectos de código abierto en donde se pretende crear una
colección de palabras para lenguajes completos. Cuando se procede a crear el diccionario
fonético, se pretende reducir un conjunto de palabras a sus mínimas silabas fonéticas que
finalmente construyen la pronunciación de una palabra; existen algunos modelos que permiten
introducir diferentes pronunciaciones para estas palabras. Cuando se crea el modelo de
lenguaje o árbol de decisiones, se basa en las entradas para el diccionario fonético, en esta se
establecen diferentes niveles de interacciones entre cada una de las palabras. Esto puede ser a
nivel monófona, bífona, o trífona, generalmente se establece solo hasta trífona puesto que si
se considera un nivel más de interacción el modelo se vuelve demasiado grande como para
ser practico. Cuando se habla del nivel de monófonos se establecen las probabilidades que
aparezca una sola palabra en cualquier contexto, por ejemplo si se trabajara con un amplio
modelo del español, existiría una mayor probabilidad generalmente que si se dice la palabra
“Él” (ya que es un pronombre muy usado en el idioma) a una palabra como “elefante” que se
utiliza en menos contextos. Se podría decir que solo se considera, para este nivel, la sola
probabilidad de aparición de una palabra más que una interacción. En el nivel de bífonos se
establece la probabilidad de interacción entre dos palabras del diccionario, también se
consideran el silencio antes o después de una palabra. Y en el último nivel se pueden establecer
las interacciones entre dos o tres palabras (contemplando un silaba de silencio).

La voz es una señal análoga que se propaga por medio de ondas causada por vibraciones a
diferentes frecuencias, el límite de audición se encuentre aproximadamente desde los 20 Hz
hasta 20KHz. Esta señal se encuentra formada elementalmente por senos y cosenos aunque su
construcción llega a ser muy compleja. Dentro de las características de la señal de voz se
pueden observar algunos comportamientos estadísticos, estos son: la función de densidad de
probabilidad, estacionariedad y ergocidad. La función de densidad se puede estimar mediante
un histograma de las amplitudes sobre un numero suficientemente grande representativo de la
señal, que pueden ser por distribuciones laplaciana o distribución gama. Aunque para la señal
de voz depende mucho los intervalos de tiempo en los que se analice la señal. Si los intervalos
ese encuentran entre los 20 y 60 ms se procede más típicamente al uso del modelo ergodico.
Para simplificar la obtención de señales de voz, se supone entonces que la señal es casi
estacionaria y con ergodicidad solo en intervalos largo puede cambiar esta condición.

Desarrollo:

El primer sistema de desarrollo se trata del producido por Texas Instruments, este sistema
requiere de un hardware especializado para poder implementarse, se trata del DSP (Procesador
de Señal Digital) de la familia C5000, que justamente son procesadores diseñados para
aplicaciones de baja energía, y que debido a sus especificaciones permite un paralelismo para
ejecutar los algoritmos de redes neuronales para generar las coincidencia. Este mismo
procesador está presente en diversos productos electrónicos como grabadoras y micrófonos.
Por lo que la primera aproximación se logró por medio del kit de desarrollo C5535 eZdsp el
cual incluye el DSP C5000. Este procesador ocupa una librería específica para la
implementación del reconocimiento de voz desarrollado por la propia empresa Texas
Instruments bajo el nombre de TIesr Speech Recognition. El sistema de biblioteca TIesr es el
kit de herramientas que permite a los dispositivos DSP C5535 y C5545 ejecutar comandos de
activación por voz que imprime una palabra clave pre programada en la pantalla OLED de la
placa, basada en la palabra clave. Además, este diseño también permite la creación de frases
de activación personalizadas y varias otras aplicaciones, como modulación de voz, detección
de tonos, etc.

Ilustración 2: C5545
Ilustración 1:C5535

Para lograr este cometido hay que entender que para desarrollar una aplicación utilizando un
dispositivo de la familia Texas Instrumentas se deben instalar todos los toolkits para funcionar
a la par de Code Composer Studio (plataforma de desarrollo para programación de la familia
TI). En este desarrollo se utilizó la versión 7.4 ya que la versión más reciente 8.1 mostró varias
veces problemas de compatibilidad con algunas herramientas de la librería, además que
continuamente se presentaba error de conexión de tipo puerto serial. Una vez cargado CCS,
se deben actualizar e instalar algunas librerías que se muestran a continuación:
Ilustración 3: Actualización importantes

Para comprobar una buena instalación, se procede a cargar el Demo que contiene una sola
frase de activación y que puede estar corriendo de forma continua. Existen algunos otros
proyectos de demostración, pero todos estos proyectos deben estar optimizados para el chipset
adecuado (en este caso C5535) y compatible con las versiones de 2013-2015 ya que el
desarrollo de esta librería empezó en esos años y algunas funciones no están habilitados para
versiones más recientes tanto de BIOS como de CCS. Algunas imágenes de los proyectos y
de configuraciones de compatibilidad se muestran a continuación:

Ilustración 5: Demo de proyectos

Ilustración 4: Navegación de Proyectos

Ilustración 6: Compatibilidad Bios

Ilustración 7: Compatibilidad en programa


Una vez compilado y cargados estos proyectos en la placa, se puede proceder a conectar un
micrófono al eZdsp C5535 y se puede comprobar su funcionamiento diciendo la palabra de
activación “t i voice trigger” la palabra se presenta en la pantalla OLED como se muestra en
la siguiente figura:

Ilustración 8: Ejemplo de activación

Para desarrollar un programa y aplicación propios se encontró con el inconveniente que para
crear modelos de Hidden Markov, se debía bajar herramientas de terceros con el nombre de
HTK Speech Recognition y para crear un árbol de decisiones (necesario para crear
vocabularios específicos para nuevos lenguajes). A pesar de que se sigue utilizando la familia
de los C5000 la aplicación de reconocimiento de voz casi no tiene soporte, y al final eso
dificultó en gran medida la capacidad de completar un diccionario personalizado. Es por eso
que se decidió utilizar CMUSphinx.

CMUSphinx

CMUSphinx es un ambiente de desarrollo especializado en reconocimiento de voz de código


abierto. Actualmente este sistema tiene versiones especializadas para dispositivos móviles con
Android, esto quiere decir que no depende de hardware específico para poder correrlo. A pesar
de eso, se recomienda la plataforma de desarrollo de Rasberry Pi debido a que el código para
esta aplicación, a diferencia del TIesr Speech Recognition, se encuentra escrito totalmente en
Python. Y puede ser desarrollado y probado con la ayuda de una laptop, lo que facilita
enormemente, sin mencionar que existe mucha más información en internet para
desarrolladores sin tener que pasar por foros o chats de alguna empresa. También cabe
mencionar que es recomendable desarrollar en el sistema operativo Linux Ubuntu 14.04 ya
que evita problemas de compilación. Antes de empezar el desarrollo de estas aplicaciones se
necesitan instalar ciertas dependencias en Ubuntu. Existe mucha documentación al respecto
pero aquí se muestran los más importantes:
Ilustración 9: Instalación en Ubuntu

Ilustración 10: Lista de dependencias

La versión a instalar para la aplicación prevista se denomina sphinxbase. Sphinxbase es una


versión optimizada para sistemas de bajos recursos, con alta velocidad de respuesta y que ya
tiene integrados todas las herramientas para entrenar un nuevo modelo, implementar un
diccionario propio y correrlo para más aplicaciones. Este sistema ya incluye una opción de
reconocimiento de voz independiente del hablante, pero debido a que tiene un muy amplio
vocabulario, no era práctico para una aplicación con un vocabulario limitado a 15 diferentes
comandos. Este sistema resulto tener una interfaz más intuitiva para el desarrollador ya que
tanto el diccionario fonético como el de lenguaje o árbol de decisiones podía ser editado
mediante un script, y el modelo acústico podía ser entrenado en base a grabaciones de audio
a menos de 16 MHz con la posibilidad de ser entrenado varias veces bajo el mismo modelo.
Esto, aunado al hecho que se podían ocupar entradas de micrófono de la laptop para hacer las
pruebas, hizo que la experimentación fuera un proceso más fluido, que se podía acceder
mediante el command window bajo un sencillo argumento.

Otra de las grandes ventajas de Pocketsphinx es que existe una gran comunidad de
desarrolladores y documentación para diferentes aplicaciones. Por ejemplo, a pesar que el
modelo acústico del idioma inglés viene predefinido, para crear un modelo acústico del
francés con sus diferentes pronunciaciones propias de la región de Quebec, hubiese requerido
al menos 20 horas de grabaciones para un vocabulario muy reducido. Cuya obtención habría
requerido de al menos dos semanas para catalogar e implementar en el entrenamiento de las
redes neuronales. En vez de eso fue posible descargar un modelo acústico francés, que se
adecuo en cierta medida a nuestra aplicación. Algunas imágenes del sistema se muestran a
continuación:

Ilustración 11: Reconocimiento predefinido

Ilustración 12: Programa en funcionamiento


Resultados:

A pesar que el programa de detección predefinido utilizado por Pocketsphinx reunía todas las
características demandadas por el sistema, la detección de palabras dejaba mucho que desear.
Se hicieron algunas pruebas utilizando el diccionario que incluye dicho sistema
predeterminado y se encontró que no detectaba la palabra deseada en la mayoría de los casos
mostrando una fiabilidad del 22%, misma que no podía ser aceptada bajo los términos del
proyecto. La razón de esta disparidad es que al ocupar el programa determinado de detección
de palabras en idioma inglés, se utiliza todo el vocabulario que se ha entrenado en esa red
neuronal para intentar reconocer las palabras. Aunque cabe mencionar que existía la
posibilidad de un error por una deficiente obtención de audio debido al micrófono o una mala
pronunciación del investigador, se descartó dicho error al probar el sistema con algunos
angloparlantes y diferentes sistemas de grabación. Logrando aumentar la fiabilidad del
sistema hasta un 45%, lo que sigue siendo un rendimiento bajo si se pretende dar órdenes a
un robot que potencialmente podría representar un peligro no solo para las personas alrededor
sino para el propio usuario. A continuación se muestran algunas pruebas utilizando la palabra
“backward”, que es parte de una serie de 12 diferentes comandos que se tomaron como
referencia para crear un vocabulario:

Ilustración 13: Prueba "backward" 1


Ilustración 14: Prueba "backward" 2

Como se observa, a pesar que se pretendió detectar backward, se detectaron palabras que
carecían de sentido en este contexto. Además que el programa, realmente no cumplía con las
demás necesidades de simplicidad para poder ser ocupado por un usuario. Por lo que se
procedió a la creación de un programa propio con un árbol de decisiones, entrenado mediante
prueba y error y un diccionario propio. El código se muestra a continuación:
Ilustración 15: Muestra programa final

Ilustración 16: Muestra vocabulario final

Al disminuir el tamaño del vocabulario se logró aumentar la fiabilidad de detección hasta un


90% teniendo solamente un confusión de palabras en la presentación final. Cabe destacar que
no se puede mostrar el árbol de decisiones no solo por lo extenso, sino porque el formato es
incompatible con los programas de visualización de Windows (recordando que se desarrolló
en Ubuntu). Además se logró generar el mismo vocabulario en francés, con una menor
fiabilidad que se supone se debe a que el modelo acústico en francés no esta tan detalladamente
desarrollado como el de inglés. Y para eliminar cualquier anomalía o activación en falso, se
logró implementar una palabra de activación que servía como referencia para el programa y
el usuario permitiendo mayor libertad sin restricciones a por ejemplo decir forward o
backward en medio de una conversación sin miedo que se activara el brazo. A pesar que se
logró un gran avance, debido al tiempo de la estadía no fue posible terminar por completa la
implementación con el brazo robótico como se pretendía. Pero se lograron las bases para que
se pudiera empezar a implementar los algoritmos de posición y movimiento por medio de
comandos de voz. Logrando así, cumplir con el propósito de la estadía.

Conclusión:

El reconocimiento de voz es un complejo sistema que requiere que muchos procesos


funcionen al mismo tiempo para poder interpretar algo que para la mayoría de nosotros es
muy normal. Aunque no lo parezca a simple vista, el modelo matemático y estadístico detrás
de esta clase de sistemas requiere un procesamiento y algoritmos muy optimizados y que a
pesar que se utilizan redes neuronales, el usuario es quien a final de cuentas tiene la capacidad
de entrenar a estos sistemas con fines específicos. Este proyecto requirió de características
muy específicas por las cuales se decidió utilizar dichos sistemas, pero hoy en día podemos
encontrar esta clase de sistemas en todos lados, al alcance de nuestra mano muy
probablemente tenemos uno. Pero eso no significa que el reconocimiento de voz este
totalmente desarrollado. Siguen existiendo muchos esfuerzos para mejorar y hacer más
accesible esta clase de tecnología para todos y en todos los idiomas. Justamente, el propósito
de mi proyecto se centraba en encontrar otra forma de facilitar el día a día a una persona
discapacitada motrizmente, lo cual aumenta el grado de responsabilidad a este sistema.

Analizando más a fondo, también es importante hacer la observación que muchas veces el
desarrollo de las aplicaciones no van a la par del desarrollo de sistemas operativos o de
descubrimientos tecnológicos y que fácilmente un proyecto puede ser incompatible y traer
muchos problemas al intentar desarrollar en dicha aplicación. Aparte de estos resultados se
obtuvieron otras comparativas que tuvieron que ser dejadas al margen para no desviar el
motivo de este reporte, pero que son igualmente importantes. Como la aplicación de otros
modelos más modernos que incluyen un grado de Deep learning el cual se encuentra aún en
grado experimental para poder implementarlo correctamente. Y también existe mucha área de
oportunidad para seguir mejorando el sistema creado y hacerlo más robusto y seguro para el
usuario, aunque se requeriría al menos otros tres meses para llegar a un estado en el que pueda
ser implementado de forma segura con un usuario.

Fuentes:

http://www.ti.com/product/TMS320C5535

https://www.happyscribe.co/blog/history-voice-recognition/

https://web.stanford.edu/~jurafsky/slp3/ed3book.pdf

https://www.fceia.unr.edu.ar/prodivoz/banco_filtros_bw.pdf

https://cmusphinx.github.io/

http://www.ti.com/lit/ug/tidubj5a/tidubj5a.pdf

https://www.hearinglink.org/living/loops-equipment/speech-recognition-systems/

https://en.wikipedia.org/wiki/Code_Composer_Studio

http://htk.eng.cam.ac.uk/

https://sonix.ai/history-of-speech-recognition

https://mi.eng.cam.ac.uk/~mjfg/mjfg_NOW.pdf

Potrebbero piacerti anche