Hoe u de Raspberry Pi tekst laat voorlezen met eSpeak.
Opmerkingenⓘ Cet article peut avoir été partiellement ou totalement traduit à l'aide d'outils automatiques. Nous nous excusons des erreurs que cela pourrait engendrer.
Bij computers is het probleem met de gebruikersinterface waarschijnlijk een van de meest gecompliceerde. Dat, dingen benoemen en een cache ongeldig maken …
De gemakkelijkste manier om informatie vanaf een computer aan een mens te presenteren, is meestal door middel van visie. Maar daarvoor heb je een scherm nodig, dat lomp, duur en daarom niet erg geschikt is voor aan boord.
In deze tutorial zullen we zien hoe u het gehoor van uw gebruikers kunt gebruiken in plaats van hun visie, door uw Raspberry Pi tekst te laten spreken met behulp van eSpeak-software, genaamd Text To Speech.
De hardware om de Raspberry Pi te laten praten
Om uw Raspberry Pi te laten spreken, hebben we de volgende apparatuur nodig:
Installeer eSpeak op de Raspberry Pi
Om uw Raspberry Pi te laten spreken, gebruiken we de eSpeak-software, een open source tekst-naar-spraak-software.
Het principe van eSpeak is als volgt: je geeft het wat tekst (een reeks tekens, een bestand, enz.) En het splitst het op in fonemen (de kleinste geluiden waaruit een gesproken taal bestaat), en gebruikt vervolgens een hele reeks technieken om deze fonemen om te zetten in echte geluidsbestanden.
Om eSpeak op de Raspberry Pi te installeren is het vrij eenvoudig aangezien het al aanwezig is in de repositories. We hoeven dus alleen maar de repositories bij te werken en om de installatie van eSpeak te vragen:
sudo apt update sudo apt install espeak -y
Lees een zin met eSpeak
Nu eSpeak is geïnstalleerd, kunnen we ervoor zorgen dat het een eerste zin leest. Maar daarvoor zullen we ervoor zorgen dat het geluid via de Jack-poort van onze Raspberry Pi naar onze luidsprekers gaat.
Om dit te doen, voer je het sudo raspi-config commando uit, ga dan naar "Geavanceerde opties", "Audio", "Forceer 3,5 mm ('koptelefoon') aansluiting" en tenslotte "Voltooien".
We zullen een map aanmaken espeak
download in de gebruikersmap een audiobestand en speel het af om te controleren of alles correct werkt:
mkdir /home/pi/espeak cd /home/pi/espeak wget https://raspberry-pi.fr/download/espeak/test.mp3 -O test.mp3 ffplay -nodisp test.mp3
U zou een C majeur toonladder moeten horen spelen.
Nu we weten dat de luidsprekers werken, gaan we eSpeak vragen om de zin te zeggen: "De frambozen staan op de kruk van mijn grootvader." Hiervoor gebruiken we het onderstaande commando:
espeak -a 200 -v fr+f3 "Les framboises sont perchées sur le tabouret de mon grand-père." --stdout | aplay
Wat ons zoiets geeft …
Laten we het commando een beetje omzeilen om te proberen het te begrijpen:
espeak
start het espeak-programma-a 200
geeft het volume aan dat voor geluid moet worden gebruikt. Het varieert van 0 tot 200 en is standaard 100.-v fr+f3
vertelt ons de taal die we moeten gebruiken.fr
komt overeen met de Franse taal,+f3
geeft aan dat we de derde variant van de vrouwenstem willen gebruiken die wordt voorgesteld door eSpeak. Denk eraan om de taalcode aan uw tekst aan te passen.- De zin tussen aanhalingstekens is de zin die wordt uitgesproken door eSpeak. In plaats daarvan hadden we hem ook kunnen vragen om terloops een tekstbestand te lezen.
-f le_chemin/du/fichier.txt
. --stdout
vertelt eSpeak dat in plaats van de audio rechtstreeks af te spelen, het de gegenereerde gegevens naar de standaarduitvoer van de terminal moet sturen.| aplay
geeft aan dat de uitvoer die door eSpeak wordt gegenereerd, wordt omgeleid naar de invoer van het aplay-programma, een programma voor het afspelen van audiobestanden in Wave-indeling, het programma dat wordt gegenereerd door eSpeak. Merk op dat we in plaats daarvan kunnen gebruiken> mon_fichier.wav
om de audio-uitvoer in een bestand op te slaan.
Zoals u kunt zien, is het niet eSpeak maar een spel dat het geluid afspeelt. De reden hiervoor is heel simpel, espeak is voor sommige versies afgeluisterd op de Raspberry Pi …
Als u eSpeak rechtstreeks probeert te laten spreken, krijgt u fouten met betrekking tot Alsa, de Raspberry Pi-geluidsserver. De eenvoudigste oplossing is daarom om de gegevens naar aplay te sturen, wat zelf perfect werkt. Uiteindelijk werkt het en dat is het enige dat telt.
Verbeter de stem van eSpeak door MBROLA op de Raspberry te installeren.
Zoals u kunt zien, zijn de stemmen die door eSpeak worden gegenereerd absoluut smerig. Geen paniek, we hebben een oplossing om dit te verbeteren.
Ik noemde het aan het begin van het artikel, eSpeak is in staat fonemen te genereren, deze stukjes geluid vormen een gesproken taal. En het blijkt dat er andere programma's zijn die deze fonemen kunnen lezen en uitspreken, en op een manier overtuigender dan eSpeak!
In ons geval zullen we de MBROLA-software gebruiken, een wereldwijd samenwerkingsproject geïnitieerd door de Polytechnische Faculteit van Mons, België, dat tot doel heeft een enorme database voor spraaksynthese te ontwerpen.
Vreemd genoeg is de MBROLA-software niet beschikbaar in de Raspbian-repositories, terwijl de taalgegevens dat wel zijn. Dit heeft tot gevolg dat de installatie van deze taalgegevens onmogelijk wordt …
Geen zorgen, wij hebben de oplossing! Inderdaad, een goede ziel was zo vriendelijk om zelf een MBROLA-pakket voor de Raspberry Pi te maken, en daarom besloten we om een spiegel op de site te maken.
Dus we zullen dit pakket downloaden en installeren met de onderstaande commando's:
cd ~/espeak wget https://raspberry-pi.fr/download/espeak/mbrola3.0.1h_armhf.deb -O mbrola.deb sudo dpkg -i mbrola.deb
En nu MBROLA is geïnstalleerd, kunnen we de taalbestanden downloaden die we nodig hebben. Dus voor mij zal het zijn mbrola-fr1
, dat wil zeggen de eerste Franse stem. Pas het commando aan uw taal aan.
sudo apt install mbrola-fr1 -y
Het enige wat we nu hoeven te doen is onze vorige eSpeak-bestelling aan te passen en deze aan te passen om fonemen te genereren en deze door MBROLA te laten lezen. Dat geeft ons het onderstaande commando.
espeak -a 200 -v mb-fr1 -s 150 "Les framboises sont perchées sur le tabouret de mon grand-père." --stdout | aplay
Wat ons de onderstaande audio geeft:
U vindt enkele van dezelfde instellingen als voorheen, maar met twee wijzigingen:
-v mb-fr1
geeft aan dat we MBROLA willen gebruiken om het audiobestand te genererenmb
, en de Franse stem nummer 1-fr1
.-s 150
geeft aan wanneer voor hem dat we het bestand met een snelheid van 150 woorden per minuut willen genereren. De standaardwaarde is 165, maar ik vind het een beetje snel, althans voor Frans.
Zoals eerder kunt u natuurlijk de opdracht wijzigen om een bestand te maken, de tekst uit een txt-bestand te lezen, enz.
Door deze commando's te combineren met zaken als het lezen van RFID-tags en dergelijke, kun je eenvoudig in-vehicle systemen met relatief complete interfaces creëren.
Natuurlijk zijn we nog ver verwijderd van een menselijke stem en weten we dat er betere "Text to Speech" -engines zijn, zoals Mozilla's TTS, ontwikkeld als onderdeel van het Common Voice-project. Desalniettemin bieden MBROLA en eSpeak een goed compromis tussen gebruiksgemak, snelheid van uitvoering en efficiëntie.