Nota

Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Scopri di più su Raspberry Pi, Arduino e ESP32 insieme ad altri appassionati.

Perché unirti a noi?

  • Supporto Esperto: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra comunità e del nostro team.

  • Impara e Condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.

  • Anteprime Esclusive: Accedi in anteprima agli annunci di nuovi prodotti e alle anticipazioni.

  • Sconti Speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni e Giveaway Festivi: Partecipa a giveaway e promozioni in occasione delle festività.

👉 Sei pronto a esplorare e creare con noi? Clicca [here] e unisciti oggi stesso!

15. Robot Narratore AI con Piper e OpenAI

Nella lezione precedente abbiamo provato due motori TTS integrati su Raspberry Pi (Espeak e Pico2Wave). Ora esploreremo due opzioni più potenti: Piper (offline, basato su rete neurale) e OpenAI TTS (online, basato su cloud).

  • Piper: un motore TTS locale che funziona offline su Raspberry Pi.

  • OpenAI TTS: un servizio online che fornisce voci molto naturali e realistiche.

Alla fine, il tuo PiCar-X si muoverà e racconterà barzellette come un piccolo narratore.


Prima di iniziare

Assicurati di aver completato:


1. Testare Piper

Passaggi per provarlo:

  1. Crea un nuovo file:

    cd ~/picar-x/example
    sudo nano test_tts_piper.py
    
  2. Copia il codice di esempio qui sotto nel file. Premi Ctrl+X, poi Y e infine Enter per salvare e uscire.

    from picarx.tts import Piper
    
    tts = Piper()
    
    # Elenca le lingue supportate
    print(tts.available_countrys())
    
    # Elenca i modelli per l’inglese (en_us)
    print(tts.available_models('en_us'))
    
    # Imposta un modello vocale (download automatico se non presente)
    tts.set_model("en_US-amy-low")
    
    # Pronuncia qualcosa
    tts.say("Hello! I'm Piper TTS.")
    
    • available_countrys(): stampa le lingue supportate.

    • available_models(): elenca i modelli disponibili per quella lingua.

    • set_model(): imposta il modello vocale (scarica automaticamente se manca).

    • say(): converte il testo in voce e lo riproduce.

  3. Esegui il programma:

    sudo python3 test_tts_piper.py
    
  4. Alla prima esecuzione, il modello vocale selezionato verrà scaricato automaticamente.

    • Dovresti sentire il PiCar-X dire: Hello! I'm Piper TTS.

    • Puoi cambiare lingua o voce chiamando set_model() con un nome diverso.

2. Testare OpenAI TTS

Ottieni e salva la tua API Key

  1. Vai su OpenAI Platform ed effettua il login. Nella pagina API keys, clicca su Create new secret key.

    ../_images/llm_openai_create.png
  2. Compila i dettagli (Proprietario, Nome, Progetto e permessi se necessario), poi clicca su Create secret key.

    ../_images/llm_openai_create_confirm.png
  3. Una volta creata la chiave, copiala subito — non potrai più visualizzarla. Se la perdi, dovrai generarne una nuova.

    ../_images/llm_openai_copy.png
  4. Nella cartella del tuo progetto (per esempio: /picar-x/example), crea un file chiamato secret.py:

    cd ~/picar-x/example
    sudo nano secret.py
    
  5. Incolla la tua chiave nel file in questo modo:

    # secret.py
    # Memorizza le chiavi qui. Non committare mai questo file su Git.
    OPENAI_API_KEY = "sk-xxx"
    

Scrivi ed esegui un programma di test

  1. Crea un nuovo file:

    cd ~/picar-x/example
    sudo nano test_tts_openai.py
    
  2. Copia il codice di esempio seguente nel file. Premi Ctrl+X, poi Y e infine Enter per salvare ed uscire.

    from picarx.tts import OpenAI_TTS
    from secret import OPENAI_API_KEY   # oppure usa la versione try/except mostrata sopra
    
    # Inizializza OpenAI TTS
    tts = OpenAI_TTS(api_key=OPENAI_API_KEY)
    tts.set_model('gpt-4o-mini-tts')  # modello TTS a bassa latenza
    tts.set_voice('alloy')            # scegli una voce
    
    # Saluto rapido (verifica base)
    tts.say("Hello! I'm OpenAI TTS.")
    
  3. Esegui il programma:

    sudo python3 test_tts_openai.py
    
  4. Dovresti sentire il PiCar-X dire:

    Hello! I'm OpenAI TTS.

