Tutorial Raspberry Pi - Texto a voz con Twitter y Google Translate

¡Hola! Bueno, al tratar de hacer mejor mi aplicación del uso del  uso de Twitter con Python en nuestra Raspberry Pi , descubrí que es realmente sencillo pasar de texto a voz gracias al uso del Traductor de Google, así que les explicaré cómo hacerlo y cómo implementarlo con Twitter para que la Raspberry Pi les lea sus Tweets.

Texto a voz desde terminal

Para esto tendremos que tener instalado el mplayer para la reproducción de sonido. En la terminal ponemos lo siguiente:

sudo apt-get update sudo apt-get upgrade sudo apt-get install mplayerNota: Siempre antes de instalar cualquier cosa es conveniente actualizar el sistema para que se nos descargue la versión más reciente del programa que vamos a instalar. Debido a esto, antes de la instalación puse los comandos para actualizar.

Bueno, para convertir a voz, basta con hacer un script bash, ya sea en consola o con cualquier editor de texto. Le pueden poner el nombre que deseen con terminación ".sh" . Este archivo contendrá el siguiente código:

#!/bin/bash say() { local IFS=+;/usr/bin/mplayer -ao alsa -really-quiet -noconsolecontrols "http://translate.google.com/translate_tts?tl=es&q=$*"; } say $*

Está para texto en español. Si deseas cambiarlo a inglés o a otro idioma, sólo cambia de la linea 2 del código al final  donde dice "tl=es&q=$" por la que gustes. En caso de inglés sería "tl=en&q=$" , francés "tl=fr&q=$". Ademés, si queremos que el español sea de España o de México, basta con cambiar la dirección. Para España "http://translate.google.es/" y para México sería "http://translate.google.com.mx/".

En mi caso se llama "textovoz.sh". Lo que hace este script es que mediante consola pueda ser llamado con unos parámetros de texto, los cuales enviará a la página de Google para obtener el archivo ya en sonido y reproducirlo con mplayer.

Para que funcione tendremos que darle algunos permisos, ejecutando en la terminal:

chmod +x textovoz.shNota: para hacerlo debes de estar posicionado en la misma carpeta que el archivo, y en lugar de textovoz.sh es el nombre que le hayas puesto a tu script bash.

Ahora a probar qué tal funciona. Asegúrate de tener la Raspberry conectada a Internet. Ejecutamos en la terminal lo siguiente:

./textovoz.sh "Hola, ya puedo hablar, gracias"

Se reproduce el sonido mientras nos muestra una pantalla similar a la de arriba.

Texto a Voz en Python

Para python es lo mismo; incluso usaremos el script bash que ya hicimos y, con ayuda de la librería os y la función system podremos ejecutar el script desde Python.

Creamos un archivo Python, con el siguiente código dentro:

import os os.system('./textovoz.sh "Hola, ¿que tal me escucho?"')

Ahora simplemente lo ejecutamos como cualquier otro programa de python en consola. En mi caso lo llamé "puebavoz.py":

python pruebavoz.py

Como ven, es muy sencillo. Lo bueno de poder ejecutarlo desde Python es que pueden incorporarlo a cualquier programa, puesto que podemos sustituir o complementar con el uso de variables. Por ejemplo:

import os x="Hola, " y="¿que tal me escucho?" os.system('./textovoz.sh '+x+y)

Limitaciones

Como siempre, la principal limitación es nuestra creatividad y empeño. Sin embargo, tiene otras pocas:

  1. No acepta más de 100 caracteres para traducir.
  2. La traducción y reproducción tiene algo de latencia.
  3. Consume unos recursos de procesamiento considerables.
  4. Tiene algunos problemas con acentos y otros caracteres (",',´,#).

Aplicación

Yo le veo mucho futuro a esta sencilla aplicación a notificaciones en domotica y, espero que se animen a probar y a hacer experimentos con esta función de la Raspberry Pi. Por el momento, para motivarlos les dejo una pequeña aplicación que te lea los Tweets.

Para poder ejecutarlo, tendrás que haber seguido mi anterior tutorial de TWEEPY con el fin de obtener tus claves de aplicación de Twitter. Tendrás que crear un archivo Python y sustituir en él tus claves. Este es el código que llevará:

#!/usr/bin/env python #-*- coding: utf-8 -*- import tweepy import os #Coloca dentro de las comillas tus claves... CONSUMER_KEY = 'XXXXXXXXXXXXXXXXXXXXX' CONSUMER_SECRET = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx' ACCESS_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' ACCESS_SECRET = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' #En esta parte nos identifica para poder realizar operaciones auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) auth.set_access_token(ACCESS_KEY, ACCESS_SECRET) #funcion para quitar los hipervinculos def vinculos (cadena): j=0 textos='' while j<len(cadena) and cadena[j:j+4]!='http': textos = textos + cadena[j] j+=1 return textos #Saludo os.system('./textovoz.sh "HOLA, estos son los ultimos 5 twits "') #Inicio del Programa x = tweepy.API(auth) for tweets in x.home_timeline(count=5): textox=tweets.text #quitamos ciertos caracteres del Tweet para que no nos den error textox=textox.replace("'"," ",2) textox=textox.replace('"',' ',2) textox=textox.replace('#',' ',5) texto=vinculos(textox) texto=texto.encode('utf-8') #Nos dice de que usuario es el Tweet os.system('./textovoz.sh '+ tweets.user.screen_name) #Si el Tweet tiene mas de 100 caracteres los divide en los que sean necesarios y manda llamar de uno en uno if (len(tweets.text)<100): os.system('./textovoz.sh '+ texto) else: i=0 while i<=len(texto): a=texto[i:i+100] os.system('./textovoz.sh '+ a) i=i+100 #Despedida os.system('./textovoz.sh "Hasta pronto. y, perdoon por la mala pronunciacioon"')Nota: cambia "./textovoz.sh" por el nombre que le hayas puesto a tu script. Todo debe de estar dentro de la mima carpeta.

Lo guardas y lo ejecutas como cualquier programa de Python.

sudo python tweetvoz.py

Actualmente no están validados los acentos, así es que dirá cosas extrañas cuando haya un acento. Estoy trabajando en ello, en cuanto lo tenga lo posteo.

Bueno, eso es todo. Es un programa básico. Sin embargo, para cualquier duda pregunten. Gracias por su atención y suerte en sus proyectos.

¡Saludos desde México!