Convertir Texto a Voz con gTTS en Python en una Raspberry

Te mostraremos cómo convertir Texto a Voz con gTTS en Python en una Raspberry de forma fácil. Tenemos que descargar e instalar algunas librearías y aplicaciones.

Contenido

Descargar gTTS

pip install gTTS

Tener instalado el reproductor VLC

Normalmente en la Raspberry tendrás instalado el reproductor VLC, se incluye en la distribución del sistema operativo Raspbian, si no es así, puedes instalarlo usando el siguiente comando:

sudo apt install -y vlc

VLC puede ser ejecutado por comandos en la terminal de la siguiente forma:

cvlc --play-and-exit archivo_voz.mp3

Puedes hacer una prueba después de la instalación.

Primera prueba de código

from gtts import gTTS
import os

#decodigo.com

mytext = 'Saludos terrícola!'

language = 'es'
myobj = gTTS(text=mytext, lang=language, slow=False)
myobj.save("voz.mp3")
os.system("cvlc --play-and-exit voz.mp3")

Levantar un WebServer

Para levantar un WebServer se necesita un poco más de código, pero te lo mostramos a continuación y te aseguramos que prácticamente no deberás hacer ninguna modificación:

from http.server import BaseHTTPRequestHandler, HTTPServer
import cgi

from gtts import gTTS
from io import BytesIO
import os


#decodigo.com

hostName = "localhost"
serverPort = 8080
PAGINA="""\
<html>
<head>
<title>Manda Saludo</title>
<meta charset="utf-8"> 
</head>
<body>
<center><h1>Manda un saludo</h1></center>
<center>
 <form action="/index.html" method="POST" >
  <label for="texto">Escribe el texto:</label><br>
  <textarea id="texto" name="texto" rows="4" cols="50"></textarea><br>
  <input type="submit" id="boton" name="boton" value="Enviar"><br>
</form>
</center>
</body>
</html>
"""

class MyServer(BaseHTTPRequestHandler):
    def do_GET(self):
        if self.path == '/index.html':
            self.send_response(200)
            self.send_header("Content-type", "text/html")
            self.end_headers()
            self.wfile.write(bytes(PAGINA, "utf-8"))
    def do_POST(self):
        if self.path == '/index.html':
            
            form = cgi.FieldStorage(
                fp=self.rfile,
                headers=self.headers,
                environ={'REQUEST_METHOD': 'POST'}
            )
            textoEnviado = form.getvalue("texto")
            print("texto: ", textoEnviado)
            language = 'es'
            myobj = gTTS(text=textoEnviado, lang=language, slow=False, tld='com.mx')
            myobj.save("voz.mp3")
            os.system("cvlc --play-and-exit voz.mp3")

            self.send_response(200)
            self.send_header("Content-type", "text/html")
            self.end_headers()
            self.wfile.write(bytes(PAGINA, "utf-8"))

if __name__ == "__main__":        
    webServer = HTTPServer(('', serverPort), MyServer)
    print("Server inicia http://%s:%s" % (hostName, serverPort))

    try:
        webServer.serve_forever()
    except KeyboardInterrupt:
        pass

    webServer.server_close()
    print("Server para.")

Conocer la IP de mi Raspberry

Con el siguiente comando puedes conocer la IP de tu raspberry, aunque seguramente ya la sabrás si te has conectado desde VNC Viewer:

ip address