fbpixel
Étiquettes : , , , ,

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
raspberry-pi-find-audio-device Synthétiseur de voix eSpeak sur Raspberry Pi

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.

raspberry-pi-select-audio-output Synthétiseur de voix eSpeak sur Raspberry Pi

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
raspberry-pi-install-mbrola-voices Synthétiseur de voix eSpeak sur Raspberry Pi

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

Sources