Rhasspy : Configuration de base

La première chose que l’on va faire c’est configurer les services; en tout cas, ceux qu’on peut 🙂

Pour ça, dans le menu de gauche on clique sur les petits engrenages

Le serveur MQTT

Alors, pour l’instant, on va le laisser un peu de côté en termes de jeu. Mais je vais juste te montrer sa configuration si tu souhaites le connecter à un serveur MQTT.

On clique sur le bouton “MQTT” et ça laisse apparaitre les paramètre pour se connecter à un serveur MQTT.

Tu as 2 choix possibles, soit le serveur MQTT est géré en interne par mosquitto, soit tu peux te connecter à un autre serveur MQTT. Ça peut être intéressant par exemple si tu veux te connecter à un “réseau” snips existant car Rhasspy peut aussi s’appuyer sur le même protocole Hermes-MQTT que snips.

Choix initial : Internal

Laissons Internal pour le moment. Je reviendrai dessus quand je ferai mes tests avec snips

Audio recording

C’est ici qu’on définit comment configurer l’enregistrement depuis le micro.

Alors on a pyAudio. C’est une librairie qu’on utilise en python pour enregistrer ce qui vient d’un microphone par exemple. Ça peut être pratique si on veut écrire son propre script pour récupérer la voix et faire des traitements dessus. Cette option offre la possibilité d’envoyer l’audio sur un serveur distant pour traitement de reconnaissance vocal. Je n’en sais pas plus.

Ensuite, nous avons arecord. Classique, on connait l’outil et c’est celui que je vais activer.

Ensuite, nous avons Local Command. Une option qui peut être intéressante par exemple si on souhaite customiser la ligne de commande de l’outil d’enregistrement.

Et le dernier Hermes MQTT. Je n’ai pas testé mais ce n’est pas impossible que ce soit pour récupérer l’audio de hermes/audioServer/<siteId>/audioFrame.

Le choix initial : arecord

Un classique, on maitrise l’outil.

Wake Word

Alors pour être totalement transparent, je n’ai toujours utilisé que le wake word par défaut de snips. Donc c’est un sujet que je n’ai pas encore approfondi.

Néanmoins, Porcupine semble être utilisé par les personnes sur le forum j’ai l’impression.

Snowboy n’évolue plus je crois.

Mycroft Precise vient du projet Mycroft qui est un assistant vocal online (doit se connecter à internet). Néanmoins, je pense que la détection d’un wake word ne devrait pas avoir besoin d’Internet. A tester.

Pocketsphinx, alors lui, je le connais pour avoir essayé de l’utiliser à mes début en reconnaissance vocale et c’était une catastrophe. Bon, je ne connaissais pas trop non plus le sujet, mais les perfs étaient médiocres. Donc, je reste un peu sur cette idée. Peut être faudrait il que je réessaie un jour.

Il reste Local Command et Hermes MQTT qui ont à peu près la même fonction à chaque fois. Local Command permet de faire appel à un programme exterieur et Hermes MQTT qui permet de s’appuyer sur le protocole Hermes (compatible snips). Je ne les listerai donc plus pour les prochains services.

Le choix initial : Disabled

En effet, pour le moment je découvre l’outil. Je reviendrai sur ce point plus tard quand je souhaiterai lancer mon pilote 🙂

Speech To Text

Alors là, il y en a 2 qui me font briller les yeux comme un gamin dans un rayon de jouet : Kaldi et Mozilla DeepSpeech

Kaldi, je le connais pour l’avoir déjà un peu utilisé dans un autre contexte et en plus, je crois que snips s’appuyait plus ou moins dessus. C’est un outil vraiment fiable et efficace s’il est bien configuré et surtout avec de très bon modèles disponibles. Je sais qu’il y a un modèle français qui traine sur internet qui a été très bien entrainé. Je vais regarder ça.

