Puedes hacer hablar a tu Raspberry Pi utilizando un sintetizador de voz como eSpeak para convertirlo en un asistente inteligente. Este tutorial te ayudará a hacer hablar a tu robot o aplicación.
Hardware
- Raspberry Pi 3 avec Raspberry Pi OS
- Conexión a Internet y acceso remoto
Compruebe los periféricos de audio
Empezaremos por comprobar los periféricos de audio disponibles
aplay -l
Selecciona el dispositivo de audio
Por defecto, el sonido se emite a través del puerto jack o HDMI. Si desea conectar auriculares, debe seleccionar la salida correspondiente en la interfaz gráfica de Raspberry Pi o con sudo raspi-config.
Comprobar audio
Vamos a empezar por comprobar que el audio funciona correctamente y que se tienen en cuenta los periféricos de audio.
aplay /usr/share/sounds/alsa/*
Instalación del sintetizador de voz espseak
sudo apt-get install espeak
Para probar la instalación de espeak, simplemente introduzca el siguiente comando:
espeak "Hello World"
También puede instalar el paquete python y utilizarlo directamente en un script.
sudo apt-get install python3-espeak
from espeak import espeak espeak.synth("hello world")
Para obtener la lista de voces disponibles, introduzca el comando
espeak --voices
Uso de eSpeak en un script Python con Subprocess
Puede ejecutar comandos de shell desde un script de Python utilizando la biblioteca de subprocesos.
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)
Instalar pyttsx3
Para utilizar el sintetizador de voz con Python utilizaremos el paquete pyttsx3.
Para instalar el paquete pyttsx3 Python, introduzca el siguiente comando:
pip3 install pyttsx3
Elige la voz que quieras
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)
Código 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()
Deberías oír hablar a tu Rapsberry Pi.
Añadir otras voces
Puedes crear y añadir una voz personalizada inspirándote en las voces existentes y leyendo atentamente la documentación. Esto te permitirá concentrarte en determinadas frases y pronunciaciones. Luego, una vez que domines los ajustes, acabarás teniendo una voz que se adapte a ti.
Mejorar los resultados con los votos de MBROLA
Puedes utilizar otro sintetizador de voz un poco más potente que eSpeak e instalar nuevas voces con MBROLA. En nuestro caso, vamos a instalar una voz femenina francesa. Puedes encontrar la voz que más te convenga en la lista de voces disponibles.
Comprueba si mbrola ist. El siguiente comando le dará las voces 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
Una vez instalado mbrola, puedes instalar nuevas voces
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
Obviamente, las voces mbrola no pueden utilizarse con pyttsx3. Por lo tanto, utilizamos el subproceso
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)
Salida de audio HMDI
Si desea utilizar la salida de audio HDMI y no hay sonido, puede que tenga que modificar el archivo config.txt
sudo nano /boot/config.txt
Descomente la línea hdmi_drive=2