3. Robot Narratore

Ora che abbiamo testato sia Piper che OpenAI TTS, usiamoli in un vero progetto: una macchinina robot narratrice che si muove e racconta barzellette.

In questo programma, il PiCar-X:

  • Ti saluterà con la voce TTS all’avvio.

  • Si muoverà in avanti e racconterà la prima barzelletta.

  • Si muoverà ancora in avanti e racconterà la seconda barzelletta.

  • Infine tornerà indietro “a casa” e dirà addio.

È come avere un piccolo robot narratore su ruote!

Esegui il codice

cd ~/picar-x/example
sudo python3 15.storytelling_robot.py

Codice

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()

Troubleshooting

  • No module named “secret”

    Significa che secret.py non si trova nella stessa cartella del tuo file Python. Sposta secret.py nella stessa directory in cui esegui lo script, ad esempio:

    ls ~/picar-x/example
    # Assicurati di vedere entrambi: secret.py e il tuo file .py
    
  • OpenAI: Invalid API key / 401

    • Verifica di aver incollato l’intera chiave (inizia con sk-) e che non ci siano spazi/a-capo extra.

    • Assicurati che il codice la importi correttamente:

      from secret import OPENAI_API_KEY
      
    • Conferma l’accesso di rete sul tuo Pi (prova ping api.openai.com).

  • OpenAI: Quota exceeded / billing error

    • Potrebbe essere necessario aggiungere un metodo di pagamento o aumentare la quota nella dashboard OpenAI.

    • Riprova dopo aver risolto il problema di account/fatturazione.

  • Piper: tts.say() viene eseguito ma non si sente nulla

    • Assicurati che un modello vocale sia effettivamente presente:

      ls ~/.local/share/piper/voices
      
    • Verifica che il nome del modello coincida esattamente nel codice:

      tts.set_model("en_US-amy-low")
      
    • Controlla dispositivo/volume di uscita audio sul tuo Pi (alsamixer) e che gli altoparlanti siano collegati e alimentati.

  • Errori ALSA / dispositivo audio (es., “Audio device busy” o “No such file or directory”)

    • Chiudi altri programmi che usano l’audio.

    • Riavvia il Pi se il dispositivo resta occupato.

    • Per uscita HDMI vs. jack cuffie, seleziona il dispositivo corretto nelle impostazioni audio di Raspberry Pi OS.

  • Permission denied durante l’esecuzione di Python

    • Prova con sudo se il tuo ambiente lo richiede:

      sudo python3 test_tts_piper.py
      

Comparison of TTS Engines

Feature comparison: Espeak vs Pico2Wave vs Piper vs OpenAI TTS

Item

Espeak

Pico2Wave

Piper

OpenAI TTS

Runs on

Integrato su Raspberry Pi (offline)

Integrato su Raspberry Pi (offline)

Raspberry Pi / PC (offline, richiede modello)

Cloud (online, richiede chiave API)

Voice quality

Robotica

Più naturale di Espeak

Naturale (neural TTS)

Molto naturale / simile a umana

Controls

Velocità, intonazione, volume

Controlli limitati

Scelta di voci/modelli diversi

Scelta di modello e voci

Languages

Molte (qualità variabile)

Set limitato

Molte voci/lingue disponibili

Migliore in inglese (altre variano per disponibilità)

Latency / speed

Molto veloce

Veloce

In tempo reale su Pi 4/5 con modelli “low”

Dipendente dalla rete (di solito bassa latenza)

Setup

Minimo

Minimo

Download modelli .onnx + .onnx.json

Creare chiave API, installare client

Best for

Test rapidi, prompt di base

Voce offline leggermente migliore

Progetti locali con qualità superiore

Massima qualità, ampia scelta di voci