Reconocmiento de voz en asterisk con Lumenvox

Hoy toca ración de reconocimiento de voz :). Hace tiempo compré una licencia de evaluación (50$) para hacer pruebillas e impresionar al personal. En su día solo tenían el modelo de voz Inglés Americano, y para reconocer palabras en español tenías que hablar como un expresidente del gobierno ;). Pero han estado trabajando en ello, y ya tienen modelos específicos para español de Mejico y de Colombia.

Os voy a poner una ejemplo muy simple: el dialplan, la gramática, y un softphone web para que lo probéis de viva voz.

Paso 1: Instalar Lumenvox

Como he comentado antes, es un programa de pago,a sí que tendréis que adquirir al menos el Speech Starter Kit. La instalación y validación es algo cansina, pero que se le va a hacer. Seguid al pie de la letra las instrucciones que os llegarán por email. Básicamente se reduce a:

  1. Descargar e instalar el License Server.
  2. Generar el fichero de instalación (Info.bts), enviarlo a Lumenvox mediante el formulario web, y descargar el fichero con la licencia (License.bts). Estará asociado a la MAC de la tarjeta de red.
  3. Descargar e instalar el SRE (Speech Recognition Engine)
  4. Instalar el “Asterisk Connector Bridge”, que enlaza los servicios de voz de asterisk con el SRE de lumenvox.

Paso 2: Gramática

El sistema tiene que saber las frases que queremos detectar. Ejemplo:

root $frase
$sujeto = Pedro | Juan
$verbo = programa | estudia | sueña
$predicado = [ en ] C | PHP | AEL
$frase = $sujeto $verbo $predicado

Esta gramática reconocería frases como “Juan sueña en PHP”, “Pedro estudia C”, etc

Aquí es donde gana importancia el modelo de voz. Si usasemos el model Inglés, en vez de Pedro, habría que pronunciar algo como “Pedrou” ;), para que el sistema lo reconociese mejor.

Las gramáticas pueden ser muy complejas. Hay un ejemplo en la web de Lumenvox que simula la atención al cliente de una Pizzería, donde puedes realizar un pedido hablándole a la máquina (que miedo), aunque para el ejemplo que voy a mostraros, simplemente reconocerá una serie de nombres.

Paso 3: El Dialplan

Asterisk 1.4 ya incorpora funciones de reconocmiento de voz. Solo necesita de un motor que haga el reconocimiento y devuelva la información. Ejemplo:

exten => s,1,Answer
exten => s,n,Wait(1)
exten => s,n,SpeechCreate
exten => s,n,SpeechActivateGrammar(migramatica)
exten => s,n,SpeechStart
exten => s,n(otravez),SpeechBackground(beep)
exten => s,n,NoOp(${SPEECH_TEXT(0)})
exten => s,n,Goto(otravez)

Paso 4: El Ejemplo

Será un directorio de blogs con temática voip ;). El sistema reconocerá una serie de nombres, y contestará con la dirección del blog/página web. Para finalizar, se podrá decir “hasta luego” o “ya es suficiente”. Después de cada reconocimiento, se escuchará la calidad del resultado (de 0 a 1000).

No se por qué, pero he tenido que utilizar fonemas para que me reconociese bien todos los nombres. Debería bastar con el nombre directamente, pero bueno. Con frases más largas funciona mejor.

Descarga la gramática asteriskes.gram

Prueba el sistema en vivo y en directo: Abrir jiaxclient (a ver si no se satura la ADSL)

También podeis llamar desde asterisk:

exten => 123,1,Dial(IAX2/jiaxclient@voip.julianmenendez.es/demo)

Escrito por julianjm el 19/10/2007. |
Tags: , , , ,

