Rhasspy : le wake word (le mot de réveil) snowboy

Snowboy-CustomMaker

Les prérequis

Normalement, tout devrait être là, mais au cas où

sudo apt-get install python3-numpy python3-pyaudio python3-soundfile python3-requests

Ensuite on récupère la liste des fichiers dont on va avoir besoin

wget https://raw.githubusercontent.com/KiboOst/jeedom_docs/master/other/Rhasspy/SnowboyCustomMaker/snowboyCustomMaker-list.txt

Et on lance le téléchargement de tous les fichiers présent dans le fichier texte téléchargé.

wget -P /home/pi/SnowboyCustomMaker -i snowboyCustomMaker-list.txt

On rentre dans le répertoire :

cd SnowboyCustomMaker/

Il y a 2 fichiers qui vont réellement nous intéresser

  • snowboyRecord.py
  • snowboyTrain.py

J’ai le script python snowboyRecord.py afin de me permettre d’enregistrer 3 fois le wake word en format wav. Ensuite, j’optimise mes 3 fichiers wav si je le souhaite. Puis je génère la création de mon modèle personnalisé grâce à snowboyTrain.py.

Ca à l’air simple comme ça. Mettons en pratique pour voir.

snowboyRecord.py

C’est l’outil qui va nous permettre de créer nos 3 fichiers wav. Il a été transformé à parti du fichier que fournissait snips pour là aussi créer un wake word customisé. Parfaite conversion d’outil !

On va donc lancer la commande

python3 snowboyRecord.py --wakeword hey_snips

Alors, comme je vais essayer de générer un modèle « hey, snips », j’ai appelé le wake word hey_snips

Et on suit ce qui est demandé

pi@raspberrypi:~/SnowboyCustomMaker $ python3 snowboyRecord.py --wakeword hey_snips
You will record 3 samples for your wakeword. Be sure to be in a quiet environment. Press enter once you are ready

Donc, on nous dit qu’on va enregistrer 3 echantillons de notre wake word et qu’il faut être dans un endroit très silencieux. Pas de bruit de ventilo de pc ou autre. Rien, il faut que ce soit le plus silencieux possible. On appuie sur « enter ».

Là, il nous dit qu’il va enregistrer l’échantillon 0. Une fois qu’on est prêt, on tape sur la touche « enter » et dès que le mot recording s’affiche, tu dis bien au haut et distinctement ton wake word. Le silence devrait arrêter l’enregistrement.

Press enter to record sample 0, say your wakeword when "recording..." shows up
recording...
finished recording

WARNING: there seems to be too much noise in your environment.

Si tu as ce message « WARNING : There seems to be too much noise in your environment« , c’est qu’il y a trop de bruit d’ambiance.

Si tu arrives à faire 3 enregistrements satisfaisants, le script te dit ceci :

Press enter to record sample 2, say your wakeword when "recording..." shows up
recording...
finished recording

Your samples have been saved in /home/pi/SnowboyCustomMaker/hey_snips
pi@raspberrypi:~/SnowboyCustomMaker $ 

Bonne nouvelle, j’ai mes 3 fichiers wav dans /home/pi/SnowboyCustomMaker/hey_snips. Allons voir ça

ls -lsa /home/pi/SnowboyCustomMaker/hey_snips/

voilà le résultat

total 252
 4 drwxr-xr-x 2 pi pi  4096 avril 21 12:48 .
 4 drwxr-xr-x 4 pi pi  4096 avril 21 12:46 ..
40 -rw-r--r-- 1 pi pi 39980 avril 21 12:48 0_uncut.wav
40 -rw-r--r-- 1 pi pi 38956 avril 21 12:48 0.wav
48 -rw-r--r-- 1 pi pi 46124 avril 21 12:48 1_uncut.wav
20 -rw-r--r-- 1 pi pi 16428 avril 21 12:48 1.wav
48 -rw-r--r-- 1 pi pi 47148 avril 21 12:48 2_uncut.wav
48 -rw-r--r-- 1 pi pi 45100 avril 21 12:48 2.wav
pi@raspberrypi:~/SnowboyCustomMaker $ 

Il semblerait que j’ai une version « uncut » et une version standard qui semble être la version « cut ».

Ouvrons ça dans audacity

Alors, j’ai superposé le fichier 0.wav et 0_uncut.wav. Comme ça, pas simple de distinguer la version cut de la version uncut. Et le wake word aurait pu être un peu amplifié.

Ok, maintenant qu’on a vu ce que générait l’outil SnowboyRecord.py, voyons une seconde solution. Le tout fait main 🙂

Enregistrement avec arecord

L’autre solution est de faire 3 enregistrements avec arecord et de les optimiser avec audacity.

Supprimons tous les fichiers wav précédemment créés.

