Il est possible de faire parler votre Raspberry Pi en utilisant un synthétiseur de voix comme eSpeak afin d ‘en faire un assistant intelligent. Grâce à ce tutoriel vous pourrez faire parler votre robot ou votre application.
Matériel
- Raspberry Pi 3 avec Raspberry Pi OS
- Connexion internet et accès distant
Vérifier les périphériques Audio
Nous allons tout d’abord vérifier les périphériques audio disponibles
aplay -l
Sélectionner le périphérique audio
Par défaut le son sort sur le port jack ou HDMI. Si vous souhaitez brancher un casque il vous faut sélectionner la sortie correspondante sur l’interface graphique du Raspberry Pi ou avec sudo raspi-config.
Vérifier l’audio
Nous allons dans un premier temps vérifier que l’audio fonctionne correctement et que le périphériques audio est bien pris en compte.
aplay /usr/share/sounds/alsa/*
Installation du synthétiseur vocale espseak
sudo apt-get install espeak
Pour tester l’installation espeak, il suffit de rentrer la commande suivante:
espeak "Hello World"
Vous pouvez aussi installer le package python et l’utiliser directement dans un script.
sudo apt-get install python3-espeak
from espeak import espeak espeak.synth("hello world")
Pour obtenir la liste des voix disponiibles, entrez la commande
espeak --voices
Utiliser eSpeak dans un script Python avec Subprocess
Vous pouvez lancer des commandes shell à partir d’un script Python en utilisant la librairie subprocess.
from time import sleep import subprocess def say(something, voice='fr+f1'): print("espeak -v {} {}".format(voice,something)) subprocess.call(['espeak', '-v%s' % (voice), something]) text=[u"bonjour",u"aurevoir",u"a bientot", u"sa va", u"merci"] textf=u"bienvenu admine, comment allez-vous aujourd'hui?" for t in text: say(t) sleep(0.5) say(textf)
Install pyttsx3
Pour utiliser le synthétiseur vocale avec Python nous allons utiliser le paquet pyttsx3
Pour installer le paquet Python pyttsx3, entrez la commande suivante:
pip3 install pyttsx3
Choisissez la voix que vous souhaitez
for i,voice in enumerate(voices): print("----------------{}".format(i)) print(voice.id) engine.setProperty('voice', voice.id) # changes the voice print(voice.age) print(voice.gender) print(voice.languages)
Code txt2speech
#!/usr/bin/python3.4 # -*-coding:Utf-8 -* from time import sleep import pyttsx3 as pyttsx engine = pyttsx.init() voices = engine.getProperty('voices') print(voices) engine.setProperty('voice', voices[0].id) # changes the voice #engine.setProperty('voice', voices[14].id) # changes the voice voiceNum=0 #Fr=[0 1 6 7 8 14] #6 = AC """ for voice in voices: print(voiceNum) voiceNum=voiceNum+1 print(voice.id) engine.setProperty('voice', voice.id) # changes the voice print(voice.age) print(voice.gender) print(voice.languages) print(voice.name) """ text=[u"bonjour",u"aurevoir",u"a bientot", u"sa va", u"merci"] textf=u"bienvenu admine, comment allez-vous aujourd'hui?" #rate = engine.getProperty('rate') engine.setProperty('rate', 120) #volume = engine.getProperty('volume') #engine.setProperty('volume', volume) for t in text: engine.say(t) sleep(0.5) engine.say(textf) engine.runAndWait()
Vous devriez entendre votre Rapsberry Pi parler!
Ajouter d’autres voix
Il vous est possible de créer et d’ajouter une voix personnalisée en vous inspirant de voix existantes et en lisant bien la documentation. Cela vous permettra de vous concentré sur certaines phrases et prononciation. Puis, une fois que vous maitrisez le paramétrage, vous pourrez à terme avoir une voix qui vous convient.
Améliorer le résultat avec les voix MBROLA
Vous pouvez utiliser un autre synthétiseur de voix un peu plus performant que eSpeak et installer de nouvelle voix avec MBROLA. Dans notre cas, nous installons une voix féminine française. Vous pouvez trouver la voix qui vous convient dans la liste des voix disponibles.
Vérifier si mbrola estt. La commande suivante vous donnera les voix disponibles
apt-cache search mbrola
mkdir espeak
cd espeak
wget https://raspberry-pi.fr/download/espeak/mbrola3.0.1h_armhf.deb -O mbrola.deb
sudo dpkg -i mbrola.deb
rm mbrola.deb
Une fois mbrola installé, vous pouvez installer de nouvelles voix
sudo apt-get install mbrola-fr4
espeak -v mb-fr4 "bonjour admin, comment allez-vous?"
N.B.: Pour installer le paquet mbrola, j’ai dû mettre à jour l’OS vers la version 11 (bullseye). Vous pouvez vérifier la version de l’os avec la commande cat /etc/os-release
Visiblement, les voix mbrola ne peuvent pas être utilisées avec pyttsx3. Nous utilisons donc subprocess
from time import sleep import subprocess def say(something, voice='mb-fr4'): print("espeak -v {} {}".format(voice,something)) subprocess.call(['espeak', '-v%s' % (voice), something]) text=[u"bonjour",u"aurevoir",u"a bientot", u"sa va", u"merci"] textf=u"bienvenu admine, comment allez-vous aujourd'hui?" for t in text: say(t) sleep(0.5) say(textf)
Sortie audio HMDI
Si vous souhaitez utiliser la sortie audio HDMI et qu’il n’y a aucun son, il peut être nécessaire de modifier le fichier config.txt
sudo nano /boot/config.txt
Décommentez la ligne hdmi_drive=2