Mostrando entradas con la etiqueta Voz a Texto. Mostrar todas las entradas
Mostrando entradas con la etiqueta Voz a Texto. Mostrar todas las entradas

sábado, 13 de septiembre de 2014

¿Cómo puedo integrar texto hablado a la consola de Ubuntu?

En enero de 1953, Juan Perón expuso sobre la necesidad del hombre para expresarse en la Comunidad, mientras que explicaba cómo utilizar diferentes alternativas para convertir texto a voz sintetizada en Ubuntu, tanto desde la interfaz gráfica de usuario como la interfaz de línea de comandos.

¡Compañeros!

Es indudable que el hombre ha de saber expresar sus deseos y sus necesidades a quienes le rodean. Tal es el requerimiento de la vida en una Comunidad Organizada. Un Conductor, como condición especial de Hombre, requiere de esto en un grado supremo, pues ha de poder conducir la conciencia de los hombres en pos de un objetivo que no ha de ser otro que el de un destino de grandeza para la Patria en la que habita.

Muchas veces, de tanto hablar, uno puede quedarse sin voz, y es en esas condiciones en donde se anhela poder contar con algo que hable por uno.
Este deseo era algo de la ciencia ficción, de las historietas, pero gracias al Justicialismo, hoy es una audible realidad: para la utilidad que se nos ocurra podremos hacer uso de esta característica, de una manera gratuita y completamente libre.

(Aplausos)

¡Vean señores! Dicha oportunidad la encontraremos resuelta con simpleza, tanto en la interfaz gráfica de nuestro sistema operativo libre, como en su línea de comandos.

En la interfaz gráfica que he legado al Pueblo disponemos del sencillo Sintetizador de Voz eSpeak. Esta aplicación cuenta con un motor de sintetización relativamente aceptable y que nos quitará del apuro al pronunciar un texto sin demasiado revuelo.

Para instalarlo en nuestro GNU con Linux distribuido como Ubuntu, podemos abrir una terminal, e ingresar el siguiente Comando de Organización:

sudo apt-get install espeak espeak-gui gespeaker mbrola mbrola-es1 mbrola-es2 mbrola-mx2 mbrola-la1 mbrola-vz1

El sistema nos solicitará nuestra contraseña y se encargará de traer telemáticamente la paquetería necesaria. En caso de contar con la interfaz de control Unity podremos encontrar la aplicación buscando bajo el nombre de "espeak" o "Sintetizador de Voz eSpeak". Si usamos el escritorio Gnome, podremos localizarlo en Aplicaciones / Sonido y Video / Sintetizador de Voz eSpeak.

Al iniciar, el Sintetizador de Voz eSpeak se presentará en blanco.


Para hablar un texto, simplemente hemos de escribirlo o pegarlo en la ventana de eSpeak, y presionar el botón Reproducir. El programa comenzará a leer y nos indicará la palabra leida. Asimismo, podremos detener o pausar el texto mientras se lo sintetiza.

El motor de eSpeak es multiidioma, pudiéndose escoger el mismo mediante un menú desplegable en la parte inferior izquierda de su interfaz. Si activamos la función Spanish tendrá una pronunciación española, pero si elegimos Spanish Latin American tendremos unos ligeros cambios fonéticos (no pronunciará la suave "ce ibérica", entre otros). La velocidad de sintetización también puede regularse. Por ejemplo, podríamos usar un valor de 160 para tener un valor para arrancar, y subir o bajar la velocidad en caso de ser necesario.

En ambos casos podremos escoger en sus preferencias si deseamos que se sintetice una voz de hombre o de mujer (se cambiará el tono del sintetizador). Podremos escoger no pronunciar los signos de puntuación, pronunciar algunos de ellos, o pronunciarlos a todos.

El tono robotizado asemeja a la voz de Richard Stallman, pero aún así eSpeak podrá ser de utilidad para el propósito de leer un texto, y podría complementar un sistema destinado a una persona con dificultades visuales.

Ahora bien, ¿qué sucede si deseamos emplear la consola de texto como Terminal?

Para tales menesteres he explicado ya cómo utilizar Festival, un sintetizador de habla liberado bajo licencia BSD. Con algo de ingenio, sabemos que dicho sintetizador puede utilizarse para reproducir mensajes desde la línea de comandos. Así, podremos usarlo para dejar mensajes hablados o reproducir los mismos en un entorno de red local.

