Snips – créer un hotword personnalisé

Générer le hotword

Ensuite, nous allons récupérer les sources du programme qui vont permettre de générer notre hotword :

$ git clone https://github.com/snipsco/snips-record-personal-hotword.git 

Puis on rentre dans le répertoire de ce que l’on vient de télécharger

$ cd snips-record-personal-hotword/

Si tu utilises la configuration basique au niveau du son, c’est-à-dire avec Alsa, alors il te faudra arrêter snips-audio-server qui a pris le contrôle du micro

$ sudo systemctl stop snips-audio-server

Il ne te reste plus qu’à lancer le script qui va enregistrer tes hotwords 3 fois

$ python script_recording.py cedcox

Alors, évidemment, à la place de « cedcox », tu mets le nom que tu veux à ton hotword. D’ailleurs, ce n’est pas le hotword lui-même mais le nom que tu vas lui donner pour pouvoir le retrouver ensuite. Tu peux par exemple créer plusieurs hotwords personnalisés avec comme nom le prénom de chaque membre de la famille.

Voici donc ce qui va se passer.

Your will have to record your personal hotword. Please be sure to be in a quiet environment. Press enter once you are ready.

Là, il te dit que comme tu vas enregistrer un hotword, il vaut mieux éviter qu’il y ait des enfants qui jouent à chat-perché à côté de toi ou que les feux de l’amour traine en arrière plan. Donc, on fait ça dans une pièce silencieuse et on tape « Entrée »

Press enter to record one sample, say your hotword when "recording..." shows up

Attention, c’est là que tu vas enregistrer une première fois ton mot clé. Donc, dès que tu es prêt et que tu t’es bien entrainé, tu tapes « Entrée ». dès que tu vois « recording », c’est le moment de lâcher le hotword

recording...
finished recording

Si tu as parlé bien fort, il détecte automatiquement la fin du hotword.

L’étape du dessus va se dérouler encore 2 fois et ce sera fini.

Your model has been saved in /home/pi/snips-record-personal-hotword/personal_2019_01_13T22_21_53

La curiosité te poussera alors à aller voir dans ce répertoire ce qu’il peut bien y avoir. Listons donc ce qu’il y a dedans

$ ls personal_2019_01_13T22_21_53/
0.wav  1.wav  2.wav  config.json

On constate que nos 3 enregistrements ont été tout simplement enregistrés en format .wav . Ce qui veut dire au passage que tu peux faire tes propres enregistrements en studio et les copier ici 🙂

Il ne te reste plus qu’à appeler « snips-hotword » pour tester ton hotword. Mais avant on doit parler « sensitivity »

Le paramètre sensitivity va être nécessaire à la détection du hotword. Ce paramètre va définir le niveau de sensibilité qui sera appliqué à la détection du hotword. La valeur de « sensitivity » est entre 0 et 1. Plus la valeur est proche de 0 et plus tu devras prononcer le hotword exactement comme tu l’as enregistré. Plus la valeur sera proche de 1 et plus il y aura de la marge de manœuvre dans la prononciation mais le risque de faux-positif (déclenchement non souhaité) sera élevé. Il faudra trouver la bonne valeur. Elle est généralement entre 0.4 et 0.6. A toi de faire les tests et de trouver la valeur qui marche le mieux.

Bon, avant, on va redémarrer snips-audio-server car c’est lui qui capture le son.

$ sudo systemctl start snips-audio-server

La commande est :

$ snips-hotword --model <chemin_vers_modele>=<sensitivity>

Donc dans mon cas cela donne :

$ snips-hotword --model /home/pi/snips-record-personal-hotword/personal_2019_01_13T22_21_53=0.5

Voici ce qui sort dans un premier temps :

