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 [Ocultar]

Descargar gTTS

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pip install gTTS
pip install 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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo apt install -y vlc
sudo apt install -y vlc
sudo apt install -y vlc

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
cvlc --play-and-exit archivo_voz.mp3
cvlc --play-and-exit archivo_voz.mp3
cvlc --play-and-exit archivo_voz.mp3

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

Primera prueba de código

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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")
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")
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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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.")
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.")
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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ip address
ip address
ip address