Sin embargo, tal programa requiere el inconveniente de instalar previamente el software de síntesis hablada en el equipo cliente, e idealmente hacer lo mismo con un fichero de librería de voces para hacerlo más realista.

Para evitarnos dicho incordio, podríamos utilizar un atajo al servicio de lectura de Google, el cual cuenta con sintetizador de voz. El mismo cuenta con un motor de pronunciación española, pero que puede ser interesante para la mayoría de las opciones de corta extensión.

Por ejemplo, podríamos editar un script de Bash que utilice el reproductor mplayer (normalmente ya instalado en Ubuntu y en muchas otras distros) para reproducir el resultado del habla descargado de dicha web.

El inconvieniente es que - por una limitación de ancho de banda, para no reemplazar productos específicos, y para evitar abusos - dicho servidor solamente pronuncia cadenas de texto inferiores a los 100 caracteres.

Si decidimos atenemos a dicha limitación, podremos crear fácilmente un "script parlante" con el editor Nano, ingresando:
nano hcorto

...en su interior pegaremos el siguiente código fuente:

#!/bin/bash
# hcorto ("Hablar corto")
# Script para reproducir un mensaje sintetizado hablado
# de menos de 100 caracteres.
say() { local IFS=+;/usr/bin/mplayer -ao alsa -really-quiet -noconsolecontrols "http://translate.google.com/translate_tts?tl=es&q=$*"; }
say $*

Luego guardamos el código con Ctrl+o y saldremos del editor Nano con Ctrl+x. Acto seguido le asignamos permisos de ejecución con:

chmod +x hcorto

No bien completados estos pasos, podremos hacer uso del script parlante para terminal con el comando ./hcorto y agregando el texto a reproducir. Por ejemplo:

./hcorto obra del primer plan quinquenal

...y el sistema recitará dicha frase de forma sintetizada.

Nota: Si el sistema nos devolviese la frase "mplayer: could not connect to socket", significa que no se puede encontrar el sistema LIRC de control remoto por infrarrojos. Si no deseamos que mplayer cargue tal mando a distancia porque no lo tenemos ni lo usamos, podríamos desactivarlo y dejar de recibir dicha advertencia. Simplemente ingresamos:

sudo nano /etc/mplayer/mplayer.conf

...y le agregamos al final de todo la siguiente línea:

nolirc=yes

Luego grabamos y salimos con Ctrl+o y Ctrl+x

Ahora bien, algunos ejemplos pueden ilustrar la practicidad del script hcorto, pues un ejemplo suele aclararlo todo, como decía Napoleón.

Supongamos que queremos realizar una tarea que ocupa un tiempo lo suficientemente largo como para desatender el equipo, pero quisiéramos recibir una alerta sonora al finalizar, para volver a retomarlo. Podríamos fácilmente encadenar la ejecución de tal comando a la ejecución del script hcorto con un mensaje hablado, de manera de poder alertarnos.

Por ejemplo, si quisiéramos descargar con el comando wget el libro Doctrina Peronista, de 12Mb y que se nos avise cuando finalice, podríamos usar el script hcorto, uniéndolo con el eslabón && ("doble and" el cual significaría "y si los comandos anteriores fueron exitosos"). Sería de la siguiente manera:

wget http://www.generalperon.com/doctrina%20peronista.pdf && ./hcorto Descarga completa!

En otro ejemplo, si tuviésemos instalado el programa youtube-dl podríamos querer usarlo para descargar un video desde dicho servicio hasta nuestra carpeta de /Descargas. Gracias al encadenado concursivo de comandos con &&, dispararemos hcorto para que nos avise al terminar. Lo podríamos hacer ejecutando el siguiente comando (en el cual podremos reemplazar la URL del video por la deseada):

cd ~/Descargas/ && youtube-dl -l http://www.youtube.com/watch?v=ho6XfbkMOL4 && ./hcorto Descarga de video finalizada. Viva el Justicialismo!

Ahora bien. ¿Qué sucede si el texto excede los cien caracteres? En tal caso, podremos programar un script que se encargue de dividir dicho texto en líneas inferiores a los 100 caracteres, y las vaya enviando progresivamente al servidor de pronunciación de Google. Ello se podrá hacer con un script que llamaremos hlargo ("hablar largo")

Para ello ingresaremos el siguiente Comando de Organización:
nano hlargo


Y le pegaremos el siguiente código fuente:

