Para poder recuperar y escuchar aquellas palabras #identificables que irán sucediendo 🔴 I’m Live!, es necesario montar un pequeño servidor web que pueda comunicar a la una Raspberry Pi Central, y que también podría ser un ordenador.
Hay distintas maneras de realizar esta misión, se puede instalar por ejemplo un servidor web Apache, o LAMP. Hay mucha documentación actualizada al respecto.
Sin embargo, descubrí que hay una librería para Python bastante sencilla y que de momento he podido hacer funcionar bien. Este módulo se llama http.server y se puede ver toda la descripción, clases y parámetros aquí.
En este post describiré cómo he hecho un código .py, que lee el estado de una URL y lo inserta en la sintaxis de nuestro querido espeak. Me he basado en un ejemplo publicado por Henry Cheung en donde hace un webserver para prender y apagar un led.
- Hacer un archivo de Python con la extensión .py. Para ello estoy usando editores de texto: Brackets o Atom. Una vez que tengo terminados los códigos los creo dentro de la Raspberry Pi. Para este ejemplo lo llamaremos tts_webserver.py. También se puede crear directamente desde la Raspberry con:
sudo nano tts_webserver.py
- Dentro del archivo, colocar el siguiente código:
from subprocess import call #texttospeech
import os
from http.server import BaseHTTPRequestHandler, HTTPServer
host_name = '192.168.1.106' # Change this to your Raspberry Pi IP address
host_port = 8000 #Puerto a escuchar
class MyServer(BaseHTTPRequestHandler):
""" A special implementation of BaseHTTPRequestHander for reading data from
and control GPIO of a Raspberry Pi
"""
def do_HEAD(self):
""" do_HEAD() can be tested use curl command
'curl -I http://server-ip-address:port'
"""
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
def do_GET(self):
self.do_HEAD()
status = ''
if self.path=='/':
print("Path vacio")
elif self.path!='/':
texto = self.path #variable para leer lo que hay después del slash /
print(texto) #imprimir en terminal
os.system("espeak "+ texto +" -ves-la -k5 -s140 --stdout | aplay -D bluealsa") #Aquí dam$
if __name__ == '__main__':
http_server = HTTPServer((host_name, host_port), MyServer)
print("Server Starts - %s:%s" % (host_name, host_port))
try:
http_server.serve_forever()
except KeyboardInterrupt:
http_server.server_close()
3. Cerrar el archivo von Ctrl+X y ejecutar el código con:
python3 tts_webserver.py
Instantáneamente después, terminal devolverá la ip con el puerto que has designado.
4. Abrir un navegador web y colocar la IP y el puerto, en mi caso por ejemplo:
192.168.1.106:8000
5. Añadir texto después de la barra, por ejemplo:
192.168.1.106:800/hola,mundo
Aquí deberías escuchar a tu altavoz decir estas palabras, si es así, hemos logrado que un robot nos murmure al oído.
Warning! Esto está aún en proceso.
Cosas por reparar:
– De momento de alguna manera el GET llama también al path vacío y me devuelve en TTS un “favicon.ico”. Why?