Note

Bienvenue sur la communauté Facebook SunFounder Raspberry Pi, Arduino & ESP32 !

  • Obtenez du support technique et de l’aide au dépannage.

  • Apprenez et partagez des projets, des astuces et des tutoriels.

  • Accédez en avant-première aux aperçus et mises à jour des produits.

  • Profitez de réductions exclusives et de cadeaux.

👉 Rejoignez-nous ici : [here]

2. TTS avec Piper et OpenAI

Dans la leçon précédente, nous avons exploré Espeak et Pico2Wave, deux moteurs TTS hors ligne simples sur Raspberry Pi. Maintenant, faisons un grand pas en avant et essayons deux options TTS plus avancées qui offrent une meilleure qualité vocale et plus de flexibilité :

  • Piper — un moteur TTS rapide basé sur des réseaux de neurones qui fonctionne complètement hors ligne sur Raspberry Pi.

  • OpenAI TTS — un service en ligne qui fournit des voix très naturelles et humaines, parfait pour une parole expressive.

Ces moteurs rendront votre Pironman 5 Pro MAX plus réaliste et vivant. 🚀


1. Tester Piper

Piper est un moteur TTS neuronal hors ligne, ce qui signifie que vous n’avez pas besoin de connexion Internet une fois le modèle installé. Il prend en charge plusieurs langues et voix, ce qui en fait une option puissante pour la parole embarquée.

Exécuter le programme

cd ~/sunfounder-voice-assistant/examples
sudo python3 tts_piper.py
  • La première fois que vous l’exécutez, le modèle vocal sélectionné sera téléchargé automatiquement.

  • Vous devriez ensuite entendre le Pironman 5 Pro MAX dire : Hello! I'm Piper TTS.

  • Vous pouvez changer de voix ou de langue en appelant set_model() avec un nom de modèle différent.

Code

from sunfounder_voice_assistant.tts import Piper

tts = Piper()

# Lister les langues supportées
print(tts.available_countrys())

# Lister les modèles pour l'anglais (en_us)
print(tts.available_models('en_us'))

# Définir un modèle vocal (téléchargement automatique s'il n'est pas déjà présent)
tts.set_model("en_US-amy-low")

# Dire quelque chose
tts.say("Hello! I'm Piper TTS.")

Explication du code :

  • available_countrys() — Liste toutes les langues supportées.

  • available_models() — Liste les modèles disponibles pour une langue spécifique.

  • set_model() — Définit le modèle vocal. Si le modèle n’est pas installé, il sera téléchargé automatiquement.

  • say() — Convertit le texte en parole et le lit immédiatement.

💡 Astuce : Essayez différents modèles pour comparer la vitesse, la clarté et les accents. Certains modèles sont plus légers (plus rapides), tandis que d’autres ont une fidélité plus élevée.


2. Tester OpenAI TTS

Obtenir et sauvegarder votre clé API

  1. Allez sur OpenAI Platform et connectez-vous. Sur la page API keys, cliquez sur Create new secret key.

    ../../_images/llm_openai_create1.png
  2. Remplissez les détails (Propriétaire, Nom, Projet et autorisations si nécessaire), puis cliquez sur Create secret key.

    ../../_images/llm_openai_create_confirm1.png
  3. Une fois la clé créée, copiez-la immédiatement — vous ne pourrez plus la revoir. Si vous la perdez, vous devez en générer une nouvelle.

    ../../_images/llm_openai_copy1.png
  4. Dans votre dossier de projet (par exemple : /), créez un fichier appelé secret.py :

    cd ~/sunfounder-voice-assistant/examples
    sudo nano secret.py
    
  5. Collez votre clé dans le fichier comme ceci :

    # secret.py
    # Store secrets here. Never commit this file to Git.
    OPENAI_API_KEY = "sk-xxx"
    

Exécuter le programme

cd ~/sunfounder-voice-assistant/examples
sudo python3 tts_openai.py
  • Le programme se connectera au service TTS d’OpenAI, et le Pironman 5 Pro MAX parlera en utilisant une sortie vocale naturelle et expressive.

  • Vous pouvez changer les styles de voix et ajouter des instructions pour contrôler le ton et l’expression (par exemple, triste, dramatique, enjoué).

  • Cela rend OpenAI TTS idéal pour les robots interactifs, la narration ou les assistants éducatifs.

Code

from sunfounder_voice_assistant.tts import OpenAI_TTS
from secret import OPENAI_API_KEY

# Exportez votre OPENAI_API_KEY avant d'exécuter le script
# export OPENAI_API_KEY="sk-proj-xxxxxx"