10 Comments »

  1. Funciona perfecto.

    Por cierto, ¿de consumo de procesador cómo anda?

    Comment by Elio Rojano SPAIN Windows XP Mozilla Firefox 2.0.0.7 — 19 October 2007 @ 16:37

  2. Pues poca cosa… con vmstat se ve que de media consume un 5%, y a la hora del reconocimiento un pequeño pico del 20%.

    La máquina es un Celeron a 2.8 y 256Mb de RAM.

    Comment by julianjm SPAIN Windows XP Mozilla Firefox 2.0.0.7 — 19 October 2007 @ 17:05

  3. Muy chulo y funciona muy bien.

    PD: ¿sólo permites G729 en la llamada IAX?

    Comment by Iñaki Baz SPAIN Ubuntu Linux Konqueror 3.5 — 19 October 2007 @ 19:27

  4. Amda! Si salgo en los fonemas… A ver si puedo probarlo, tiene muy buena pinta

    Comment by alberto sagredo SPAIN Mac OS X Safari 419.3 — 19 October 2007 @ 21:05

  5. De hecho, solo permito gsm, ulaw y alaw, en este orden. ;)

    Además jiaxclient solo admite estos codecs y speex.

    Comment by julianjm SPAIN Ubuntu Linux Mozilla Firefox 2.0.0.6 — 19 October 2007 @ 21:26

  6. Ah, es que llamo directamente por Asterisk vía IAX y veo esto:

    CLI> dial 600
    — Executing [600@default:1] Dial(”OSS/dsp”, “IAX2/jiaxclient@voip.julianmenendez.es/demo”) in new stack
    — Called jiaxclient@voip.julianmenendez.es/demo
    — Call accepted by 88.2.190.107 (format g729)
    — Format for call is g729
    — IAX2/88.2.190.107:4569-3 answered OSS/dsp

    Me responde con el G729 de todas todas, de hecho si deshabilito el G729 en IAX no me deja llamar:

    channel.c:718 ast_best_codec: Don’t know any of 0xe000 formats

    Comment by Iñaki Baz SPAIN Ubuntu Linux Konqueror 3.5 — 19 October 2007 @ 21:33

  7. Jeje, pues va a ser que sí… tenía en un include un disallow=all y allow g729 gsm alaw y ulaw.

    Aún así, aún desactivando g729, el resto de codecs sí debería dejarte usarlos.

    CLI> iax2 show peer jiaxclient
    * Name : jiaxclient
    […]
    Codecs : 0xe10e (gsm|ulaw|alaw|g729)
    Codec Order : (g729|gsm|alaw|ulaw)

    Comment by julianjm SPAIN Ubuntu Linux Mozilla Firefox 2.0.0.6 — 19 October 2007 @ 22:19

  8. Nada, ni caso, me había equivocado en el iax.conf.
    Fallo mío.

    Comment by Iñaki Baz SPAIN Ubuntu Linux Konqueror 3.5 — 20 October 2007 @ 7:15

  9. Muy wapo el ejemplo tio! Yo lo probé bastante y con gramáticas normalitas no tiraba del todo porque el motor de castellano es mexicano o colombiano, pero nunca probé a hacer una BNF.

    Muy molón el post!! xDDDD

    Comment by Saúl Ibarra SPAIN Debian GNU/Linux Mozilla Firefox 2.0.0.6 — 21 October 2007 @ 7:52

  10. […] Sin embargo, en muchos casos, los cuelgues de cualquier ADSL son curiosos, no implican que la comunicación vía telefónica esté impedida. Eso significa que tener acceso a un enrutador no es posible, pero tener acceso a la centralita sí: programemos la centralita para que reinicie el enrutador bajo una señal concreta (o enviemos un SMS para que se ejecute en el servidor de mail un comando que haga que se reinicie). En particular, Julián nos ayuda con el tema de reconocimiento de voz para los que tengáis una centralita Asterisk. […]

    Pingback by Disponibilidad del enrutador » Innova Desarrollos informáticos SPAIN WordPress 2.5.1 — 28 April 2008 @ 17:28

RSS feed for comments on this post. | TrackBack URI

XHTML ( Puedes usar estas etiquetas): <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong> .