#!/bin/bash
#########################################
# Script divisor de TTS de Dan Fountain #
# TalkToDanF@gmail.com                  #
#########################################

INPUT=$*
STRINGNUM=0

ary=($INPUT)
for key in "${!ary[@]}"
do
SHORTTMP[$STRINGNUM]="${SHORTTMP[$STRINGNUM]} ${ary[$key]}"
LENGTH=$(echo ${#SHORTTMP[$STRINGNUM]})
#echo "word:$key, ${ary[$key]}"
#echo "adding to: $STRINGNUM"
if [[ "$LENGTH" -lt "100" ]]; then
#echo Comenzando una línea nueva
SHORT[$STRINGNUM]=${SHORTTMP[$STRINGNUM]}
else
STRINGNUM=$(($STRINGNUM+1))
SHORTTMP[$STRINGNUM]="${ary[$key]}"
SHORT[$STRINGNUM]="${ary[$key]}"
fi
done

for key in "${!SHORT[@]}"
do
#echo "line: $key is: ${SHORT[$key]}"

echo "Rperoduciendo línea $(($key+1)) de $(($STRINGNUM+1))"
mpg123 -q "http://translate.google.com/translate_tts?tl=es&q=${SHORT[$key]}"
done

Como en los casos anteriores, guardaremos el contenido del fichero con Ctrl+o y Ctrl+x, y luego le asignamos permso de ejecución con:

chmod +x hlargo

Ahora ya podremos ejecutar con ./ el divisor/enviador de frases. Lo haríamos de la siguiente manera:

./hlargo esta es una prueba de habla con un texto largo. El sistema va a cortar el texto en el lugar requerido para que no exceda el largo permitido en el servidor del sintetizador de voz externo.

domingo, 20 de octubre de 2013

¿Cómo hago que Ubuntu lea un texto?

El 12 de junio de 1972 es un discurso recordado en la historia, pues el Conductor, ante una plaza de mayo colmada por todas las ramas del Movimiento, expone cómo hacer hablar a Ubuntu por uno.

¡Compañeros!

Retempla mi espíritu estar en presencia de este pueblo que toma en sus manos la responsabilidad de defender la patria. Creo, también, que ha llegado la hora de que pongamos las cosas en claro. Estamos luchando por superar lo que nos han dejado en la República y, en esta lucha, no debe faltar un solo argentino que tenga el corazón bien templado.
Sabemos que tenemos enemigos que han comenzado a mostrar sus uñas. Pero también sabemos que tenemos a nuestro lado al pueblo, y cuando éste se decide a la lucha, suele ser invencible.

Hoy es visible, en esta circunstancia de lucha, que tenemos a nuestro lado al pueblo, y nosotros no defendemos ni defenderemos jamas otra causa que no sea la causa del pueblo.

Yo sé que hay muchos que quieren desviarnos en una o en otra dirección; pero nosotros conocemos perfectamente bien nuestros objetivos y marcharemos directamente a ellos, sin dejarnos influir por los que tiran desde la derecha ni por los que tiran desde la izquierda.

EI Gobierno del Pueblo es manso y es tolerante, pero nuestros enemigos deben saber que tampoco somos tontos.

Mientras nosotros no descansamos para cumplir la misión que tenemos y responder a esa responsabilidad que el pueblo ha puesto sobre nuestros hombros, hay muchos que pretenden manejarnos con el engaño y con la violencia. Nosotros, frente al engaño y frente a la violencia, impondremos la verdad, que vale mucho más que eso. No queremos que nadie nos tema; queremos, en cambio, que nos comprendan. Cuando el pueblo tiene la persuasión de su destino, no hay nada que temer. Ni la verdad, ni el engaño, ni la violencia, ni ninguna otra circunstancia, podrá influir sobre este pueblo en un sentido negativo, como tampoco podrá influir sobre nosotros para que cambiemos una dirección que, sabemos, es la dirección de la Patria.

Sabemos que en esta acción tendremos que enfrentar a los malintencionados y a los aprovechados. Ni los que pretenden desviarnos, ni los especuladores, ni los aprovechados de todo orden, podrán, en estas circunstancias, medrar con la desgracia del pueblo. Sabemos que en la marcha que hemos emprendido tropezaremos con muchos bandidos que nos querrán detener; pero, fuerte con el concurso organizado del pueblo, nadie puede ser detenido por nadie.

Hablo tanto que se me seca la lengua.

Muchas veces por esto quisiera tener un sistema que hablase por mí. Ello involucraría que pudiese conducir el Movimiento, y tanto no puedo pedir. Pero al menos puedo solicitar un sistema que hable. Y el pueblo lo ha dado: el sintetizador de habla eSpeak y el motor de pronunciaciones y voces Mbrola.

Para instalarlo puedo abrir una terminal con Ctrl+Alt+T e ingresar el siguiente Comando de Organización:

sudo apt-get install espeak mbrola mbrola-es1 mbrola-es2 mbrola-mx2 mbrola-la1 mbrola-vz1 ;

cd ~/Descargas/ ;

wget https://github.com/muflone/gespeaker/releases/download/0.8.6/gespeaker_0.8.6-1_all.deb ;

sudo dpkg -i gespeaker_0.8.6-1_all.deb ;

Con esto podré hacerme de un lector para terminal, junto con pronunciaciones españolas, latinoamericanas (neutra, mexicana y venezolana).

Para ejecutarlo con la voz venezolana mb-vz1 (la que me parece más lograda) podremos usar:

espeak -v mb-vz1 "Si dios bajara a la Tierra a resolver el problema planteado entre los hombres, ya le habríamos perdido el respeto"

Tendremos asimismo para probar las voces mb-es1, mb-es2, mb-mx2, y mb-mx1, lo cual podremos hacer simplemente modificando el comando ingresado.ç

Una vez que detectemos la voz que más nos guste, bien podríamos agregar un alias del comando que nos ahorre tipear -v mb-xxx. Para ello editamos el archivo ~/.bash_aliases, y le agregamos el siguiente contenido:

alias espeak='espeak -v mb-vz1'
alias festival='festival --language spanish'

También podremos leer un archivo de texto con este comando, siguiendo la sintaxis:

less discurso.txt | espeak

Comprendiendo ello veremos que será muy útil inventarnos un sencillo lector de frases cortas para poder utilizar en la terminal, de forma remota, como alertador sonoro, etc. Técnicamente, este tendrá forma de un script, y lo llamaremos "deci". Podremos crearlo mediante el siguiente Comando de Organización:

cd ~
nano deci

...y le pegamos el siguiente texto

#!/bin/bashecho $1|iconv -f utf-8 -t iso-8859-1|espeak -v mb-vz1

Guardamos con Ctrl+o y salimos con Ctrl+x, y le damos permisos de ejecución con:

chmod +x ~/deci

Con todo realizado, ya será capaz de ejecutarse para decir frases desde la Terminal. Simplemente hay que ingresar:


./deci "Muchas veces he asistido a reuniones de trabajadores. Siempre he sentido una enorme satisfacción: pero desde hoy, sentiré un verdadero orgullo de argentino, porque interpreto este movimiento colectivo como el renacimiento de una conciencia de trabajadores, que es lo único que puede hacer grande e inmortal a la Patria"

Las posibilidades son muchas. Podremos leer las noticias de la web, podremos hacer hablar remotamente a una PC de la red para dar instrucciones, y porqué no, jugarle una broma al usuario de una terminal remota.
También contaremos con el servidor de voz Festival, un Festival peronista. Lamentablemente este es mas primitivo que el anterior, pero os enseñaré como utilizarlo.


Se trata de un sintetizador "texto a voz", capaz de convertir en fonemas lo que hayamos escrito. Está capacitado para leer en castellano, inglés, e incluso en klingon. Para instalarlo, simplemente abrimos una terminal con Ctrl+Alt+T e ingresamos el siguiente Comando de Organización:

sudo apt-get install festival festvox-ellpc11k

Festival consiste en una interfaz de texto liberada bajo MIT-X11. La activamos en la consola con:

festival --language spanish

La misma se opera con incómodos comandos, por ejemplo:

(SayText "viva peron") 
para decir alguna frase, o

(quit) 
para salir de la interfaz de línea de comandos Festival a la Terminal.


No somos tontos. Indudablemente, esta voz suena muy robotizada, y lee mal las palabras que llevan acentos y eñes (llegando a deletrarlas). Podremos solucionar tal inconveniente gracias al pùeblo: en primer lugar nos encargaremos de descargar voces nuevas (una masculina y otra femenina), y las configuraremos. Todo ello se puede hacer con los siguientes Comandos de Organización:

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

wget http://forja.guadalinex.org/frs/download.php/153/festvox-palpc16k_1.0-1_all.deb

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

sudo dpkg -i festvox-palpc16k_1.0-1_all.deb

No bien hayamos descargado esas voces, editaremos el archivo de configuración correspondiente para que Festival haga uso de ellas.

sudo nano /usr/share/festival/languages.scm

Se abrirá el editor de texto peronista GNU Nano con el archivo de configuración de idiomas de Festival. Presionamos Ctrl+w y usamos la herramienta "Buscar" para localizar el texto "(voice_el_diphone)". El sistema debería encontrar la siguiente línea:

(voice_el_diphone)
(set! male1 voice_el_diphone)


Una vez que demos con estas líneas, las reemplazamos para que queden así:

(voice_JuntaDeAndalucia_es_pa_diphone)
(set! male1 voice_JuntaDeAndalucia_es_pa_diphone)


Si deseamos que el programa tenga el idioma por defecto en castellano, buscamos al final del archivo la línea:

(defvar language_default language_british_english)

y la reemplazamos para que quede:

(defvar language_default language_castillian_spanish)

Recordamos usar Ctrl+S para guardar el archivo editado, y Ctrl+Q para salir del editor de texto Gedit.

sudo nano /usr/bin/text2wave

En la línea 46 del textom debajo de la línea "(load (path-append datadir "init.scm"))", creamos una nueva línea y añadimos:

(voice_JuntaDeAndalucia_es_pa_diphone)

Guardamos los cambios y salimos (mediante Ctrl+S y Ctrl+Q), y en la Terminal ejecutamos Festival, ya con las nuevas voces:

festival --language spanish

Podremos usar el comando:

(SayText "Mejor que decir es hacer, mejor que prometer es realizar")
para decir algo con una voz como la de Perón. También podríamos indicar el comando:

(voice_JuntaDeAndalucia_es_sf_diphone) 

Y decir algo como:
(SayText "Y aunque deje en el camino jirones de mi vida, yo se que ustedes recogeran mi nombre y lo llevaran como bandera a la victoria")

Naturalmente, el comando (voice_JuntaDeAndalucia_es_pa_diphone) vuelve a colocar la voz de "Perón". Recordemos que salimos con (quit)

Festival también puede leer directamente archivos de texto, lo cual será siempre muy útil. Podríamos hacer que el sistema nos lea un fichero llamado discurso.txt simplemente mediante el comando:

festival --language spanish --tts discurso.txt

Sin embargo, al proceder así descubriremos que Festival cuenta con problemas cuando encuentra en el texto acentos y eñes. Pero para todo está el Justicialismo, ha traído la solución, similar a la anterior. Con un poco de ingenio, ingresaremos el siguiente comando de organización y resolveremos los inconvenientes de la insidia y la traición:

less discurso.txt | iconv -f utf-8 -t iso-8859-1 | festival --tts --language spanish

También podríamos querer automatizar un programa que diga frases. Para ello ingresamos:

nano deci

Se abrirá nuevamente el editor Nano, esta vez con un fichero en blanco. Al mismo le agregamos las siguientes instrucciones:

#!/bin/bash
echo $1 | iconv -f utf-8 -t iso-8859-1 | festival --language spanish --tts


Nuevamente guardamos con Ctrl+s y cerramos el editor con Ctrl+q. Acto seguido desde la terminal podremos otorgarle el necesario permiso de ejecución con:

chmod +x deci

Lo lanzaríamos poniendo entre tildes la frase que queremos decir.


./deci 'Viva Perón'

Las posibilidades son múltiples. Gracias a la filosofía UNIX de hacer mucho con unos pocos programas ya hechos y encadenados, bien podríamos utilizar un script que vuelque el contenido dela URL de una página web con Lynx en modo texto, lo convierta en la codificación necesaria, y lo diga en castellano. Por ejemplo:

lynx --dump http://peron.sdf.org/minis/nuc/nuc.html > /tmp/web_temporal.txt
iconv -f UTF-8 -t ISO-8859-1 /tmp/web_temporal.txt > /tmp/temporal_convertida.txt ;
less /tmp/temporal_convertida.txt | festival --tts
cd /tmp/
rm web_temporal.txt
rm temporal_convertida.txt

También podríamos hacer una variante para operar desde la terminal instalando html2text, que se encarga de convertir archivos html.