tts = OpenAI_TTS(api_key=OPENAI_API_KEY)
# tts.set_model('tts-1')
tts.set_voice('alloy')
tts.set_model('gpt-4o-mini-tts')

msg = "Hello! I'm OpenAI TTS."
print(f"Say: {msg}")
tts.say(msg)

msg = "with instructions, I can say word sadly"
instructions = "say it sadly"
print(f"Say: {msg}, with instructions: '{instructions}'")
tts.say(msg, instructions=instructions)

msg = "or say something dramaticly."
instructions = "say it dramaticly"
print(f"Say: {msg}, with instructions: '{instructions}'")
tts.say(msg, instructions=instructions)

Explication du code :

  • OpenAI_TTS() — Initialise le moteur TTS OpenAI en utilisant votre clé API.

  • set_model() — Sélectionne le modèle TTS (par exemple, gpt-4o-mini-tts).

  • set_voice() — Choisit une voix spécifique (par exemple, alloy).

  • say(text) — Convertit le texte en parole et le lit.

  • say(text, instructions=...) — Ajoute des instructions de ton expressives, vous permettant de contrôler dynamiquement le style de parole.

Exemple :

  • « say it sadly » → ton doux et émotionnel

  • « say it dramatically » → expression audacieuse et dramatique

  • « say it excitedly » → ton enthousiaste


Dépannage

  • Pas de module nommé “secret”

    Cela signifie que secret.py n’est pas dans le même dossier que votre fichier Python. Déplacez secret.py dans le même répertoire où vous exécutez le script, par exemple :

    ls ~/
    # Assurez-vous de voir les deux : secret.py et votre fichier .py
    
  • OpenAI : Clé API invalide / 401

    • Vérifiez que vous avez collé la clé complète (commence par sk-) et qu’il n’y a pas d’espaces ou de sauts de ligne supplémentaires.

    • Assurez-vous que votre code l’importe correctement :

      from secret import OPENAI_API_KEY
      
    • Confirmez l’accès réseau sur votre Pi (essayez ping api.openai.com).

  • OpenAI : Quota dépassé / erreur de facturation

    • Vous devrez peut-être ajouter un moyen de paiement ou augmenter le quota dans le tableau de bord OpenAI.

    • Réessayez après avoir résolu le problème de compte/facturation.

  • Piper : tts.say() s’exécute mais pas de son

    • Assurez-vous qu’un modèle vocal est réellement présent :

      ls ~/.local/share/piper/voices
      
    • Confirmez que le nom de votre modèle correspond exactement dans le code :

      tts.set_model("en_US-amy-low")
      
    • Vérifiez le périphérique/volume de sortie audio sur votre Pi (alsamixer), et que les haut-parleurs sont connectés et alimentés.

  • Erreurs ALSA / périphérique sonore (par exemple, « Audio device busy » ou « No such file or directory »)

    • Fermez les autres programmes utilisant l’audio.

    • Redémarrez le Pi si le périphérique reste occupé.

    • Pour la sortie HDMI par rapport à la prise casque, sélectionnez le périphérique correct dans les paramètres audio de Raspberry Pi OS.

  • Permission refusée lors de l’exécution de Python

    • Essayez avec sudo si votre environnement l’exige :

      sudo python3 tts_piper.py
      

Comparaison des moteurs TTS

Comparaison des fonctionnalités : Espeak vs Pico2Wave vs Piper vs OpenAI TTS

Élément

Espeak

Pico2Wave

Piper

OpenAI TTS

Fonctionne sur

Intégré sur Raspberry Pi (hors ligne)

Intégré sur Raspberry Pi (hors ligne)

Raspberry Pi / PC (hors ligne, besoin du modèle)

Cloud (en ligne, besoin de clé API)

Qualité vocale

Robotique

Plus naturelle qu’Espeak

Naturelle (TTS neuronal)

Très naturelle / humaine

Contrôles

Vitesse, hauteur tonale, volume

Contrôles limités

Choisir différentes voix/modèles

Choisir modèle et voix

Langues

Beaucoup (qualité variable)

Ensemble limité

Beaucoup de voix/langues disponibles

Meilleur en anglais (autres variables selon disponibilité)

Latence / vitesse

Très rapide

Rapide

Temps réel sur Pi 4/5 avec modèles « low »

Dépend du réseau (généralement faible latence)

Configuration

Minimale

Minimale

Télécharger les modèles .onnx + .onnx.json

Créer une clé API, installer le client

Idéal pour

Tests rapides, invites basiques

Voix hors ligne légèrement meilleure

Projets locaux avec meilleure qualité

Qualité la plus élevée, options vocales riches