Rhasspy et ses satellites

tests de bon fonctionnement

Je te conseille très fortement en parallèle d’aller installer rhasspy-watch qui pourra t’aider à y voir un peu plus clair sur ce qui se passe au niveau de MQTT. Pour ça, tout se passe ici :

Voici la ligne de commande :

python ./rhasspy-watch.py --host rasp-test

Tests

Nous allons donc faire quelques petits tests pour vérifier que chaque composant fonctionne. Si ce n’est pas le cas, il faudra aller mettre les mains dans le cambouis 🙂

Test de sortie son (Maître/Satellite)

tout bête, on entre une petite phrase dans le champ “Text to speak” et on clique sur “Speak”. A faire sur chaque Rhasspy

Tu dois donc entendre cette phrase sortir sur le haut parleur.

Voici ce que tu dois voir dans Rhasspy-watch pour le Rhasspy maître :

[2020-11-03 21:28:53] [Tts] was asked to say 'ceci est un test' in None on site master
[2020-11-03 21:28:55] [Tts] finished speaking with id ''

Et sur le Rhasspy satellite :

[2020-11-03 21:29:29] [Tts] was asked to say 'Ceci est un test' in None on site bureau
[2020-11-03 21:29:31] [Tts] finished speaking with id ''

Et pour les logs Rhasspy, voici ce que tu dois voir pour le Rhasspy maître :

Nov  3 21:28:53 rasp-test rhasspy[1390]: [DEBUG:2020-11-03 21:28:53,787] rhasspyserver_hermes: -> TtsSay(text='ceci est un test', site_id='master', lang=None, id='b6a88b78-3937-4ca5-852                         e-a7c143fa4ef3', session_id='')
[...]
Nov  3 21:28:53 rasp-test rhasspy[1390]: [DEBUG:2020-11-03 21:28:53,900] rhasspyspeakers_cli_hermes: <- AudioPlayBytes(52524 byte(s))
[...]
Nov  3 21:28:53 rasp-test rhasspy[1390]: [DEBUG:2020-11-03 21:28:53,901] rhasspyspeakers_cli_hermes: ['aplay', '-q', '-t', 'wav', '-D', 'plughw:CARD=Device,DEV=0']
[...]
Nov  3 21:28:55 rasp-test rhasspy[1390]: [DEBUG:2020-11-03 21:28:55,700] rhasspyserver_hermes: Handling TtsSayFinished (topic=hermes/tts/sayFinished, id=f33c4d9c-1200-4c3a-abd4-4ca9ed272295)

Je t’ai expurgé un peu parce que sinon c’est trop lourd à afficher mais grosso merdo, on peut constater qu’il y a un message MQTT de type TtsSay qui est envoyé, qu’il est traité (envoyé sur le haut parleur) par le composant rhasspyspeakers_cli_hermes. Et qu’ensuite, un message de type TtsSayFinished est envoyé pour dire qu’il a finir de lire le texte.

Pour ce qui est des logs sur le Rhasspy satellite, c’est la même philosophie :

Nov  3 21:29:29 rasp-zero rhasspy[7637]: [DEBUG:2020-11-03 21:29:29,633] rhasspyserver_hermes: -> TtsSay(text='Ceci est un test', site_id='bureau', lang=None, id='2d68f8e5-b786-4b27-8902-9afee88ad981', session_id='')
[...]
Nov  3 21:29:29 rasp-zero rhasspy[7637]: [DEBUG:2020-11-03 21:29:29,830] rhasspyspeakers_cli_hermes: <- AudioPlayBytes(52524 byte(s))
[...]
Nov  3 21:29:29 rasp-zero rhasspy[7637]: [DEBUG:2020-11-03 21:29:29,856] rhasspyspeakers_cli_hermes: ['aplay', '-q', '-t', 'wav', '-D', 'plughw:CARD=seeed2micvoicec,DEV=0']
[...]
Nov  3 21:29:31 rasp-zero rhasspy[7637]: [DEBUG:2020-11-03 21:29:31,693] rhasspyserver_hermes: Handling TtsSayFinished (topic=hermes/tts/sayFinished, id=04eb60a9-6c9a-4d2d-b904-e3faa44b99b4)

Dans les 2 cas, il faut bien vérifier que les siteIds sont corrects.

