jump to navigation

Reconocimiento de voz en castellano para Linux 28 noviembre, 2008

Posted by ubanov in Informática-Linux, Robótica.
Tags: , , , , , , , ,
trackback

Últimamente he estado metiéndome en el tema del reconocimiento de voz. En esta entrada cuento brevemente las cosas que ido probando. Además describo como configurar reconocimiento de voz para ti mismo en castellano.

Me estoy refiriendo a reconocimiento de voz Open Source sobre Linux.

Por temas de trabajo, he estado haciendo pruebas también con un software comercial de reconocimiento (verbio) y hay que decir que en este caso si hay una gran diferencia entre los programas open y las soluciones cerradas (también la hay en precio)

Si te interesa entrár en más detalles sobre cómo configurar reconocimiento para ti mismo tendrás que seguir leyendo 🙂
Cuando empece a pensar qué iba a tener mi robot, llegué a la conclusión que una de las cosas que quería para él era el reconocimiento de voz. Lo primero que hice fue instalar sphinx2 (en debian se hace de forma muy sencilla con apt-get).

Sphinx me daba reconocimiento en inglés, el siguiente paso fue buscar reconocimiento en castellano, buscando por google lo único que se encuentra es la Web de un profesor mejicano (el Dr. Nolanco) que había preparado la parte de reconocimiento para sphinx3.

Tratando de buscar más información llegué a una web que es http://www.voxforge.org/. Esta es una web que trata de recoger voces con licencia GNU, de cara a que los programas de reconocimiento de voz open puedan disponer de información de voz (WAV con la voz y su correspondiente transcripción). Esta información se puede usar posteriormente para crear un corpus del idioma para el programa.

El Corpus se crea mediante la extracción de datos estadísticos de ficheros con voces, esta información estadística es una representación del sonido de cada fonema que forma cada palabra. Un modelo de Corpus será más exacto contra más información de voces se haya utilizado para crearlo.

Los programas más importantes de cara al reconocimiento de voz, en open source en linux, son CMU Sphinx y Julius.

Los software de reconocimiento de voz suelen estar orientados a dos taréas: dictado (que reconozca cualquier palabra que tenga en un diccionario y la convierta en su texto) y dirigido por una gramática (hay una serie de frases que se pueden decir, lo cual simplifica el proceso de reconocimiento). En el paquete de Julius, el programa julius hace el dictado y julian reconocimiento con gramática.

Las aplicaciones destinadas a reconocer unas pocas palabras pueden ser por ejemplo un software de control del ordenador (en el que el usuario tendría una serie reducida de ordenes que puede decir), o un robot al que se le quiere dar unas pocas ordenes. En este tipo de aplicaciones se define una gramática de las frases que se pueden decir. Para el caso del robot una grámática muy sencilla podría ser: cualquier frase estará formada por la palabra «ir» y una dirección. Una dirección puede ser: derecha, izquierda, adelante o atrás. Con esta gramática el robot sería capaz de reconocer 4 frases: «ir derecha», «ir izquierda», «ir adelante» o «ir atrás». De cara al reconocimiento de voz se simplifica muchísimo el proceso, en el sentido que no es posible que el usuario diga lo que se le antoje, sino que tiene que comparar lo que oiga con un grupo reducido de textos (en este caso sólo 4).

El otro tipo de aplicaciones son las de dictado. En una aplicación de dictado no se define una gramática, dado que el usuario podría decir prácticamente cualquier cosa. Para ayudar a las aplicaciones de dictado lo que se crea es un modelo de lenguaje. El modelo de lenguaje es un fichero más grande, que contiene la probabilidad de que aparezcan ciertas palabras en un determinado orden.

Para crear un corpus multiusuario, y que funcione sin entrenamiento, para una aplicación de reconocimiento orientada a reconocer unas pocas palabras, se estima que se necesitan unas 140 horas de audio. Lo mismo para una aplicación de dictado se necesitan unas 2.000 horas de audio.

El gran problema que tiene el reconocimiento de voz en castellano es que de forma libre no hay, a día de hoy, ni un corpus libre, ni voces suficientes para crearlo.

Entonces si cualquiera de nosotros quisiese hacer algo que requiriese reconocimiento de voz no podríamos hacer nada?

Evidéntemente si. Hay dos cosas que se pueden hacer: una hacer un training de nuestra propia voz (que una vez que lo hagas yo recomendaría que donases tu voz a voxforge), o bien sobre los datos que tiene voxforge añadir tu voz (se haría el training con los datos de voxforge más las grabaciones que hagas… nuevamente: dona de paso tu voz, que servirá para mejorar los software de reconocimiento de voz open).

En mi he usado como software de reconocimiento el Julian (perteneciénte al julius) y para hacer el training el HTK. Yo voy orientar mi reconocimiento hacia julian, sólo quiero que el robot sea capaz de reconocer 10-20 frases. He decidido usar este en lugar del cmu sphinx por que las críticas decían como que julius da mejor calidad en cuanto al acierto al reconocer palabras.

Yo he preparado un proceso para crear training de nuestra propia voz (al principio era la única forma que tenía de tener reconocimiento en castellano que me pillase bien) y luego lo he adaptado para incluir todas las voces que había por voxforge en castellano.

