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:

1. Probar Piper

Pasos para probarlo:

  1. Crea un nuevo archivo:

    cd ~/picar-x/example
    sudo nano test_tts_piper.py
    
  2. Copia el siguiente código de ejemplo en el archivo. Presiona Ctrl+X, luego Y y finalmente Enter para 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.

  3. Ejecuta el programa:

    sudo python3 test_tts_piper.py
    
  4. 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

  1. Ve a OpenAI Platform e inicia sesión. En la página de API keys, haz clic en Create new secret key.

    ../_images/llm_openai_create.png
  2. Rellena los detalles (Owner, Name, Project y permisos si es necesario), luego haz clic en Create secret key.

    ../_images/llm_openai_create_confirm.png
  3. Una vez creada la clave, cópiala de inmediato — no podrás verla nuevamente. Si la pierdes, deberás generar una nueva.

    ../_images/llm_openai_copy.png
  4. En tu carpeta de proyecto (por ejemplo: /picar-x/example), crea un archivo llamado secret.py:

    cd ~/picar-x/example
    sudo nano secret.py
    
  5. 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

  1. Crea un nuevo archivo:

    cd ~/picar-x/example
    sudo nano test_tts_openai.py
    
  2. Copia el siguiente código de ejemplo en el archivo. Presiona Ctrl+X, luego Y y finalmente Enter para 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.")
    
  3. Ejecuta el programa:

    sudo python3 test_tts_openai.py
    
  4. 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.py no está en la misma carpeta que tu archivo de Python. Mueve secret.py al 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/voices
      
    • Confirma 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 sudo si tu entorno lo requiere:

      sudo python3 test_tts_piper.py
      

Comparación de Motores TTS

Comparación de características: Espeak vs Pico2Wave vs Piper vs OpenAI 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 .onnx + .onnx.json

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