rm -fr /home/pi/SnowboyCustomMaker/hey_snips/*.wav
cd /home/pi/SnowboyCustomMaker/hey_snips/

Là encore, KiboOst nous fournit la ligne de commande arecord toute prête :

arecord -D 'sysdefault:CARD=seeed2micvoicec' -r 16000 -f S16_LE -c 1 -t wav > 0.wav

Dès que tu as appuyé sur « enter » tu dis bien haut et bien distinctement ton wake word, et aussitôt tu appuies sur CTRL+C pour arrêter l’enregistrement.

Voici ce que donne mon fichier wav dans audacity.

Je vais déjà dans un premier temps faire un petit coup de réduction de bruit (noise reduction) . Pour avoir plus d’info sur ce que fait généralement un filtre de réduction de bruit, tu auras quelques réponses ici.

On fait CTRL+A pour sélectionner toute la piste. Ensuite, on va dans « Effect » puis « Noise reduction »

Alors, si vraiment cela t’intéresse, je t’invite à te renseigner ce que fait chaque réglage.

En attendant, on va garder les réglages qu’il nous propose par défaut et cliquer sur « OK »

Voici le résultat pour moi

Il me reste plus qu’à couper les blancs et on obtient ceci :

Pour sauvegarder, on va dans « File » puis « Export » puis « Export as WAV »

On laisse 0.WAV et on clique sur « Save »

Alors évidemment, il va nous dire que le fichier existe, donc pas de souci pour l’écraser

Il nous propose ensuite la possibilité d’ajouter des méta-data. Si ça ne t’intéresse pas, cliques directement sur « OK »

Voilà, on répète tout ça 3 fois pour avoir 3 fichiers WAV et on va pouvoir passer à la génération de notre modèle wake word.

SnowboyTrain.py

Je retourne dans mon dossier SnowboyCutsomMaster

cd /home/pi/SnowboyCutsomMaster

Je revérifie vite fait que j’ai bien mes 3 fichiers WAV

pi@raspberrypi:~/SnowboyCustomMaker $ ls -lsa /home/pi/SnowboyCustomMaker/hey_snips/
total 80
 4 drwxr-xr-x 2 pi pi  4096 avril 21 15:43 .
 4 drwxr-xr-x 4 pi pi  4096 avril 21 12:46 ..
24 -rw-r--r-- 1 pi pi 24162 avril 21 15:05 0.wav
24 -rw-r--r-- 1 pi pi 24064 avril 21 15:38 1.wav
24 -rw-r--r-- 1 pi pi 21612 avril 21 15:39 2.wav
pi@raspberrypi:~/SnowboyCustomMaker $ 

Alors pour exécuter la prochaine ligne de commande, il nous faut une clé API snowboy. En fait, cette clé nous permet d’utiliser la technologie snowboy depuis leurs serveurs. Grâce à cette clé, on va leur envoyer nos 3 fichiers audio, et eux en échange, vont nous générer notre modèle et le proposer en téléchargement.

Pour récupérer cette clé, il te faut retourner sur le site kitt-AI et aller en haut à droite dans ton profil

Et dans profile settings tu as :

Si tu n’as pas encore de « API token », alors clique sur la double flèche bleue. N’oublie pas de mettre « French » dans la partie « Languages ». On copie-colle la clé dans un endroit très précautionneusement. Et on clique sur « Save changes »

ok, il nous reste plus qu’à exécuter cette ligne de commande :

python3 snowboyTrain.py --token <ma_cle_api!!!> --lang fr --gender M --age 30 --wakeword hey_snips

On remplace évidemment <ma_cle_api!!!> par la clé que tu as récupérée sur le site de snowboy.

Et voici le résultat que j’obtiens

Building model hey_snips with options fr | M | 30
Saved model to 'hey_snips/hey_snips.pmdl'.

Parfait, mon modèle est créé. Je n’ai plus qu’à le tester. J’espère que tu manipules aussi de ton côté hein 🙂

On copie notre modèle dans le répertoire à modèle :

cp hey_snips/hey_snips.pmdl /home/pi/.config/rhasspy/profiles/fr/snowboy/

Ensuite, je vais aller configurer mon snowboy pour qu’il détecte à la fois jarvis et à la fois « hey, snips » comme wake word.

Alors là, attention, il va falloir de la rigueur. On va aller éditer directement le profile.json pour aller configurer le multi wake word. Mais avant, on arrête rhasspy !

nano /home/pi/.config/rhasspy/profiles/fr/profile.json

Si tu as suivi le TP à l’identique, alors tu supprimes toute la partie « wake » et tu la remplaces par ceci :

    "wake": {
        "satellite_site_ids": "bureau",
        "snowboy": {
            "model": "snowboy/hey_snips.pmdl,snowboy/jarvis.pmdl",
            "model_settings": {
                "snowboy/hey_snips.pmdl": {
                    "sensitivity": "0.5",
                    "audio_gain": 1,
                    "apply_frontend": false
                },
                "snowboy/jarvis.pmdl": {
                    "sensitivity": "0.4",
                    "audio_gain": 1,
                    "apply_frontend": false
                }
            }
        },
        "system": "snowboy"
    }

Si tu n’as pas les mêmes noms de wake word, alors il te faudra modifier le contenu avant de la coller dans le fichier de profil.

Attention !!! S’il y a, ne serait ce qu’une erreur même de syntaxe, et rhasspy ne démarera plus. Donc, fais bien attention à ce que tu fais. Dans le doute, fais une copie.

cp /home/pi/.config/rhasspy/profiles/fr/profile.json /home/pi/.config/rhasspy/profiles/fr/profile.json.save

Test du wake word customisé

Une fois les modifications faites, tu peux redémarrer rhasspy et tester tes nouveaux wake words. Si tu regardes dans les logs de rhasspy, tu devrais voir l’équivalent des lignes ci dessous. C’est à dire le moment où il a détecté ton premier wake word, et l’autre moment où il a détecté ton second wake word.

[DEBUG:2020-04-21 16:26:30,034] rhasspywake_snowboy_hermes: Wake word detected: hey_snips (site_id=bureau)
[DEBUG:2020-04-21 16:27:53,311] rhasspywake_snowboy_hermes: Wake word detected: jarvis (site_id=bureau)

A partir de là, toutes les portes te sont ouvertes 🙂

Soyez le premier à commenter

Poster un Commentaire

Votre adresse de messagerie ne sera pas publiée.


*


Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.