Test du wake word (Maître/Satellite)

Prononce haut et fort le wake word du Rhasspy maître. Voilà ce que tu dois voir arriver dans Rhasspy-watch :

[2020-11-03 21:52:59] [hotword] detected on site master, for model jarvis
[...]
[2020-11-03 21:52:59] [Dialogue] session with id master-jarvis-05054865-52d4-4c90-a834-840eefd49c37 was started on site master.
[2020-11-03 21:52:59] [hotword] was asked to toggle itself 'off' on site master
[2020-11-03 21:52:59] [Asr] was asked to listen on site master

Et pour le Rhasspy satellite :

[2020-11-03 21:54:54] [hotword] detected on site bureau, for model hey_snips
[...]
[2020-11-03 21:54:55] [Dialogue] session with id bureau-hey_snips-0523a42f-e948-43a8-b32b-f0aecce76c49 was started on site bureau.
[2020-11-03 21:54:55] [hotword] was asked to toggle itself 'off' on site bureau
[2020-11-03 21:54:55] [Asr] was asked to listen on site bureau

Pour les logs, voici ce que tu dois voir sur le Rhasspy maître :

Nov  3 21:52:59 rasp-test rhasspy[1390]: [DEBUG:2020-11-03 21:52:59,030] rhasspywake_snowboy_hermes: Wake word detected: jarvis (site_id=master)
Nov  3 21:52:59 rasp-test rhasspy[1390]: [DEBUG:2020-11-03 21:52:59,037] rhasspywake_snowboy_hermes: -> HotwordDetected(model_id='jarvis', model_version='', model_type='personal', current_sensitivity=0.4, site_

Et ce que tu dois voir sur le Rhasspy Satellite :

Nov  3 21:54:53 rasp-zero rhasspy[7637]: [DEBUG:2020-11-03 21:54:53,663] rhasspywake_snowboy_hermes: Wake word detected: hey_snips (site_id=bureau)
Nov  3 21:54:53 rasp-zero rhasspy[7637]: [DEBUG:2020-11-03 21:54:53,682] rhasspywake_snowboy_hermes: -> HotwordDetected(model_id='hey_snips', model_version='', model_type='personal', current_sensitivity=0.5, site_

Même chose ici, on vérifie que ce sont bien les bons siteIds qui sont dans les logs. Si ce n’est pas le cas, il faut revoir la configuration.

Attention, le son au maximum par défaut d’Alsa fait qu’il detecte du bruit et arrête l’enregistrement en disant qu’il n’a pas compris l’intent. Je te conseille donc de lancer alsamixer, de faire F6 pour sélectionner le bon périphérique audio, et de baisser le son 🙂

Test de la reconnaissance d’intent

Pour faire ce test, on va avoir besoin de mettre quelques sentences. Pour plus d’informations sur les sentences, c’est ici que ça se passe :

Donc, voici quelques sentences de test :

[allumerLumiere]
allume la (lumière|lampe){lumiere}
allume la (lumière|lampe){lumiere} (du|de la) (bureau|cuisine){piece}

Bien évidemment, on ne fait ça que sur le Rhasspy maître !

On clique sur “Save Sentences” et on accepte l’entrainement. Désormais, l’intent “AllumerLumiere” est censée être reconnue.

Pour cela, on entre la phrase dans le champ et on clique sur le bouton “Recognize”.

Si tout se passe bien, il doit nous avoir déctecter l’intent et les 2 slots associés.

On fait ensuite la même chose sur le Rhasspy satellite :

On doit obtenir le même résultat.

Voilà ce que tu dois voir dans rhasspy-watch pour le Rhasspy maître :

[2020-11-03 22:53:48] [Nlu] was asked to parse input 'allume la lumière du bureau'
[2020-11-03 22:53:48] [Nlu] Detected intent allumerLumiere with confidence score 1.0 for input 'allume la lumière du bureau'
[2020-11-03 22:53:48] [Nlu] Intent allumerLumiere with confidence score 1.0 on site master
           with slots :
               lumiere => lumière (confidenceScore=1.0)
               piece => bureau (confidenceScore=1.0)

Et pour le satellite :

[2020-11-03 22:54:52] [Nlu] was asked to parse input 'allume la lumière du bureau'
[2020-11-03 22:54:52] [Nlu] Detected intent allumerLumiere with confidence score 1.0 for input 'allume la lumière du bureau'
[2020-11-03 22:54:52] [Nlu] Intent allumerLumiere with confidence score 1.0 on site bureau
           with slots :
               lumiere => lumière (confidenceScore=1.0)
               piece => bureau (confidenceScore=1.0)

Il est important de vérifier que c’est à chaque fois le bon siteId qui est vu.

Test de bout en bout.

Si tous les tests ci-dessus sont réussis, alors il ne te reste plus qu’à faire un test complet. Tu réveilles Rhasspy avec le wake word et tu prononces haut et fort “Allume la lumière du bureau”. Dans l’interface web, l’intent doit être détectée (comme lorsque tu as cliqué sur le bouton “Recognize”).

Et voici ce que tu dois voir dans rhasspy-watch :

[2020-11-03 23:07:21] [hotword] detected on site master, for model jarvis
[...]
[2020-11-03 23:07:21] [Dialogue] session with id master-jarvis-22d173d3-8843-4d13-a949-a7f342e5b8bc was started on site master.
[2020-11-03 23:07:21] [hotword] was asked to toggle itself 'off' on site master
[2020-11-03 23:07:21] [Asr] was asked to listen on site master
[2020-11-03 23:07:25] [Asr] captured text 'allume la lumière du bureau' in 1.150636777998443s on site master
[...]
[2020-11-03 23:07:26] [Nlu] was asked to parse input 'allume la lumière du bureau'
[2020-11-03 23:07:26] [Nlu] Detected intent allumerLumiere with confidence score 1.0 for input 'allume la lumière du bureau'
[2020-11-03 23:07:26] [Nlu] Intent allumerLumiere with confidence score 1.0 on site master
           with slots :
               lumiere => lumière (confidenceScore=1.0)
               piece => bureau (confidenceScore=1.0)
[2020-11-03 23:07:52] [Asr] was asked to stop listening on site master
[2020-11-03 23:07:52] [Dialogue] session with id master-jarvis-22d173d3-8843-4d13-a949-a7f342e5b8bc was ended on site master. Reason: timeout
           with customData :
               jarvis

Je ne te copie pas celle pour le satellite car je pense que tu as compris, tu dois obtenir la même chose avec un siteId différent.

Tu auras aussi constaté ceci :

[Dialogue] session with id master-jarvis-[...] was ended on site master. Reason: timeout

C’est tout simplement qu’il attend un retour du gestionnaire d’intent. Cela peut être nodered, jeedom ou autre. Dans ce tuto, je n’ai pas configuré de gestionnaire d’intent, donc il tombe dans un timeout (en espérant qu’il ne se fasse pas trop mal 😀 ).

16 Comments

  1. Bonjour Cédric,

    J’ai suivi le tuto mais j’ai un problème avec l’étape TTS
    J’ai un setup basé hassio (mosquitto + node-red + rhasspy configurés aux petits oignons)
    Tout parle à tout, pour l’instant je n’ai que le satellite qui capture la voix.
    Le satellite détecte le mot mais s’engage ensuite une partie de ping-pong stérile entre des services si bien que l’enregistrement semble ne jamais se faire.
    J’ai testé différents périphériques audio (inutile puisque le mot est détecté)…
    Les messages mqtt passent sans souci
    Voici un extrait de la sortie avec rhasspy-watch (compliments pour cet excellent script !) suivi des logs du satellite :
    https://0bin.net/paste/+cbijBbZ#-/uR9zAxE2/hDivXY/M21Gwr5ZRG+kRxbb1niK8gvlO

    J’ai basé le tout sur pulse histoire d’être sûr que les accès concurrents se fassent bien, mais il semblerait que le processus d’écoute du mot-clé empêche l’enregistrement de la commande vocale.

    Merci

  2. Bonjour Cedcox,
    J’ai suivi ton tuto à la lettre et tout fonctionne.
    Par contre à la fin tu dis ne pas avoir configuré de gestionnaire d’intent,
    mais j’en est un en Remote http pour Jeedom sur le master. Il fonctionne très bien en passant par le master, mais pas par le satellite bureau.
    Le texte est bien reconnu sur le master, mais l’Intent Handling n’est pas exécuté.
    Faut-il modifier un truc ?
    Merci d’avance…

  3. Bonjour Cedcox,

    Merci pour ton avis.
    Je vais me laisser tenté d’essayer un environnement virtuel sur le satellite pour voir si je m’en sort en suivant tes tutos et si concluant le master y passera 🙂 quand je mettrai MQTT pour peut-être un gain de réaction car j’ai entre 3 et 5s sur le commandes.

    Merci et bonne journée

    • Bonjour Hervé,

      Si ton master est en Docker et que tu suis le tuto, n’oublie pas d’ajouter ceci à ta ligne de commande de démarrage Docker : -p 1883:1883 après -p 12101:12101 pour rendre accessible MQTT à ton satellite. 🙂 .

      Ced

  4. Bonjour Cedcox,

    Question générale :

    Vu les évolutions possibles de RHASSPY. Quelle type d’installation est plus la même d’être fiable et pérenne dans la durée :

    Master + Satellite dans un environnement virtuel ou Master + Satellite dans un environnement Docker (j’ai vu sur le GitHub) que la version Docker du satellite était dépréciée au profit du virtuel ou alors Master Docker + Satellite dans un environnement virtuel.

    Merci de ton avis éclairé.

    • Bonjour Hervé,

      Tu as mis le doigt sur le soucis, c’est au bon vouloir des développeurs 🙂 .
      Faire une image docker prend du temps pour les devs mais tu es à peu près sûr d’avoir un truc qui fonctionne avec tous les composants nécessaires, dans la bonne version, enfermés dans un conteneur et donc sans interaction avec ce qui est déjà installé sur le raspberry.
      D’un autre côté, l’environnement virtuel python est plus pratique pour les mises à jour et pour les interactions avec des composants qui seraient en dehors du conteneur Docker.

      Pour un minimum de problème, surtout si il y a déjà autre chose d’installée, le mieux est Docker. Si un jour tu veux supprimer Rhasspy, on supprime le conteneur et hop ! Par contre, difficile de le bidouiller quand il y a un problème.
      Pour un maximum de possibilité et de facilité de dépannage, l’installation et le lancement via un environnement virtuel est plus pratique. Par contre, il faudra être un peu plus soucieux dans les dépendances etc. Il faut aussi être un peu à l’aise avec la ligne de commande.

      En résumé, je dirai qu’il faut essayer les 2 et prendre celui qui semble le plus adapté (je sais, ce n’est pas une réponse 🙂 ). Après, moi, personnellement, je ne suis pas très Docker en général 🙂

      Ced

  5. Bonsoir Ced.
    BINGO !! ça fonctionne avec Buster Lite.
    Dans Docker c’est bien l’environnement Buster Desktop
    qui pose le problème de téléchargement des fichiers Kaldi.
    En revanche comme dans la version sans Docker, je me retrouve avec un test audio qui parle beaucoup trop vite. j’avais précédemment modifié le fichier .asoundrc en ajoutant ” rate 48000″
    Mais cette fois je suis infoutu de trouver ce fichier dans mon conteneur rhasspy
    Je te sollicite une nouvelle et dernière fois, pour m’aider à modifier ce fichier de configuration
    Je te remercie par avance

    • Bonjour Tycharles,

      Le mieux est encore de modifier directement le fichier /etc/asound.conf (pas dans le conteneur).
      Bien évidemment on sauvegarde au cas où avant :
      sudo mv /etc/asound.conf /etc/asound.conf.save

      🙂

      Ced

  6. Bonsoir Ced
    J’arrive à faire un ping vers l’extérieur depuis mon conteneur
    Caramba… J’aurai presque préféré que ça fonctionne pas.
    Je vais refaire une installation cette fois sur un Rasbian Buster Lite
    Dans le pire des cas je vais me contenter de ma configuration en version 2.5.6 sans Docker qui fonctionne nickel
    Quoi qu’il arrive je te tiens au courant
    Encore merci pour ton boulot de documentation et ta réactivité

    • Bonsoir Ced.
      Sur tes conseils j’ai donc non pas modifié, mais créé un fichier asound.conf dans le répertoire /etc.
      J’ai bien résolu mon problème de lecture rapide du test audio. Dans mon Rhasspy je gère sans aucune difficulté mes intents avec Snowboy par défaut.
      Tout est parfait. En revanche quand je veux créer mon Wake Word
      OS Error: [Erno -9996] Invalid input devise (no défaut output devise).
      J’ai cherché à modifier ma configuration Aplay avec un autre type de device par défaut, mais sans résultat.
      Je soupçonne un conflit entre le nouveau fichier asound.conf créé dans /etc. & le fichier asoundrc.conf de mon profil dans Docker
      Je ne trouve pas le fichier asoundrc dans mon profil Docker et si je dois en créer un, à quel endroit ?
      Je te remercie par avance.

  7. Bonjour Ced.
    Je viens de refaire point par point l’installation complète de Buster desktop
    et Rhasspy 2.5.7
    Idem, je ne parviens pas à télécharger les fichiers Kaldi

    Pour Répondre à tes questions
    J’ai bien accès à la console http://192.168.0.3:12101
    J’ai fait la commande sudo usermod -aG docker pi

    En revanche je vais avoir besoin de tes compétences pour faire le test ping
    depuis le conteneur vers l’extérieur.

    Je crois avoir lu que tu préconises Buster Lite, peut être un problème de ce coté ?
    ou peut-être faut il être connecté à la console en https ?

    Je te remercie par avance

    • Bonjour Tycharles,

      Effectivement, je n’installe que des versions lite. En effet, les raspberry ne sont pas des bêtes de course et comme de toutes façons, je n’ai pas besoin de l’interface graphique. Après il n’est pas impossible qu’il y’ait des interactions mais cela devrait quand même marcher.
      Pour faire un ping depuis le conteneur :
      $ $ docker container ls
      CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
      5c79353b0837 rhasspy/rhasspy "bash /usr/lib/rhass…" 5 minutes ago Up 36 seconds 0.0.0.0:12101->12101/tcp affectionate_wilson

      on récupère le nom du conteneur (aléatoire), ici : affectionate_wilson
      Ensuite on ouvre un shell :
      docker exec -it NOM_CONTENEUR /bin/bash
      root@61adbb5c70cc:/#

      Te voilà en root dans le conteneur.
      Pour installer ping :
      apt install iputils-ping
      Et tu peux ensuite pinger et commande exit pour sortir.

      Évidemment, après le redémarrage du conteneur, il n’aura pas sauvegardé les actions, et il est préférable que ce soit le cas pour garder un conteneur propre.

      Ced

  8. Bonjour Ced.
    J’ai Rhasspy 2.5.6 version Debian (sans Docker) qui tourne nickel sur un Pi3B+.
    En revanche je bute sur l’installation 2.5.7 avec docker (idem avec ver 2.5.6)
    L’installation de Docker et la configuration de Rhasspy 2.5.7 c’est OK.
    Mais impossible de faire le download des fichiers du profile (Kaldi, Snowboy, et…)
    Reste bloqué dans l’attente du téléchargement, sans même donner une erreur.
    Merci par avance pour le coup de main.
    PS. Super boulot de traduction et d’explication.

    • Bonsoir Tycharles,

      Alors comme ça, je dirais que tu as un problème avec la couche réseau de Docker. Ce qui est étrange car c’est censé marcher dès l’installation.
      As-tu essayé de désinstaller docker et de le réinstaller ? As tu accès à la console ? Si oui ça voudrait dire que la redirection de port fonctionne.
      Il faudrait que tu récupères le prompt shell de ton conteneur Rhasspy et que tu essayes un ping vers un site extérieur.
      Tous mes articles sont fait avec un 3B+ donc si tu le suis à la lettre ça devrait marcher (sauf si y a un bug dans la 2.5.7 mais ça m’étonnerait beaucoup.
      Je vais le rejouer au cas où pour m’assurer que l’article est toujours OK.

      Ced

    • Bonjour Tycharles,

      Je viens de réinstaller de 0 Rhasspy dans un conteneur Docker en suivant l’article à la lettre et j’ai bien Rhasspy qui télécharge les fichiers Kaldi. Pour snowboy, c’est à toi de le télécharger et de le mettre dans le répertoire snowboy du profil (voir cet article)
      As tu bien fait cette commande ? : sudo usermod -aG docker pi

      Tiens moi au courant

      Ced

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.