pi@snips-bureau:~/snips-record-personal-hotword $ snips-hotword --model /home/pi/snips-record-personal-hotword/personal_2019_01_13T22_21_53=0.5
[22:41:50.403650] INFO :snips_heartbeat::cliconfig_ext: Heartbeat enabled
[22:41:50.409143] INFO :snips_hotword::server         : Using model from /home/pi/snips-record-personal-hotword/personal_2019_01_13T22_21_53
[22:41:50.551089] INFO :snips_hotword::server         : Discovered audio_server default/mqtt, starting hotword listener
[22:41:50.551173] INFO :snips_hotword::server         : Connecting using MQTT site-id default
[22:41:50.551677] INFO :snips_hotword_lib::audio      : Audio thread for default started
[22:41:50.552277] INFO :snips_hotword_lib::audio      : Net and VAD thread for site default started (vad inhibitor: true, vad messages: false
[22:41:50.556204] INFO :snips_hotword_lib             : Detector "detector.cedcox.default", sensitivity: 0.5, threshold 0.5
[22:41:50.556689] INFO :snips_hotword_lib             : detector.cedcox.default thread started


A partir de là, on prononce notre nouveau hotword et la ligne ci-dessous devrait apparaitre :

[22:41:53.536079] INFO :snips_hotword_hermes          : Hotword detected: site_id:default model:cedcox (67ms ago)

Tu peux le tester un peu dans tous les sens. Cette ligne apparaitra à chaque fois qu’il pensera que le hotword a été prononcé.

Si tu n’es pas satisfait, alors recommence les enregistrements etc.

Attention, la qualité d’enregistrement dépend vachement du micro et un hotword super bien détecté d’un côté peut être une misère à être détecté sur un autre micro. Donc si tu as différents micros dans la maison, il faut bien tous les tester avant de valider le hotword.

A partir de là, on fait un CTRL+C pour arrêter snips-hotword et mettre en production notre nouveau hotword personnalisé.

9 Comments

  1. bonjour, mon test est ok, la commande
    $ ls /etc/snips/personal_josette
    me donne bien les 4 fichiers, j’ai bien corrigé la ligne sous [snips hot-word] :
    model = [« /etc/snips/personal_josette=0.5 »]
    Mais c’est toujours le hey snips qui se charge après avoir remis en marche snips…

    Je ne vois vraiment pas où est mon erreur, syntaxe ok et test ok, qqn a eu le problème svp??

    merci!

  2. Bonjour Cox,

    Je commence mes recherches sur Snips, car un ami qui voulais faire un assistant pour sa domotique a changé de support et va commencer avec Snips bientôt et arrêter Sarah de https://blog.encausse.net/sarah/

    Nous sommes tous les deux fans de la série Eurêka, et notre question est sur les HotWord officiels, comme vous travaillé chez snips, vous savez peut être?

    Il y a Jarvis de Iroman mais pas de SARAH de Eurêka!!
    Est-il prévu de l’integrer un jour?
    Car, pour avoir sarah pour plusieurs personnes dans la maison, ça devient compliqué… et des fan de la série qui voudrait avec une assistante Vocale du même nom aussi, je pense.

    Pour finir, j’adore vos explications et pour une intégration, c’est d’une aide superbe!
    Maintenant, reste plus qu’à investir pour snips dans mon bureau pour commencer.

    Merci bcp

    • Bonjour,

      Avec Snips, il est possible d’avoir un hotword par personne, ce qui permet de savoir qui l’a déclenché. Mais cela nécessite de mettre un peu plus les mains dans le cambouis avec la récupération des infos dans les messages MQTT.

      Amusez vous bien avec Snips !

      Ced

  3. Je tenais à te remercier pour tes articles détaillés sur snips qui sont bien fait et j’ai vu également que tu avais commencé un premier article sur openhab qui sont malheureusement rare en français vivement la suite !!

  4. Bonjour,

    Je tente de mettre plusieurs modèle de Hotword, mais je n’y arrive pas.
    Il ne prend en compte que le dernier chemin présent dans la syntaxe ci dessous.
    Il y a pas un pb dans la syntaxe ?

    Merci
    model = [« = », »= »]

    • Bonjour Qben,

      As tu essayé le chapitre « test de bon fonctionnement » ? Est ce que le service snips-hotword fonctionne correctement avec ton/tes hotwords personnalisés ? Si oui, c’est alors effectivement un problème de syntaxe même si à première vue, je vois ce que tu as voulu écrire et je dirai que c’est bon.

      Dans le pire des cas, ouvre un ticket sur le forum de snips (en anglais) et je t’y aiderai. Il reste aussi le discord où je suis régulièrement et où tu peux me toquer.

      On arrivera à les faire fonctionner tes hotwords 😉

      Cedcox

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.