Le second donc c’est Mozilla DeepSpeech. Ça fait longtemps que j’attends un vrai projet pour commencer à jouer avec. Alors, je ne vais pas rentrer trop dans le détail mais DeepSpeech c’est du deep learning, c’est à dire basé sur un réseau neuronal d’intelligence artificielle. Ce qui est important en Deep Learning pour un résultat très efficace, c’est la quantité de données. Il faut qu’elle soit très très très importante. Plus que pour du machine learning standard. Et là, il existe un dataset FR qui fait déjà pas loin de 10 Go . Tu vas me dire : C’est énorme ! Oui, mais non. Ce n’est pas encore assez. Mais par contre, une fois qu’on aura le nombre d’heures nécessaires pour avoir un modèle fiable, alors cette technologie dépassera toutes les autres en reconnaissance vocale. Et en Offline en plus ! Bon, j’ai des doutes que ça tourne correctement sur un raspberry. Ce sera à tester. Par contre, rien ne t’empêche de créer ton propre modèle mais cela prend beaucoup beaucoup de temps à préparer ce genre de dataset. Mais avec juste les phrases nécessaires à reconnaitre, le modèle serait plus petit et donc plus accessible sur un raspberry.

Choix initial : Kaldi

Je pense qu’il a été testé sur raspberry par l’équipe de développement et je sais qu’il est relativement efficace.

Intent Recognition

Il y en a surtout 2 qui vont nous intéresser : Fsticuffs et Fuzzywuzzy . Car ce sont les 2 plus rapides en termes de traitement.

OutilsNombre de phrasesVitesse d’entrainementVitesse de reconnaissanceFléxibilité
fsticuffs1M+Très rapideTrès rapideignore les mots inconnus
fuzzywuzzy12-100rapiderapideReconnaissance de chaines de caractères

J’ai repris le tableau du site de rhasspy.

Le premier est capable de gérer des millions de lignes et de reconnaitre en quelques millisecondes. Par contre, il faut que les phrases soient à l’identique sinon pas de reconnaissance d’intent. Un peu juste je pense pour un assistant vocal. Parfois, juste un mot compris de travers, et l’intent ne serait pas reconnue… A tester

Le second est plus limité en termes de phrase mais par contre, il ne cherche pas spécifiquement la phrase exacte, mais à l’aide d’un algorithme, il va plutôt chercher si une phrase s’en rapproche réellement. Il réagira donc mieux au rôle d’assistant vocal. De plus, Il intègre un paramètre de confidence. Il faut voir ça un peu comme un paramètre qui définit à partir de quel pourcentage (que la phrase soit proche) on estime que c’est validé.

Choix initial : Je vais essayer les 2 et me faire mon avis 🙂

Edit: Pour le moment, j’utilise fsticuffs avec un fichier sentences.ini optimisé. Pour plus d’info, c’est dans cet article

Text To Speech

Alors là, le choix va être vite fait (malheureusement). Espeak, ça fait une voix de robot des années 80. Flite n’existe pas en français. Il nous reste donc picoTTS (celui que l’on connait avec snips) et MaryTTS qui nécessite un serveur web distinct.

Choix initial : PicoTTS

On le connait, on ne sera pas dépaysé pour les tests. Dans le paramètre Language, on oubliera de mettre fr car sinon, on va avoir une voix anglaise qui cause du français. Ça fait saigner les oreilles…

Audio Playing

Hé bien ce sera donc aplay. Outil que l’on connait bien sur ce blog car très utilisé dans les tuto dur les respeaker.

A noter qu’il y a la possibilité de définir la sortie audio sur un périphérique spécifique. Ça peut être intéressant dans certains cas.

Choix initial : Aplay

On connait l’outil

Dialogue management

Alors la gestion des dialogues c’est : qui gère les dialogues. Soit c’est rhasspy, soit c’est sur MQTT via Hermes-MQTT.

Choix initial : Hermes MQTT

Pour commencer, je vais passer sur un dialogue management que je connais puisque c’est celui de snips, Hermes MQTT. Je pense que je ferai un article dédié sur ce sujet quand j’aurai assez joué avec 🙂

Sauvegarde de la configuration

Il nous reste plus qu’à sauvegarder tout ça en cliquant sur Save Settings.

Et si tout se passe bien, Rhasspy redémarre. Si on retourne sur la page d’accueil, on peut désormais voir notre menu des services avec des icônes vertes, donc des services en état de fonctionnement.

Par contre, il nous demande de télécharger des fichiers manquants. Ce qu’li va donc falloir faire en cliquant sur le bouton Download.

S’ensuit ensuite un entrainement de notre assistant personnel.

Jouons maintenant un peu avec ce qu’on vient de configurer pour voir.

