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

Tutorial para aprender cómo hacer con Google Translate y Twitter para que la Raspberry Pi les lea sus Tweets.

Consigue gratis tu cuenta

Crea una API REST con Node.js y MongoDB

En este curso vas a aprender a crear una API REST con Node.js y MongoDB, además de crear un entorno de desarrollo con Docker y Docker Compose.

Comenzar ahora

tweetsvoz

¡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 mplayer
Nota: 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.sh
Nota: 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"

voz1

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!


¿Quieres seguir aprendiendo?