Nota
Hola, ¡bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook! Sumérgete en el mundo de Raspberry Pi, Arduino y ESP32 con otros entusiastas.
¿Por qué unirte?
Soporte de expertos: Resuelve problemas post-venta y desafíos técnicos con la ayuda de nuestra comunidad y equipo.
Aprende y comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.
Preestrenos exclusivos: Obtén acceso anticipado a nuevos anuncios de productos y avances exclusivos.
Descuentos especiales: Disfruta de descuentos exclusivos en nuestros productos más recientes.
Promociones festivas y sorteos: Participa en sorteos y promociones especiales durante las festividades.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [here] y únete hoy mismo.
15. Robot Narrador con IA usando Piper y OpenAI
En la lección anterior, probamos dos motores TTS integrados en Raspberry Pi (Espeak y Pico2Wave). Ahora exploraremos dos opciones más potentes: Piper (offline, basado en redes neuronales) y OpenAI TTS (online, basado en la nube).
Piper: un motor TTS local que funciona sin conexión en Raspberry Pi.
OpenAI TTS: un servicio en línea que proporciona voces muy naturales y parecidas a las humanas.
Al final, tu PiCar-X conducirá y contará chistes como un pequeño narrador.
Antes de Empezar
Asegúrate de haber completado:
Instalar Todos los Módulos (Importante) — Instala los módulos
robot-hat,vilib,picar-xy luego ejecuta el scripti2samp.sh.
1. Probar Piper
Pasos para probarlo:
Crea un nuevo archivo:
cd ~/picar-x/example sudo nano test_tts_piper.py
Copia el siguiente código de ejemplo en el archivo. Presiona
Ctrl+X, luegoYy finalmenteEnterpara guardar y salir.from picarx.tts import Piper tts = Piper() # Listar idiomas compatibles print(tts.available_countrys()) # Listar modelos para inglés (en_us) print(tts.available_models('en_us')) # Establecer un modelo de voz (se descarga automáticamente si no está presente) tts.set_model("en_US-amy-low") # Decir algo tts.say("Hello! I'm Piper TTS.")
available_countrys(): imprime los idiomas compatibles.available_models(): lista los modelos disponibles para ese idioma.set_model(): establece el modelo de voz (lo descarga automáticamente si falta).say(): convierte texto a voz y lo reproduce.
Ejecuta el programa:
sudo python3 test_tts_piper.py
La primera vez que lo ejecutes, el modelo de voz seleccionado se descargará automáticamente.
Luego deberías escuchar al PiCar-X decir:
Hello! I'm Piper TTS.Puedes cambiar a otro modelo de idioma llamando a
set_model()con un nombre diferente.
2. Probar OpenAI TTS
Obtener y guardar tu clave API
Ve a OpenAI Platform e inicia sesión. En la página de API keys, haz clic en Create new secret key.
Rellena los detalles (Owner, Name, Project y permisos si es necesario), luego haz clic en Create secret key.
Una vez creada la clave, cópiala de inmediato — no podrás verla nuevamente. Si la pierdes, deberás generar una nueva.
En tu carpeta de proyecto (por ejemplo:
/picar-x/example), crea un archivo llamadosecret.py:cd ~/picar-x/example sudo nano secret.py
Pega tu clave en el archivo de esta forma:
# secret.py # Guarda secretos aquí. Nunca subas este archivo a Git. OPENAI_API_KEY = "sk-xxx"
Escribir y ejecutar un programa de prueba
Crea un nuevo archivo:
cd ~/picar-x/example sudo nano test_tts_openai.py
Copia el siguiente código de ejemplo en el archivo. Presiona
Ctrl+X, luegoYy finalmenteEnterpara guardar y salir.from picarx.tts import OpenAI_TTS from secret import OPENAI_API_KEY # o usa la versión try/except mostrada arriba # Inicializar OpenAI TTS tts = OpenAI_TTS(api_key=OPENAI_API_KEY) tts.set_model('gpt-4o-mini-tts') # modelo TTS de baja latencia tts.set_voice('alloy') # seleccionar una voz # Saludo rápido (prueba de funcionamiento) tts.say("Hello! I'm OpenAI TTS.")
Ejecuta el programa:
sudo python3 test_tts_openai.py
Deberías escuchar al PiCar-X decir:
Hello! I'm OpenAI TTS.
3. Robot Narrador
Ahora que hemos probado tanto Piper como OpenAI TTS, usémoslos en un proyecto real: un robot narrador sobre ruedas que se desplaza mientras cuenta chistes.
En este programa, el PiCar-X:
Te saludará con TTS al iniciar.
Avanzará y contará un primer chiste.
Avanzará de nuevo y contará un segundo chiste.
Finalmente retrocederá, regresará a “casa” y se despedirá.
¡Es como tener un pequeño robot narrador sobre ruedas!
Ejecutar el código
cd ~/picar-x/example
sudo python3 15.storytelling_robot.py
Código
from picarx import Picarx
import time
# === TTS Configuration ===
# Default: Piper
from picarx.tts import Piper
tts = Piper()
tts.set_model("en_US-amy-low") # use the voice model you installed
# Optional: switch to OpenAI TTS
# from picarx.tts import OpenAI_TTS
# from secret import OPENAI_API_KEY
# tts = OpenAI_TTS(api_key=OPENAI_API_KEY)
# tts.set_model("gpt-4o-mini-tts") # low-latency TTS model
# tts.set_voice("alloy") # choose a voice
# === PiCar-X Setup ===
px = Picarx()
# Quick hello (sanity check)
tts.say("Hello! I'm PiCar-X speaking with Piper.")
def main():
try:
# Leg 1
px.forward(30)
time.sleep(3)
px.stop()
tts.say("Why can't your nose be twelve inches long? Because then it would be a foot!")
# Leg 2
px.forward(30)
time.sleep(3)
px.stop()
tts.say("Why did the cow go to outer space? To see the moooon!")
# Wrap-up
tts.say("That's all for today. Goodbye, let's go home and sleep.")
px.backward(30)
time.sleep(6)
px.stop()
except KeyboardInterrupt:
px.stop()
finally:
px.stop()
px.set_dir_servo_angle(0)
if __name__ == "__main__":
main()
Solución de Problemas
No module named “secret”
Esto significa que
secret.pyno está en la misma carpeta que tu archivo de Python. Muevesecret.pyal mismo directorio donde ejecutas el script, por ejemplo:ls ~/picar-x/example # Asegúrate de ver ambos: secret.py y tu archivo .py
OpenAI: Invalid API key / 401
Verifica que pegaste la clave completa (empieza con
sk-) y que no haya espacios/saltos de línea extra.Asegúrate de importarla correctamente en tu código:
from secret import OPENAI_API_KEY
Confirma el acceso a la red en tu Pi (prueba
ping api.openai.com).
OpenAI: Quota exceeded / billing error
Puede que necesites agregar facturación o aumentar la cuota en el panel de OpenAI.
Intenta de nuevo después de resolver el problema de cuenta/facturación.
Piper: tts.say() se ejecuta pero no hay sonido
Asegúrate de que realmente haya un modelo de voz:
ls ~/.local/share/piper/voicesConfirma que el nombre del modelo coincida exactamente en el código:
tts.set_model("en_US-amy-low")
Revisa el dispositivo/salida de audio y volumen en tu Pi (
alsamixer), y que los altavoces estén conectados y alimentados.
ALSA / errores de dispositivo de sonido (p. ej., “Audio device busy” o “No such file or directory”)
Cierra otros programas que usen audio.
Reinicia la Pi si el dispositivo permanece ocupado.
Para salida por HDMI vs. jack de auriculares, selecciona el dispositivo correcto en la configuración de audio de Raspberry Pi OS.
Permission denied al ejecutar Python
Prueba con
sudosi tu entorno lo requiere:sudo python3 test_tts_piper.py
Comparación de Motores TTS
Elemento |
Espeak |
Pico2Wave |
Piper |
OpenAI TTS |
|---|---|---|---|---|
Se ejecuta en |
Integrado en Raspberry Pi (offline) |
Integrado en Raspberry Pi (offline) |
Raspberry Pi / PC (offline, necesita modelo) |
Nube (online, necesita clave API) |
Calidad de voz |
Robótica |
Más natural que Espeak |
Natural (TTS neuronal) |
Muy natural / similar a humana |
Controles |
Velocidad, tono, volumen |
Controles limitados |
Elegir diferentes voces/modelos |
Elegir modelo y voces |
Idiomas |
Muchos (la calidad varía) |
Conjunto limitado |
Muchas voces/idiomas disponibles |
Mejor en inglés (otros varían según disponibilidad) |
Latencia / velocidad |
Muy rápida |
Rápida |
En tiempo real en Pi 4/5 con modelos “low” |
Dependiente de la red (normalmente baja latencia) |
Configuración |
Mínima |
Mínima |
Descargar modelos |
Crear clave API, instalar cliente |
Mejor para |
Pruebas rápidas, prompts básicos |
Voz offline ligeramente mejor |
Proyectos locales con mejor calidad |
Máxima calidad, opciones de voz ricas |