Diferencia entre revisiones de «TTS y ASR»

De Asterisk Wiki
Ir a la navegación Ir a la búsqueda
Línea 156: Línea 156:
 
Un ejemplo de este Algoritmo, si tenemos [[AGI|PHP-AGI]] en nuestra máquina, dentro del directorio /var/lib/asterisk/agi-bin podemos crear el siguiente script:
 
Un ejemplo de este Algoritmo, si tenemos [[AGI|PHP-AGI]] en nuestra máquina, dentro del directorio /var/lib/asterisk/agi-bin podemos crear el siguiente script:
  
{{Archivo|/var/lib/asterisk/agi-bin|#!/usr/bin/php -q<br><?php<br>require_once(‘phpagi/phpagi.php’);<br>$agi = new AGI();<br>$traduccion = $argv[1];<br>
+
{{Archivo|/var/lib/asterisk/agi-bin|#!/usr/bin/php -q<br><?php<br>require_once(‘phpagi/phpagi.php’);<br>$agi &#61; new AGI();<br>$traduccion &#61; $argv[1];<br>
# Aqui descargamos el fichero Mp3 haciendo pensar a Google que somos un Navegador<br>shell_exec("wget –header='User-Agent:Mozilla/4.0' 'http://translate.google.com/translate_tts?tl=es&q=".$traduccion."' -O /tmp/google-tts.mp3″);<br># Y convertimos el fichero con “lame” a wav que es reconocible por Asterisk<br>shell_exec("sox /tmp/google-tts.mp3 -r 8000 -c 1 -t raw -s /var/lib/asterisk/sounds/google-tts.sln");<br>
+
# Aqui descargamos el fichero Mp3 haciendo pensar a Google que somos un Navegador<br>shell_exec("wget –header&#61;'User-Agent:Mozilla/4.0' 'http://translate.google.com/translate_tts?tl&#61;es&q&#61;".$traduccion."' -O /tmp/google-tts.mp3″);<br># Y convertimos el fichero con “lame” a wav que es reconocible por Asterisk<br>shell_exec("sox /tmp/google-tts.mp3 -r 8000 -c 1 -t raw -s /var/lib/asterisk/sounds/google-tts.sln");<br>
$retString = "Fin de la conversion";<br>$agi->verbose($retString);<br>?>}}
+
$retString &#61; "Fin de la conversion";<br>$agi->verbose($retString);<br>?>}}
  
 
== Referencias ==
 
== Referencias ==

Revisión del 11:23 9 jun 2012

Alert.png To Do
Esta página necesita ser completada.
Puedes revisar todas las páginas por completar en este enlace.


Los sistemas Text-To-Speech (TTS) y Automatic Speech Recognition (ASR) están basados en la idea de crear una relación entre las personas y los ordenadores a través de medios de audio. Podrían considerarse dos los medios de entrada y salida más comunes en un entorno de telefonía más avanzada.

Logo Asterisk

Introducción

Es posible profundizar en la intención de estos conceptos, si tenemos en mente presente, la idea de crear un sistema de Interacción por Voz (IVR).

Partiendo por base que Automatic Speech Recognition, es la traducción de Reconocimiento de Voz Automático, recuerda al concepto que introducir en el sistema una secuencia de audio, que este la procese, y la transforme en un tipo de dato que sea más manejable por el mismo, como un mecanismo de entrada de información. Esta "traducción" suele realizarse con mecanismos bastante complejos, y por regla general suelen ser soluciones muy costosas a nivel económico, dado la complejidad que acarrean.

En contrapartida, Text to Speech, traducción de Texto a Voz, sería justo lo opuesto, pasando de un medio escrito, por regla general, más controlable por los ordenadores hoy en día dado que la mayoría de los entornos informáticos se encuentran basados en este medio, realizar una conversión a Audio, basándose en un sistema de voces pregrabadas, pronunciación y entonación capaz de vocalizar cualquier combinación de letras en forma de palabra, y también considerando otros aspectos más específicos como la fonética y acento de cada tipo de lenguaje. Existen soluciones libres, ya que la complejidad no es tanta, si lo equiparamos a los sistemas ASR, pero es cierto, que en este caso, al requerirse una voz humana real, los costes principalmente recaen sobre esta labor.

Text to Speech

El funcionamiento de los sistemas Text-To-Speech, radica en la idea, de recibir una cadena de Texto, considerar algunas variables adicionales como el idioma (cara a la fonética específica), y reproducir una pista de audio que suene tal y como una persona lo diría, intentando que sea de la forma más natural posible.

Para conseguir esta naturalidad, hay que considerar que aunque grabáramos un sonido para cada letra del abecedario tal como suena, hay algunos idiomas como el inglés que no son "fonéticamente directos", por tanto es necesario utilizar técnicas adicionales, como diccionarios de fonética, múltigrabaciones por cada letras (en función de las posibles variantes), etc. También intervienen los acentos ortográficos, que pueden hacer que varíe la entonación, y esto quiere decir, quizá hacer énfasis en una vocalización, u otros aspectos específicos de la fonética. Podríamos decir, que este, llamémosle, algoritmo, es el sistema que distingue la calidad de los diferentes sistemas de "Texto a Voz", también llamados Synthesis, (Síntesis de Voz).

Estos sistemas ya se utilizaban hace muchos años, de hecho existen registros de Bell Labs casi desde los inicios de la telefonía, aunque realmente la Síntesis de Voz basada en sistemas de Ordenador, surgió a partir de los años 60, y con la proliferación de la "telefonía 2.0" su avance ha sido acelerador hasta niveles bastante sofisticados.

En cuanto a lo que se refiere a TTS en Asterisk existen múltiples sistemas, libres, y con licencia, citamos los más conocidos:

  • Integración Festival, que viene incorporado dentro de Asterisk como un modulo específico
  • Cepstral , TTS Oficial de Digium es el TTS que recomienda Digium al ser Partner con Cepstral LLC
  • Google TTS, es un sistema On-Demand de Google, que realmente no cumple el propósito como tal, sino que originalmente se ofreció como servicio para ofrecer fonética en el sistema de Traducción de Google [1] para Google Chrome

Festival

El sistema Festival TTS fue desarrollado originalmente por Alan W. Black, en la Universidad de Edimburgo, y distribuido con una licencia BSD como un programa Open Source. Prácticamente de los inicios de Asterisk, fue integrado ya que incorporaba las ventajas de un TTS sin coste ninguno, y desde entonces se ha convertido en el TTS de Asterisk por excelencia. Pero en contrapartida, dado que la calidad de los TTS, no tanto radica en sus algoritmos como también en las voces, quizá Festival sea de los menos sofisticados en este ámbito, aunque se han realizado varios intentos, con voces profesionales, la calidad de los resultados todavía deja mucho que desear.

En Asterisk esta basado en un módulo de tipo aplicación específica, app_festival.so como Festival realmente es una integración con Asterisk, los módulos hay que instalarlos aparte.

Instalación

Festival no esta instalado por defecto en nuestro sistema [2], y es muy probable que la aplicación Asterisk tampoco, así que seguramente necesitemos recompilar para introducirlo.

Para lo primero simplemente lanzamos:

# sudo aptitude install festival


Por otro lado, hay que instalar el modulo, dentro del directorio que descargamos las fuentes de Asterisk (posiblemente /usr/src), procedemos a ejecutar make menuselect, se encuentra dentro de Applications -> Extended el módulo en si. Marcandolo, seguimos la guía de instalación de Asterisk de nuevo, para recompilar. Aunque simplemente podemos compilar con

# make


Y luego copiar el modulo que nos interesa (<directorio_fuentes_asterisk/app/app_festival.so) al directorio de módulos por defecto, por ejemplo:

# cp /usr/src/asterisk-src/app/app_festival.so /usr/lib/asterisk/modules/


Y ya supuestamente quedaría cargado:

CLI> module show like app_festival.so
Module Description Use Count
app_festival.so Simple Festival Interface 0
1 modules loaded


Ahora necesitamos voces en Español para Asterisk. Tenemos disponibles dos opciones:

  • Voces para la Junta de Andalucía en la forja de Guadalinex, en este caso son descargables de http://forja.guadalinex.org/frs/?group_id=21
  • Voces "oficiales" para Festival, se pueden descargar de los repositorios de Linux:
# sudo aptitude install festvox-ellpc11k


Para un ejemplo, vamos a descargar las de Silvia:

# wget http://forja.guadalinex.org/frs/download.php/154/festvox-sflpc16k_1.0-1_all.deb


# sudo dpkg -i festvox-sflpc16k_1.0-1_all.deb


Y borramos el fichero de configuracion de festival que crea automaticamente, para poder utilizar mejor, el generico de Festival.

# rm /etc/festival.scm


Hay que considerar que al instalar el paquete DEB con la voz, esta queda automaticamente instalada en la ruta /usr/share/festival/voices/spanish/JuntaDeAndalucia_es_sf_diphone

Ahora necesitamos modificar el archivo de configuracion de Festival, festival.scm por defecto ubicado en /usr/share/festival/ al final del fichero agregamos:

Archivo: /usr/share/festival/festival.scm
(set! voice_default ‘voice_JuntaDeAndalucia_es_sf_diphone)
(define (tts_textasterisk string mode)

(let ((wholeutt (utt.synth (eval (list ‘Utterance ‘Text string)))))
(utt.wave.resample wholeutt 8000)
(utt.wave.rescale wholeutt 5)
(utt.send.wave.client wholeutt)))

(set! server_access_list ‘(“localhost\\.localdomain” “localhost”))


Como parámetros más significativos:

  • voice_default: Es el nombre del paquete de voces que queremos utilizar
  • El resto de los parámetros son específicos de Festival[3]

Así nos permitirá por un lado utilizar la voz de Silvia y por otro lado arrancar el servidor Festival. También necesitamos configurar el servidor Festival, bajamos los ficheros de desarrollo de festival:

# sudo aptitude install festival-dev


Y copiamos el fichero de autoarranque de festival a nuestro /etc/init.d para que arranque automáticamente el servidor cada vez que iniciemos nuestra maquina Asterisk:

# sudo cp /usr/share/doc/festival/examples/festival.init /etc/init.d/festival


# chmod +x /etc/init.d/festival


Antes de arrancar el servidor de Festival para Asterisk, necesitamos añadir una linea en /etc/default/festival:

Archivo: /etc/default/festival
RUN_FESTIVAL = yes


Y ahora si podemos arrancar el servidor Festival para Asterisk con éxito:

# sudo /etc/init.d/festival start


Y para que arranque cada vez que iniciamos el sistema:

# ln -s /etc/init.d/festival /etc/rcS.d/S99festival


Consideración:: La version 1.0-1 de Guadalinex para Pedro parece que esta mal empaquetada. Instala sobre la versión de Silvia (es_sf) en vez de (es_pa):

Se puede resolver de varias formas, una es, bajando las fuentes (Archivos de desarrollo de la voz de Pedro) en el directorio correspondiente /usr/share/festival/voices/spanish/JuntaDeAndalucia_es_pa_diphone

Necesitamos desempaquetar tambien el .deb de Pedro con el comando “ar”:

# ar x festvox-palpc16k_1.0-1_all.deb


Y luego descomprimir data.tar.gz y a través de la estructura de directorios llegar a …/usr/share/festival/voices/spanish/JuntaDeAndalucia_es_pa_diphone/group, cambiamos el nombre al fichero que hay y lo copiamos a un nuevo directorio group dentro de nuestro directorio de Pedro antes creado

# sudo mkdir /usr/share/festival/voices/spanish/JuntaDeAndalucia_es_pa_diphone/group


# sudo mv sflpc16k.group /usr/share/festival/voices/spanish/JuntaDeAndalucia_es_pa_diphone/group/palpc16k.group


Aplicación Festival

La aplicación que ofrece el módulo app_festival, simplemente se encarga de conectar al servidor Festival, lanzar el texto que queremos convertir a voz, y recoger la misma para pasarsela al canal activo.

La sintaxis de esta aplicación es la siguiente: Festival(<texto_a_reproducir>,<teclas_interrupción>)

  • Por un lado como es evidente podemos poner el Texto que queremos reproducir
  • Por otro lado, podemos definir que teclas podría interrumpir la reproducción, si ponemos 'any', cualquier tecla lo haría

Google TTS

Hay que considerar que Google, ofrece un sistema Text-To-Speech, cuando utilizamos su servicio Translate. Aunque Google no ofrezca un API oficial para poder trabajar con esta "aplicación" es posible utilizarla con medios no demasiado ortodoxos a priori, dado que no esta confirmado que su uso por desconocimiento de Google pueda traer repercusiones legales.

A través de la URL, http://translate.google.com/translate_tts?tl=es&q= podemos pasar una linea de texto, y esta creara un fichero de audio, que será reproducida en este caso, utilizando una voz adaptada al idioma Español.

La "sintaxis" de la URL sería: http://translate.google.com/translate_tts?tl=<idioma>&q=<texto_a_reproducir>.

  • El idioma, esta compuesto de dos letras, por el código de idiomas estándar
  • El texto puede introducirse entre comillas y contener varios tipos de carácteres, en codificación ascii

Aplicación AGI

Realmente no podríamos considerarlo una instalación, ni existe una aplicación propia de Asterisk para utilizar este medio, aunque puedan haberse desarrollado aplicaciones no oficiales. Una de las alternativas válidas más interesante sería crear un algoritmo basado en un lenguaje de programación y ejecutarlo gracias a la interfaz AGI

La idea del mismo sería: utilizando al URL antes descrita, hacer creer a Google, que nos conectamos a través de un navegador estándar, y descargarnos el fichero de audio, que será el que reproduzcamos a continuación en nuestro sistema

Para la descarga podemos utilizar el comando:

# {{{1}}}


Y luego convertirlo a un formato fácilmente reproducible por Asterisk, directamente al directorio de sonidos de Asterisk:

# sox /tmp/google-tts.mp3 -r 8000 -c 1 -t raw -s /var/lib/asterisk/sounds/google-tts.sln


Y con aplicaciones como Playback, ya podríamos reproducirlo sin problemas.

Un ejemplo de este Algoritmo, si tenemos PHP-AGI en nuestra máquina, dentro del directorio /var/lib/asterisk/agi-bin podemos crear el siguiente script:

Archivo: /var/lib/asterisk/agi-bin
#!/usr/bin/php -q
<?php
require_once(‘phpagi/phpagi.php’);
$agi = new AGI();
$traduccion = $argv[1];
  1. Aqui descargamos el fichero Mp3 haciendo pensar a Google que somos un Navegador
    shell_exec("wget –header='User-Agent:Mozilla/4.0' 'http://translate.google.com/translate_tts?tl=es&q=".$traduccion."' -O /tmp/google-tts.mp3″);
    # Y convertimos el fichero con “lame” a wav que es reconocible por Asterisk
    shell_exec("sox /tmp/google-tts.mp3 -r 8000 -c 1 -t raw -s /var/lib/asterisk/sounds/google-tts.sln");
$retString = "Fin de la conversion";
$agi->verbose($retString);
?>


Referencias

  1. Google Translate Google Inc.
  2. Instalación Festival Asterisk en 10000 Horas, Manuel Camargo (2011)
  3. Manual de Festival, Alan W. Black, Paul Taylor y Richard Caley 1999

Véase también

Enlaces Externos