11 Comments

  1. Bonjour,
    Est-il possible de configurer Rhasspy en ligne de commande (j’ai fait l’installation de l’OS, des respeaker et de Rhasspy ainsi) ?
    A défaut, peut-on accéder à l’interface graphique depuis un PC tiers (je me connecte en local depuis SSH actuellement) ?
    Merci

    • Bonjour Damien,

      Je ne comprends pas la question. Rhasspy ne se configure pas en ligne de commande mais au travers de l’interface web. Il pourrait être possible de le faire au travers de son fichier de configuration, mais franchement pas pratique. Pourquoi ne pas utiliser son interface web ? Depuis un autre ordi : http://IP_DE_MON_RHASSPY:12101/.
      Pour accéder à l’interface graphique depuis un autre ordi, tu peux le faire via VNC si tu as activé l’option VNC : https://www.coxprod.org/domotique/chapitre-5-se-connecter-a-distance-au-raspberry/

      Ced

    • Merci Ced pour la réponse !
      En fait, l’information existe, mais je ne l’avais pas comprise comme telle (il me semblait que la seule manière d’accéder à Rhasspy était depuis la machine avec un écran en se servant du navigateur de la Raspberry).
      Juste pour les débutants comme je le suis, une organisation plus “didactique” des tutos serait plus confortable (genre respeaker-docker-config de base), mais ça reste tout à fait accessible !
      Question bête : pas besoin de mot de passe pour se connecter à Rhasspy en local ?
      Par ailleurs, truc bête, dans ton tuto installation docker, l’information n’est pas visible (instruction pull en gris sur fond gris… imagine mon désarroi quand, comme moi, on suit “à la lettre” ton tuto car on débute ! j’ai cru qu’il fallait que je trouve l’info sur le web !).
      Bref merci encore pour ton travail très utile pour moi !

    • Bonjour Damien,

      Effectivement, il n’y pas d’authentification pour se connecter à Rhasspy. Je crois me souvenir que c’était en cours de réflexion dans l’équipe 🙂 . il faudrait que j’aille refaire un tour sur le site.
      Pour le petit bug de l’article de l’install avec Docker, cela a été corrigé, merci beaucoup 🙂 !

      Ced

  2. Bonjour Cédric

    Problèmes résolus
    J’ai suivi ton conseil et suis allé modifier les configs comme ci-dessous
    la config audio playing : sysdefault:CARD=seeed2micvoicec
    la config recording : default:CARD=seeed2micvoicec.
    …… Et miracle ça fonctionne, je vais pouvoir poursuivre …..
    Merci pour ton aide et l’ensemble de tes tutos

    JeanBa

  3. Bonjour Cédric
    Merci pour votre réactivité.
    La version installée sur mon raspberry Pi3 B+ : Raspberry pi OS lite
    La version de rhasspy : 2.5.7 (sur docker)
    Lorsque je fais un docker inspect j’obtiens ceci :
    “Devices”: [
    {
    “PathOnHost”: “/dev/snd”,
    “PathInContainer”: “/dev/snd”,
    “CgroupPermissions”: “rwm”
    }
    ],
    Lorsque je clique sur Wake up j’obtiens les log suivant:

    [ERROR:2020-11-13 06:43:27,696] rhasspyserver_hermes:
    Traceback (most recent call last):
    File “/usr/lib/rhasspy/.venv/lib/python3.7/site-packages/quart/app.py”, line 1821, in full_dispatch_request
    result = await self.dispatch_request(request_context)
    File “/usr/lib/rhasspy/.venv/lib/python3.7/site-packages/quart/app.py”, line 1869, in dispatch_request
    return await handler(**request_.view_args)
    File “/usr/lib/rhasspy/rhasspy-server-hermes/rhasspyserver_hermes/__main__.py”, line 866, in api_listen_for_command
    handle_captured(), messages, message_types
    File “/usr/lib/rhasspy/rhasspy-server-hermes/rhasspyserver_hermes/__init__.py”, line 959, in publish_wait
    result_awaitable, timeout=timeout_seconds
    File “/usr/lib/python3.7/asyncio/tasks.py”, line 449, in wait_for
    raise futures.TimeoutError()
    concurrent.futures._base.TimeoutError
    [DEBUG:2020-11-13 06:42:57,671] rhasspyserver_hermes: Publishing 180 bytes(s) to hermes/asr/startListening
    [DEBUG:2020-11-13 06:42:57,670] rhasspyserver_hermes: -> AsrStartListening(site_id=’default’, session_id=’88d31da7-0c9a-4118-b546-9dd5f455c738′, lang=None, stop_on_silence=True, send_audio_captured=True, wakeword_id=None, intent_filter=None)
    [DEBUG:2020-11-13 06:42:57,668] rhasspyserver_hermes: Waiting for transcription (session_id=88d31da7-0c9a-4118-b546-9dd5f455c738)

    Petite précision : je ne suis qu’un amateur en informatique qui apprend aux travers de tutos comme celui-ci.
    Je vais continuer encore à chercher….Si vous avez d’autres pistes , je suis preneur
    Merci d’avance
    JeanBa

    • Bonjour JeanBa,

      Ton timeout ne semble pas du wakework donc mais de l’ASR qui n’arrive pas à enregistrer le son provenant du micro.
      Il y a donc effectivement un problème avec le son. Si le son fonctionne sur le raspberry (en tant qu’utilisateur pi et non root), le problème vient de la config de Rhasspy.
      Au cas où, teste ceci : aplay /usr/share/sounds/alsa/Front_Left.wav
      Peux tu aller dans la config audio playing et recording et sélectionner le périphérique par défaut ?
      Après, sans l’avoir entre les mains et par commentaire interposé, c’est compliqué de diagnostiquer. En ce moment, pour les tutos, j’ai rejoué énormément les tutos d’install Docker, venv et le tuto respeaker (ça me permet de vérifier qu’ils sont toujours ok 🙂 ) et je ne rencontre pas ce problème. Si tu es toujours en test et que ton raspberry n’est dédié qu’à ces tests, je t’invite à reflasher ta carte SD avec un raspberri pi OS vierge et rejouer à la lettre ces tutos.
      C’est un peu le problème avec Docker. Quand il faut diagnostiquer, c’est un peu la galère :/

      Ced

      Ced

  4. Bonjour
    Merci pour le partage et bravo pour la qualité de vos tutos.
    J’ai néanmoins un p’tit problème . Après plusieurs installations je bloque toujours au même endroit:
    – Installation de Respeaker 2 MIC –> OK
    – Essai du micro et de la sortie audio du Respeaker 2 Mic –> OK
    – Installation de docker et du container rhasspy/rhasspy –> OK
    – Configuration de Rhasspy –> OK
    ET c’est là que ça bloque :

    1. Lorsque je teste la fonction “Speak” la sortie audio du Respeaker ne fonctionne pas.Par contre cela fonctionne avec la sortie audio du raspberry pi3.
    2. Lorsque je teste la fonction “Wake Up” j’ai une erreur:”TimeoutError”.
    Si Quelqu’un a une idée…? Merci d’avance.
    JeanBa

    • Bonjour JeanBa,

      Pour le soucis audio, es tu sûr d’avoir ce paramètre dans ta ligne de commande : --device /dev/snd:/dev/snd
      Attention, si tu es avec un raspberry avec interface graphique, Docker semble parfois réagir bizarrement.

      Pour le problème du Wakeup, il faudrait que tu regardes dans les logs ce qui est écrit quand tu appuies sur le bouton. Le problème doit y être décrit.

      Tiens nous au courant 🙂

      Ced

  5. Adaptation des “Menu” et des “valeurs” pour la version 2.4.20 :
    – “Audio Recording” -> “Microphone”
    – “Text To Speech” : ‘fr’ -> ‘fr-FR’
    – “Audio Playing” -> “Sounds” mais ATTENTION : Bug ! Impossible de conserver le choix ‘aplay’ avec la valeur ‘”default:CARD=seeed2micvoicec: Default Audio Device”
    Il m’a fallu saisir manuellement le texte suivant dans le ‘profile’ accessible via l’onglet [Advanced”] :
    “sounds”: {
    “aplay”: {
    “device”: “default:CARD=seeed2micvoicec”
    }
    puis [Save Settings]
    ATTENTION a ne plus cliquer sur [Save Settings] depuis l’onglet [Settings] au risque de faire disparaitre cette modif.Conversion des “Menu”cdans la version 2.4.20 :

  6. Bonjour,
    Merci pour ce document “pas à pas” qui m’a permis de commencer à configurer mon premier assistant vocal avec la version Rhasspy 2.4.20
    Cependant, l’interface graphique ayant beaucoup évoluée (avec quelques bugs) je te propose de fournir si tu le souhaite les copies d’écran équivalentes pour cette nouvelle version.
    En attendant, j’apporterai quelques précisions nécessaires pour que ton “mode d’emploi” soit fonctionnel avec la version 2.4.20 dans les pages suivantes.

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.