Como he comentado antes, todo lo que yo he preparado ha sido para Julius (donde el training se hace con HTK). Algún día lo adaptaré para sphinx. Antes de empezar a hacer nada deberás instalar Julius y HTK (más información sobre esto en: http://www.voxforge.org/home/dev/acousticmodels/linux/create/htkjulius/how-to/download)

Lo que he preparado está en http://www.dev.voxforge.org/svn/es/Trunk/ (está gestionado por Subversion). Para bajarlo entero puedes hacer «svn checkout http://www.dev.voxforge.org/svn/es/Trunk», te creará un directorio Trunk con 500MB (la mayoría son las grabaciones de voz de otra gente, pero bajar hoy en día 500MB no creo que sea problema).

Sobre el directorio que te bajas, hay 3 subdirectorios importantes:

  • HTK_Scripts: este directorio debe contener los scripts: prompts2wlist, prompts2mlf, maketrihed, mkclscript.prl de HTK (no los puedo redistribuir por la licencia de HTK)
  • train: contine toda la información con la voz de las personas que han ido grabando
  • auto: contiene los ficheros para poder crear el corpus de forma automática (script_auto) y algunos ficheros de configuración para poder ejecutar luego julius para hacer una prueba (desde este directorio ejecutar «julian -input mic -C julian.jconf»)

Una forma sencilla de grabar las frases es ejecutar el script recordprompts (ejecutar con «./recordprompts texto_train_spanish_3.0.txt train/wav/yourown/»), esto nos pedirá que leamos la friolera de 141 frases (hay que reconocer que es un poco coñazo y se tarda como 20 minutos, además hay algunas frases un poco raritas).

[Publicidad: Si hacemos el proceso subir luego las frases a voxforge. Para ello mirar el documento notestraining.txt]

Una vez grabadas las frases ejecutar los siguiente comando para hacer el training conjunto de tu voz, con las voces de voxforge:

cd auto
cat yourown/codetrain.scp >>codetrain.scp
cat yourown/train.scp >>train.scp
./script_auto

Esto nos creará 3 ficheros con la representación del sonido conteniendo los datos de tu voz: hmm15/hmmdefs, hmm15/macros y tiedlist. Para probarlo ejecutar «julian -input mic -C julian.jconf». Si te da un error diciendo que no puede abrir /dev/dsp, prueba a ejecutar «modprobe snd_pcm_oss»

El reconomiento que vamos a probar está orientado a una gramática muy sencilla (ver los ficheros auto/sample.grammar y auto/sample.voca). Desde este punto podrás continuar cambiando la gramática y haciendo más pruebas.

Si empiezas a cambiar la gramática y te encuentras que alguna palabra no la puede reconocer julian por que dice que no conoce los trifonemas, se puede grabar nuevas frases conteniendo las palabras que quieres reconocer.

Para ello grabar las nuevas frases, transcribirlas en auto/prompts, ejecutar «cd auto» y «./script_auto 2>&1 | more», y revisar la salida del comando HDMan -A… (justo al principio después de borrar los temporales). Habrá una frase que dirá «Dictionariy dict created – 823 words processed, 2 missing», si en lugar de 2 hay más palabras corta el proceso y mira el fichero dlog para ver qué palabras debes incluir en el diccionario de lexicon/voxforge_lexicon_spanish. Por último editar los ficheros auto/codetrain.scp y auto/train.scp para incluír los nuevos ficheros de audio.

Si tienes dudas utiliza el foro de voxforge o deja un comentario en este blog.

Actualización 3/12/09: como unas cuantas personas ya se habían percatado el svn le han puesto password, y no nos van a decir la clave. El problema es que al final estabamos creando un pequeño problema en el servidor de voxforge… nos bajábamos 500Mb y cuando lo hacíamos unos cuantos saturábamos la máquina… Para probar he colocado en un ADSL cutre un cacho de la información que estaba en el SVN. Hasta que me saturéis el ADSL lo dejo aquí… si luego me lo saturáis igual lo pongo en emule o torrent (que también valen para cosas legales :-). El link hasta nuevo aviso es http://ubanov.homelinux.com/files/ReconocimientoVoz_Trunk.tar_small.bz2 http://dl.dropbox.com/u/7564477/ReconocimientoVoz_Trunk.tar_small.bz2

Comentarios»

1. edu - 2 diciembre, 2008

con respecto al text to speech, yo he utilizado festival y mbrola. Lo uso para hacer audiolibros y escucharlos en el mp3. La verdad es que festival es un poco «duro» en cuanto a la modulación y entonación. Con mbrola logré algo un poquito mejor. Mbrola tiene restricciones de licencia ya que no puede usarse para fines militares.

DGVC - 24 diciembre, 2014

A los militares no les gusta esto 😦

2. Jonny uribe - 5 diciembre, 2008

Ubanov muchisimas gracias por el recurso. Ha funcionado muy bien…bueno no tanto como me hubiera gustado pero sigo trabajando en ello. Trate de seguir el tutor del htkbook pero es muy complicado para los que apenas estamos iniciando. Tus scripts y los de voxforge han sido muy utiles.

No se como incrementar el exito del reconocedor. Primero lo use con todas la voces que estaban disponibles pero el reconocimiento fue muy pobre, talvez por que soy de latinoamerica y el acento es distinto. Asi que aisle las demas voces y use solo la mia, mejoro un poco. Luego grabe otra tanda con las mias, en total 282 frases mejoro otro poco pero sigue fallando a menudo. No se si deba grabar mas tandas de mi voz, igual querria que fuera independiente del hablante y añadir luego las demas voces. Ha este paso quedara solo util para mi. ¿ Alguna sugerencia?

Reitero mi agradecimiento por compartir tu trabajo.

Hasta luego.

ubanov - 8 diciembre, 2008

Jonny: la mayoría de las grabaciones que hay para el reconocimiento de voz son de latinoamerica (en concreto de Chile). Lo que se necesita para hacer un reconocimiento de voz independiente del hablante son horas y horas de grabación (se supone que para empezar harían falta 140 horas para hacer programas orientados al reconocimiento de palabras sueltas… y unas 2000 para aplicaciones de dictado).

Yo te pediría una cosa, si has grabado tus voces un par de veces dónalas a voxforge.org, así podrás contribuir de forma sencilla a el software libre de reconocimiento de voz en nuestro idioma común.

Si te grabas más veces aumentará el ratio de acierto… pero casi más importante es estar en un ambierte con poco ruido…

Un saludo.

3. nahuel - 9 diciembre, 2008

Hola ubanov.
Ante todo, muchas gracias por el trabajo.
Estoy utilizando el reconocimiento de voz para lanzar comandos en un escritorio gnome.
El porcentaje de acierto es relativamente bajo, por ello decidí grabar mi voz siguiendo tus instrucciones. El problema que se me presenta, es que al reproducir una frase grabada el sonido es pésimo. (distorsionado y entrecortado).
Intuyo que por eso la taza de reconocimiento es tan baja. Lo que necesitaria saber es como configurar el micrófono. Como tendría que configurar la captura de la voz para lograr la mayor fidelidad.
Si grabo las frases con las herramienta de grabacion que trae el escritorio por defecto, las capturas son impecables. pero no si lo hago desde el script en el que tengo que repetir las 140 frases.
He probado cambiando la entrada a oss, alsa, pulse; pero nada… no se qué se me escapa.
Desde ya gracias
Saludos

ubanov - 10 diciembre, 2008

nahuel: no se porqué te fallará el arecord 😦 lo único que se me ocurre es que grabes aquellas frases que contengan las palabras que quieres reconocer con la herramienta que tengas (audiocity o lo que tengas) y con eso hagas una primera prueba… Por ejemplo graba sólo las frases 43, 72, 83, 118 y 119. Con esto mete en codetrain.scp y train.scp sólo esos números de frases. Ejecuta todo el proceso y prueba a decir números…

4. Sele - 31 diciembre, 2008

Buen comentario ubanov, se nota que has investigado mucho sobre el tema. Yo estoy intentando hacer una aplicacion domotica que actue sobre las luces y para ello necesito que linux reconozca comandos muy sencillos, de una sola palabra o dos, y que una vez detectados estos comandos ejecute un script que mandara los comandos on/off al modulo de las luces.
Buscando por internet he encontrado un programa llamado Perl-Box que segun he leido parece que puede ejecutar aplicaciones con palabras sencillas, como «Music» para abrir el reproductor de musica y demas, pero me da problemas al instalarlo. Tambien he encontrado uno llamado Simon que parece muy bueno por los comentarios pero que tampoco puedo instalarlo (tengo serios problemas con la instalacion en linux).
Tu post me ha interesado mucho pero no se si tanta configuracion es algo excesivo para lo que yo quiero hacer ¿¿tu que crees?? ¿Como harias tu para ejecutar script mediante comandos de voz? Es que ando algo perdido en el tema y me vendrian muy bien tus respuestas.

5. pepo - 2 enero, 2009

saludos a todos , he estado mirando tu blog y los comentarios de voxforge, a ver si este fin de semana tengo tiempo y lo miro para echar una mano ,

yo estoy, Sele, con tu mismo tema, tengo un sistema de X10 y ahora ando montando un servicio con python que por ahora es una bbdd , un sistema de reconocimiento de elementos y ordenes en funcion de la entrada y la ejecucion del comando en plan «enciende la luz de la cocina »
en cuanto lo termine lo subire a algun sitio , pero mi principal problema es la entrada de voz, sphinx4 corre java y me parece matar moscas a canonazos, sphinx3 va bien , pero trabajo en ingles con el y el reconocimiento para un diccionario de unas 40 palabras ya lia la cosa y hace lo que no debe.
Actualmente genero los lm y los diccionarios en ingles y el dmp al vuelo , pero el problema es sphinx3 ,
he modificado el livedecode para que la salida -hyp de las hypotesis salga a un archivo de texto, pero como digo, la calidad es mas que nada baja (y en ingles)

esta noche/ manana , le pego un vistazo a lo que has hecho Ubanov, y si puedo colaborar lo subo ,

me metere un poco mas con julius , pero he leido temas de licencia de htk que no me gustan mucho , en principio yo dejo GPL toda la aplicacion de python

6. pepo - 3 enero, 2009

joer, juraria que ayer deje un mensaje y no aparece , es igual

comentaba , mas o menos, que he estado pegandole un vistazo , y sele, los problemas de licencia de HTK no molan mucho, no he probado julius , pero retocando un poco de codigo de sphinx3 puedes hacer lo que dices,

hoy pruebo con el tema de python sobre sphinx , actualmente tengo la aplicacion funcionando con sphinx3 y un decoder modificado que funciona constantemente buscando palabras de un diccionario de no mas de 50 ordenes
mi aplicacion es para la gestion de sistemas de domotica x10 ( o los que sean) y algo mas que saque de la manga con algunos scrips de perl a modo converscion con la maquina al estilo HALL
la aplicacion se conecta a una bbdd para obtener los ficheros de control y el vocabulario y luego genera al vuelo el lenguage
instala pocketsphinx que viene preparado para reconocer comandos y la salida del programa se la enchufas a un script que ejecute estos comandos 😀

ubanov, no he tenido mucho tiempo de pegarle un vistazo a lo que has hecho , pero te lo has currado , a ver si tengo tiempo de colaborar
un saludo y gracias

tk - 29 julio, 2009

(teclado ingles)

No quiero reinventar la ruedaaa 🙂

Podrias darme mas detalles sobre como lo has hecho? (Si me envias el codigo, mejor)

Un saludo!!

7. pepo - 3 enero, 2009

jajaja, ahora aparecen los dos, no se manejar el weblog , lo siento ubanov!!!

8. pb - 22 enero, 2009

Hola!que buen blog Ubanov. Yo tengo un pequeño problema, después de haber grabado y haber hecho el trainning, pongo en la consola :

$ julian -input mic -C julian.jconf

pero esto me da un error de que no me reconoce el comando julian, luego pruebo con julius

$ julius -input mic -C julian.jconf

este parece que si funciona, pero me empiezan a salir un monton de warning como estos:

——
### read waveform input
STAT: AD-in thread created
Warning: strip: sample 0-2563 is invalid, stripped
Warning: strip: sample 1475-1494 is invalid, stripped
Warning: strip: sample 1369-1396 is invalid, stripped
….
Así continuamente… ¿Alguno se le ocurre qué puede ser?¿Y por qué no me reconoce julian?
Tengo instalado julius:

$julius
Julius rev.4.1 – based on
JuliusLib rev.4.1 (fast) built for i686-pc-linux

Muchas gracias!!

9. Eduardo - 30 enero, 2009

Como quien dice llegar y usar xDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD

10. exodoeviterno - 8 febrero, 2009
11. exodoeviterno - 8 febrero, 2009

Hablando con Pingüinos ( Reconocimiento y Síntesis de Voz en GNU/Linux )
http://www.glib.org.mx/article.php?story=20050121132445578

*******************
Open Mind Speech es un sistema de reconocimiento del habla construido con Overflow.
*************
http://en.wikipedia.org/wiki/Linux_speech_recognition_software

12. ubanov - 11 febrero, 2009

Hola exodoeviterno:

El link de http://www.glib.org.mx es de enero del 2005… no está muy actualizado.

Sphinx2 de hecho es un programa no soportado hoy en día… y el gran problema que tenemos es el de que no hay suficientes voces para que se pueda hacer reconocimiento de voz en castellano.

Lo que hace falta es que todos donemos nuestras voces a Voxforge para poder tener reconocimiento en nuestro idioma!!!!

Un saludo a todos

13. Jonny uribe - 16 May, 2009

Hola Ubanov

La carpeta anonymous1 contiene basura. No son las grabaciones de los prompts sino tramos de canciones.

Me gustaria que me guiaras un poco en el uso de los archivos en la carpeta Audio. Parecen ser grabaciones a diferentes frecuencias de muestreo.

Deberia crear los prompts y añadir estos con los .wav a la carpeta train junto con las demas grabaciones usadas para el entrenamiento?
Por que estan estas grabaciones aisladas?

Gracias por la ayuda

14. Rodrigo - 19 junio, 2009

Hola, buenos Dias.
No se de que pais sos. Pero muy bueno el post.
Estoy tratando de hacer algo con reconocimiento de voz.
Mas precisamente un servicio web en java.
Pero estoy teniendo muchas complicaciones con esto ya que no entiendo bien la integracion de tanto programa junto y como usalos desde una app java.
me podrias dar una mano con esto?

15. Rodrigo - 19 junio, 2009

Ha, Soy de Argentina.

ubanov - 20 junio, 2009

Pues ya lo siento, pero con eso en concreto no me he pegado 😦

16. tk - 29 julio, 2009

(teclado ingles)

El SVN esta pidiendo contrasena. Podria proporcionarla??

Un saludo

17. Manu - 27 octubre, 2009

¡Hola!

tk tiene razón, al usar svn pide un usuario y contraseña. ¿Alquien puede proporcionarla? Estoy muy interesado en un reconocedor de voz en castellano para Ubuntu. Muchas gracias.

18. Samuel - 26 noviembre, 2009

Al igual que tk y Manu, estoy muy interesado en este post y en el reconocimiento de voz. ¿Podrias poner el usuario y la contraseña para poder descargar el material creado?

ubanov - 28 noviembre, 2009

El usuario yo no se cual será… cuando yo escribí el artículo no tenía password ni usuario. Os recomendaría que entreis por la web de voxforge y preguntais en los foros?

De todas formas que sepais que el tema de reconocimiento de voz gratis en castellano está muy verde… para que no os hagáis muchas ilusiones….

19. Mario Medina - 4 diciembre, 2009

hola! gracias por este magnifico tutorial. Estoy descargando las voces que mencionas, y ya he donado como 6 grabaciones mias y unas cuantas de mi esposa a voxforge, y pienso seguir haciendolo hasta juntar unos 20-30 minutos de grabacion, que segun se es suficiente por donante.

La duda que tengo, es como obtengo las grabaciones de todas las personas que han donado para que julius reconozca mas facilmente la voz de cualquier persona? descargo los .zip del ftp de voxforge y luego ejecuto algun comando que genera las estadisticas? o hay algun paquete ya hecho que contenga lo necesario ya listo?

Gracias de nuevo

20. Mario Medina - 5 diciembre, 2009

Hola! soy yo de nuevo. Ya hice mi grabacion pero de verdad que le falta mucho speech para que reconozca tanto como quiero… sin embargo me gustaria saber como podria ponerla disponible, incluyendo las frases nuevas que voy a agregar 🙂

21. Mario Medina - 7 diciembre, 2009

Hola! estoy desarrollando una interfaz para poder grabar muchas mas frases de manera sencilla, en español de España (donde la Z se utiliza con un TH) y español de México (la Z es una S), recolectando frases de diversos documentos y temas, buscando tener por lo menos 10 veces todas las palabras del diccionario, con el objetivo de que este sistema permita ya dictado.

Esta iniciando todavia, pero en unos dias va a estar la interfaz visual para grabar en línea y creo que habra un paquete diario o semanal donde estarán las voces de todas las personas que graben 🙂

22. cmelendo - 14 diciembre, 2009

Hola Ubanov, enhorabuena por tu trabajo (me he bajado los ficheros de training, etc). Me gustaría utilizar HTK + Julius para el reconocimiento de voz en un robot pero antes me gustaría llegar a entender la teoría de funcionamiento de estos programas.
Veo que has profundizado mucho (has hecho scripts, texto de entrenamiento, etc). ¿Donde se puede bajar doc. sobre estos programas? ¿hay documentación en castellano?, ¿y la información de que phones, triphones, lexicon… utilizar? ¿que información genera el HTK, supongo que hace FFT de los wav y luego estadistica? ¿Como has seleccionado el texto de training?
Muchas gracias.

ubanov - 14 diciembre, 2009

Me temo que no hay nada sencillo donde mirar, lo único que te queda es preguntar por los foros…

Con los Wavs se genera información estadística de qué es cada sonido.

Yo seleccioné los phones y triphones haciendo estadísticas de qué triphones se usaban más (cogí un diccionario que baje de algún lugar y comprobé qué triphones aparecen más en las palabras españolas, sin contar cuanto se usa cada palabra).

Al final mi conclusión es que hay tantos triphones que no vas a acertar con todos (sería necesario coger lecturas de unos cuantos libros para acertar con los más habituales de verdad), con lo que cada vez que quería reconocer una nueva palabra tenía que incluirla…. En base a eso si quieres que tu robot te reconozca 4 comandos, introduce en el training esos 4 comandos y ya está.

23. cmelendo - 14 diciembre, 2009

Una última pregunta: como relaciona HTK los wav dados y el texto con los fonemas utilizados para asignarles la info estadistica?. Cuando se utilizan los triphones?

Gracias (y no te molesto mas).

ubanov - 15 diciembre, 2009

no es molestia…. sino con no contestar vale 😛

De forma simplificada al HTK tu le pasas tres cosas: los ficheros WAV, una trascripción de lo que se dice en el WAV y un diccionario de cada palabra por qué triphones está formado. Si miras los ficheros en concreto verás que hay «algunos» ficheros más.

El busca los diferentes sonidos en orden, y con la aparición repetida del mismo sonido se asegura que el phonema es el correcto.

Voy a intentar explicarlo de forma muy simplificada lo que sería un triphone, para que entiendas mejor el proceso.

Un fonema es un sonido diferente, por ejemplo la palabra cinco, tiene 5 fonemas (5 sonidos), la pronunciación de la c, la de la i, la de la n, el de la c de co (que es un fonema diferente al de la c de ci, este sería más bien una ko) y el de la o

Un triphone es la unión de tres sonidos seguidos, es decir, la palabra «cinco» tendría los siguientes triphones:

silencio – c – i
c – i – n
i – n -k
n – k – o
k -o – silencio

En los trifones se mira no solo el sonido que hace un fonema, sino cómo varia ese sonido dependiendo de qué tenga delante o detrás. Al final los sistemas basados en reconocimiento de triphones funcionan mucho mejor que los basados en fonemas simples, por los que son los que se utilizan hoy en día.

Imaginate que quieres decir «voy para allá», si lo dices pensando y vocalizando dirás todos los sonidos tal cual, pero si hablas normal y un poco rápido, el «para» seguramente suene casi a un «paa», con una r que casi no se olle. Un triphone tiene en cuenta eso…

Ahora imaginate cuantas combinaciones de triphones hay (en alguno de los ficheros dejé una estadística de cuales eran los más utilizados, pero no recuerdo donde).

Qué se necesita entonces para tener un sistema de reconocimiento decente…. horas y horas de audio con su transcripción. Yo en su día me puse en contacto con una biblioteca que había preparado audiolibros para sordos, y les pedí que me los dejaran para esto, pero no se molestaron ni en contestar… enfín.

Se pueden definir en lugar de triphones, pentaphones… (5 sonidos) pero como es tan complejo el training de forma práctica no se usan (a día de hoy)…

Espero haberte ayudado.

24. medisoft - 22 enero, 2010

Hola! ya tengo desarrollada la herramienta para capturar voces de todos los que quieran colaborar, para escuchar voces de otras personas y votar por ellas, y para que las voces que esten con mas calificacion se auto-añadan a un corpus que enviare automaticamente a voxforge, y que ademas estará disponible para descargarse en la pagina. Ahorita solo tengo mi voz, por lo que no hay nada para descargar, pero me gustaria que quien quiera cooperar con su voz lo haga 🙂 la liga esta en el mail.

medisoft - 22 enero, 2010

bueno, perdon, esta sobre mi usuario, denle click a medisoft y ahi los lleva a la herramienta 🙂

25. Manuel - 2 marzo, 2010

Hola,
Estoy desarrollando un proyecto al que quiero añadir reconocimiento por voz. Estoy interesado en hacerlo en español y, por lo que estoy viendo, en voxforge hay problemas para descargarse las grabaciones.
He descargado el fichero de este post que tienes subido, pero no aparecen los wavs, ¿Que deberia hacer para incluir mis grabaciones y poder utilizarlas en conjunto?
Necesito un modelo lo mas logrado posible de aqui a finales de mayo por lo que estoy bastante interesado en aportar grabaciones.
Otra cuestion, estoy usando julius como motor de reconocimiento. Este, tiene una opcion para grabar automaticamente lo que se dice mientras se esta usando el motor. Podría usar esos ficheros tambien para entrenar mi modelo la unica pega es que actualmente uso gramaticas muy simples que no tienen mas de 3 o 4 palabras. Crees que se podrian usar estoy ficheros pese a que no lleguen al minimo de 8 palabras por prompt.

Gracias y un saludo!!

medisoft - 4 marzo, 2010

hola Manuel, oye, te invito a revisar la herramienta que hice para que añadas tu voz y también puedas descargar las grabaciones que han hecho otras personas juntas 🙂

26. laureano - 22 marzo, 2010

Hola, yo estoy queriendo probar estas herramientas pero no he conseguido bajar el HTK, su página oficial no funciona. Alguien sabe cómo lo puedo conseguir, o alguien lo tiene para pasarmelo. Desde ya muchas gracias por su ayuda.

27. Jesús Pérez - 28 junio, 2010

Hola, soy estudiande de la universidad de Coruña. Estoy haciendo un proyecto fin de carrera relacionado con este tema, robotica y comunicación.

Me gustaria poder ponerme en contacto contigo Ubanov o con alguien que este trabajando en estos temas para poder colaborar mutuamente y compartir experiencias.

Estoy probando los pasos indicados e intentando que funcionen las cosas.

Un saludo!

28. Jose Manuel - 9 agosto, 2010

Hola, estoy intentando descargar el fichero de estas dos direcciones pero sin éxito.

http://ubanov.homelinux.com/files/ReconocimientoVoz_Trunk.tar_small.bz2

http://www.dev.voxforge.org/svn/es/Trunk/

¿ Me puede ayudar ?

ubanov - 29 noviembre, 2010

Lo acabo de subir a la dirección:
http://dl.dropbox.com/u/7564477/ReconocimientoVoz_Trunk.tar_small.bz2

Perdón por haber tardado tanto, pero no encontraba el fichero 😀

Si puedo ayudarte en otra cosa me dices.

29. Xzel - 22 agosto, 2010

No soy programador, pero me interesa un programa de reconocimiento de voz por ser discapacitado fisico. He visto las alternativas, y comprendido las cuestiones de estos programas. Pero no comprendo porque nadie propone un enfoque mas simplista, como reconocer solo las silabas. O sea, en vez de reconocer toda la palabra, solo reconoce silabas individuales. En vez de decir «buenos dias», diria uno «bue» – «nos» – «di» – «as». Suena a solucion tonta, porque se habla de forma tonta, pero flexibiliza y aligeraria al programa, en vez de grabar y reconocer miles de palabras, solo lo hace en un limitado numero de silabas, y la gramatica y nuevas palabras no serian un problema. Para alguien que escribe a mouse, no suena muy lento hablar a silabas. Si a alguien le interesa me escribe. Gracias

30. Ricardo - 4 septiembre, 2010

Hola, como estan estoy tratando de desarrollar un sistema reconocedor de voz para pero en windows que controle unas funciones basicas del sistema operativo como abrir word, cerrar word, abrir internet explorer etc, yo se que este blog solo se refiere a trabajar sobre linux, pero quisiera que me ayudaran a saber si funciona tambien sobre windows xp, ya tengo un base de datos de voces que me gustaria aportar.

gracias

ubanov - 6 septiembre, 2010

windows tiene su propio reconocedor de voz e incluso que tiene un api para utilizarlo…. yo que tu empezaría mirando en microsoft.com (quizás incluso en msdn.microsoft.com) y buscar voice api o algo así.

Espero que te sirva.

Un saludo.

31. assanta - 21 septiembre, 2010

Buenas ubanov

He probado varios reconocedores comerciales y no comerciales, siempre usando gramáticas.
Ahora estaba mirando un poco la posibilidad de reconocimiento libre, el interes me ha surgido usando el reconocedor de google, funciona muy bien, para mi gusto y no me creo que tengan una gramática universal, asi que debe de ser lo que comentas de el diccionario.
Mi pregunta es si sería posible hacer algo similar con sphinx y el «Voxforge Spanish Model Released» que veo que acaba de salir.

saludos
assanta

32. erethros - 23 septiembre, 2010

hola, estoy empezando en linux, tengo ubuntu 10.04 64 bits y no logro seguir los pasos despues de comprobar la versión de gcc (4.4.3).

He instalado yum pero luego me dice que no existe nada de lo que me dice que haga…

Mi e-mail es erethros.12 en gmail punto com, si alguien puede ayudarme se lo agradecería mucho

33. isma - 1 octubre, 2010

Hola Ubanov

Enhorabuena por tu blog esta genial.

Soy nuevo en este mundo de reconocimiento de voz y como estoy empezando a hacer el proyecto de fin de carrera y tengo que hacer un robot que reconozca la voz y se mueva, como has comentado antes con unas cuantas instrucciones. Se puede utilizar el julios dentro de java?? sabes si funciona en ubuntu??

Ya muchas gracias

34. meXicano - 19 marzo, 2011

Muy buen post, sólo cuida la ortografía: se escribe «meXicano»

ubanov - 5 abril, 2011

Según la Real Academia de la Lengua (de España), mejicano también se puede decir: http://buscon.rae.es/draeI/SrvltConsulta?TIPO_BUS=3&LEMA=mejicano y es sinónimo de mexicano… las diferentes costumbres de los paises 😛

35. Juan Antonio Breña Moral - 25 marzo, 2011

Buenos días,

estoy empezando a emplear Sphinx 4 y me gustaría saber como emplear el castellano con el. Hasta ahora solo tengo ejemplos en ingles.

Muchas gracias

36. ehu - 4 May, 2011

Hola a todos. Ante todo muchas gracias por este post!!
Y ahora, haber si alguien me puede ayudar, por fa… He hecho en entrenamiento con mi voz y ya tengo mis archivos wav dentro de trunk/train/wav/yourown. Posterior, he ejecutado los comandos que dice ubanov:
cd auto
cat yourown/codetrain.scp >>codetrain.scp
cat yourown/train.scp >>train.scp
./script_auto

Pero me da el siguiente error:

Calculating Fixed Variance
HMM Prototype: proto
Segment Label: None
Num Streams : 1
UpdatingMeans: Yes
Target Direct: hmm0
ERROR [+6310] OpenParmChannel: cannot open Parm File ../train/mfcc/yourown/01.mfc
ERROR [+6313] OpenAsChannel: OpenParmChannel failed
ERROR [+6316] OpenBuffer: OpenAsChannel failed
ERROR [+2050] LoadFile: Config parameters invalid
FATAL ERROR – Terminating program HCompV
grep: hmm0/proto: No existe el fichero ó directorio
wc: hmm0/proto: No existe el fichero ó directorio
expr: argumento no numérico

Y el problema es que no sé cuando se tienen que generar los archivos con extension *mfc dentro de la carpeta trunk/train/mfcc/yourown. De hecho esta carpeta esta vacia y supongo que el error lo da por eso.

He descargado todo desde http://dl.dropbox.com/u/7564477/ReconocimientoVoz_Trunk.tar_small.bz2 pero dentro de la carpeta train solo tengo la carpeta mfcc y otros archivos *txt. He creado yo la carpeta wav dentro de train para guardar ahi mis grabaciones. ¿Alguien sabe que estoy haciendo mal?

37. Fernando - 30 May, 2011

yo tambien me añado al compañero talvez alguno podria poner algun ejemplo paso a paso de como hacer para generar el modelo para español y como configurarlo para usarlo con el sphinx 4 gracias.. 😀

38. Hablar Es Gratis - 3 julio, 2011

Ignoro tú posible actividad en el tema a día de hoy. Estoy buscando como hacer una implementación con python de algún sistema de reconocimiento de voz… A día de hoy no se si es mejor Julius o Sphinx (ni que versión de este), aunque me interesa el sistema en vivo (live) y he leído por ahí que para un sistema «en directo» es mejor sphinx… El tema es que sería interesante (ya que lo que espero hacer es implementarlo con dómotica) que el sistema pudiese aprender aprovechando los ratos en los que leo cosas de la pantalla, como textos de internet… Mismamente también podría ser tú artículo.. ¿Por qué no?

No he econtrado nada al respecto y no soy un gran ingeniero como para poder desenvolverme con soltura… Quería saber que opinas y si sabes algo al respecto sobre sistemas de aprendizaje activo…

Muchas gracias con lo que sea, aunque veo que ultimamente no estas muy activo en este tema 😉

Un Saludo y suerte con ese robot!

ubanov - 7 julio, 2011

Acabe un poco desesperado de lo lejos que estaba el reconocimiento en castellano de funcionar y lo abandone…. Sorry por no poderte ayudar.

A dia de hoy no se mas de lo que pone en la entrada…. Se me ha olvidado todo ya….

Estoy un poco vago ultimamente y tampoco he hecho mucho del robot…

39. ZydRick - 8 julio, 2011

jajaja esta bien parar de vez en cuando y vaguear… O cambiar de actividad…

Sí yo creo que al final tirare más para mac con la esperanza de que salga un dragon dictation en castellano o que el nuevo Lion traiga algo de reconocimiento de voz (se supone que iba a traer algo ya en castellano… pero para controlar el os).

Veo que actualmente para linux ni de pago ni gratis… Y quizá (que no lo se) lo único que exista con alguna posibilidad curiosamente pueda ser de microsoft.

Por cierto no conseguí echarlo a funcionar en condiciones… Creo que soy algo chapuzas… La documentación me parece algo dudosa… Deja muchas lagunas (al menos a mi…).

Bueno, espero que todo vaya bien y muchas gracias 🙂

ubanov - 13 julio, 2011

hola,

Para Linux SI existen soluciones de reconocimiento de voz de pago, pero van a mercado caro/alto… recuerdo que había unos catalanes que hacían reconocimiento de voz orientado a Asterisk (no recuerdo el nombre, pero si tienes interes lo puedo buscar).

Otro «player» interesante será google… google si tiene un reconocimiento de voz en castellano bueno (tanto en iphone, como en android te permiten hacer búsquedas por voz, y funciona bastante bien)… quizás lo incluyan en Chrome OS y pueda ser interesante… o quizás alguien así lo «transporte» a linux…..

Pero a día de hoy… 😦

Un saludo.

ZydRick - 17 julio, 2011

Pues si sabes que lo tienes por algún lado y por donde buscar sería de agradecer. Incluso los sistemas de pago caras me interesan, quiero ver que opciones tengo y si merecen la pena.

De todas maneras si consigo entrenar el julius aunque solo funcione con mi voz y quizás algunos audiolibros de los que tambien tenga el texto…

Por cierto sabes si se puede hacer que además vaya aprendiendo el sistema, es decir que sea un sistema activo…

En cuanto a lo de google no conseguí que funcionase, al menos en español no y tendría que recortar el audio cada 10 segundos, quitar los silencios y mandarlo. Y no quiero que dependa de internet.

Bueno ubanov, muchas gracias por contestar.

Un Saludo!

40. ZydRick - 6 agosto, 2011

Ubanov, como generaste el lexicón? Por que 70 y muchas mil palabras a mano… Hacer la transcripción fonética es inviable… Y estoy haciendo algo en PHP pero es algo más complicado de lo que parece, buscar la tónica para poner vocal doble y todo eso…

Es que hay lexicones más actualizados con bastantes miles más de palabras… ya vamos por casi 90 mil en castellano.

Un Saludo.

41. Rosa Cuartas (@AkiaraK) - 13 noviembre, 2011

no existirá una forma realmente sencilla de acceder a un software de dictado en ubuntu?… soy nueva en ubuntu y siquiera podia decir que manejo bien apt-get…solo me manejo con el «centro de software de Ubuntu» y si algo synaptic..y ni hablar de comandos especificos…. heeeelp please

ubanov - 15 noviembre, 2011

No existe software de dictado gratuitos que funcionen en castellano para Linux…. quizás en unos años se consiga algo, pero hasta entonces….

42. pericomart - 12 enero, 2012

Hola Ivan.
Navegando he acabado en tu interesante artículo.

Por divertimento quiero hacer una aplicación para trabajar con el reconocimiento de la voz. Que sea multiplataforma y dados mis limitados conocimientos en programación. ¿Qué lenguaje me aconsejas?.

Muchisimas gracias!!!

43. Joenco - 3 marzo, 2012

Hola, excelente post, aunque me quedan algunas dudas, es posible que puedas decir como es que se hace la instalación de julios y htk? disculpa, pero no entendi como hacerlo desde la página, otra cosa, se puede hacer que el reconocimiento lo realice para el escritorio? muchas gracias y éxitos.

ubanov - 8 marzo, 2012

me temo que todavía está muy lejos de poderse hacer reconocimiento libre… además es un post viejito y lo tengo ya un poco olvidado el cómo se instalaba… sorry 😦

44. Alexadner Ochoa - 28 noviembre, 2012

Excelente trabajo, es algo en lo que he estado pensando desde hae algún tiempo. El rollo es que quiero tener algo como Dragon Naturally Speaking sobre mi ubuntu 12.04LTS. Claro que no sea tan complejo el proceso de instalación y configuración y preferiblemente en castellano. ¿Eso existe, está en los repositorios?¿Qué debo hacer, hay tutoriales? Tal vez , no es tan complejo lo que dices en el artículo. Sería bueno disponer de un tutorial, un paso a paso.
Mil Gracias, Ochoa

ubanov - 19 diciembre, 2012

estoy un poco desencantado con el reconocimiento de voz en linux y lo tengo un poco abandonado, con lo que ya no se donde estará ni cómo… sorry

45. Alfonso de Cala (@alfonsoem) - 18 febrero, 2013

A los que os interesa ayudar en el reconocimiento de voz en castellano, os invito a echar una ojeada a la documentación del robot Qbo.

Es un robot que habla y entiende, hecho con software libre.

http://openqbo.org/wiki/doku.php?id=es:speech_recognition:creating_acustic_model

46. hiddenotebook - 3 septiembre, 2016

Gracias me has aclarado muchas dudas compañero de momento solo he probado el ejemplo en python de voxforge para el reproductor de musica y funciona perfecto. Me ha gustado y me encantaria ir un poco mas lejos y entrenar un modelo en español para mi robot. Si tienes mas info y puedes compartir sería de gran ayuda. Buen articulo gracias.


Deja un comentario