Installation de snips sur raspberry

Vérification de bon fonctionnement

Nous allons maintenant vérifier si tout se passe bien. Pour cela tu vas faire :

sam watch

Si il ne trouve pas la commande (ce qui vient de m’arriver), pas très grave, on l’installe :

sudo apt-get install snips-watch

On lance donc « sam watch », on fait « Hey ! snips » on attend le ding puis : « Quelle heure est il ? »
Voici le résultat

pi@snips-bureau:~ $ sam watch
[01:47:40] Watching on localhost:1883 (MQTT)
[01:47:43] [Hotword] detected on site default, for model hey_snips
[01:47:43] [Asr] was asked to stop listening on site default
[01:47:43] [Hotword] was asked to toggle itself 'off' on site default
[01:47:43] [Dialogue] session with id '88925e74-f10a-4cd2-8c03-cbfd4187fa1f' was started on site default
[01:47:43] [AudioServer] was asked to play a wav of 41.1 kB with id '1ba09837-66b4-4eca-abdb-dfa82b0fcd03' on site default
[01:47:44] [AudioServer] finished playing wav with id '1ba09837-66b4-4eca-abdb-dfa82b0fcd03'
[01:47:44] [Asr] was asked to listen on site default
[01:47:47] [Asr] captured text "quelle heure est il" in 2.0s
[01:47:47] [Asr] was asked to stop listening on site default
[01:47:47] [AudioServer] was asked to play a wav of 93.1 kB with id '57ac49b0-09ad-450a-bb18-30c9a65c18e0' on site default
[01:47:48] [AudioServer] finished playing wav with id '57ac49b0-09ad-450a-bb18-30c9a65c18e0'
[01:47:48] [Nlu] was asked to parse input "quelle heure est il"
[01:47:48] [Nlu] detected intent Joseph:askTime with probability 1.000 for input "quelle heure est il"
[01:47:48] [Dialogue] New intent detected Joseph:askTime with probability 1.000
[01:47:48] [Dialogue] was ask to end session with id 88925e74-f10a-4cd2-8c03-cbfd4187fa1f by saying 'Il est une heure 47'
[01:47:48] [Tts] was asked to say "Il est une heure 47"
[01:47:48] [AudioServer] was asked to play a wav of 59.2 kB with id '4197fa97-fe82-4a40-8a2d-45bb74475055' on site default
[01:47:50] [AudioServer] finished playing wav with id '4197fa97-fe82-4a40-8a2d-45bb74475055'
[01:47:50] [Tts] finished speaking with id '7ff8c840-d7e6-40c4-a992-3f18496dfe3d'
[01:47:50] [Dialogue] session with id '88925e74-f10a-4cd2-8c03-cbfd4187fa1f' was ended on site default. The session ended as expected
[01:47:50] [Asr] was asked to stop listening on site default
[01:47:50] [Hotword] was asked to toggle itself 'on' on site default

Oula !! Oulalala !!! Je sens que je viens de te perdre. Alors tu sais quoi, on va regarder ce log d’un peu plus près et voir ce qu’il nous dit.

[01:47:40] Watching on localhost:1883 (MQTT)

Cette ligne nous dit que sam watch (alias snips-watch) est en train de surveiller le serveur MQTT sur localhost. localhost, c’est la machine elle même, celle sur laquelle tu viens de lancer la commande. 1883, c’est le port TCP. Bon si ce n’est pas clair, ce n’est pas très grave, retiens juste que cette ligne te dit ce que l’outil de log surveille.

[01:47:43] [Hotword] detected on site default, for model hey_snips

Bon, tu n’es pas bilingue, mais tu comprends vite qu’il vient d’entendre le mot clé (hotword) « Hey ! snips » sur le site « default ». En fait pour le moment, notre snips étant autonome, le site est le site par défaut. Et pour ne pas compliquer plus le truc du coup, le site s’appelle « default »

[01:47:43] [Dialogue] session with id '88925e74-f10a-4cd2-8c03-cbfd4187fa1f' was started on site default
[01:47:43] [AudioServer] was asked to play a wav of 41.1 kB with id '1ba09837-66b4-4eca-abdb-dfa82b0fcd03' on site default
[01:47:44] [AudioServer] finished playing wav with id '1ba09837-66b4-4eca-abdb-dfa82b0fcd03'

Là, on comprend que le dialogue s’ouvre avec snips. En fait, pour être plus précis, que le composant s’occupant du dialogue avec l’utilisateur vient de s’activer. Et pour nous prévenir que cela va être à nous de parler, un petit son est joué (play a wav of 41.1 kB). C’est le petit « ding » que tu entends juste après le « Hey ! snips ».
Au passage, on notera qu’un identifiant unique vient d’être créé pour notre dialogue. Cela permettra le suivi éventuel dans le cas d’un échange plus complexe. L’id c’est le truc bizarre « 1ba09837-66blablablabla »

[01:47:44] [Asr] was asked to listen on site default
[01:47:47] [Asr] captured text "quelle heure est il" in 2.0s
[01:47:47] [Asr] was asked to stop listening on site default

ASR vient de se mettre en route. C’est quoi ASR ? « Automatic Speech Recognition ». C’est ce qu’on appelle vulgairement la reconnaissance vocale. Je dis vulgairement parce que c’est un raccourci, mais ce n’est pas le sujet 🙂 .
Donc, je disais que l’ASR venait de se déclencher et qu’il a capturé ce que j’ai dit et retranscris par écrit : « Quelle heure est il ».

[01:47:47] [AudioServer] was asked to play a wav of 93.1 kB with id '57ac49b0-09ad-450a-bb18-30c9a65c18e0' on site default
[01:47:48] [AudioServer] finished playing wav with id '57ac49b0-09ad-450a-bb18-30c9a65c18e0'

Vu qu’il a détecté qu’on avait fini de causer, un petit « ding » est joué par notre AudioServer.

[01:47:48] [Nlu] was asked to parse input "quelle heure est il"
[01:47:48] [Nlu] detected intent Joseph:askTime with probability 1.000 for input "quelle heure est il"
[01:47:48] [Dialogue] New intent detected Joseph:askTime with probability 1.000

Là, c’est le NLU qui s’active. Le NLU c’est Native Language Understanding (compréhension du langage naturel). Grosso modo, c’est le module qui va se charger de comprendre ce que la phrase veut dire et ce qui en est attendu.

Dans le cas de snips, le NLU va faire la relation avec un intent (une intention). Celui-là même que nous avons ajouté via l’application qui donne l’heure. Et le NLU nous donne même la probabilité avec laquelle il en est sûr. Ici c’est 1, mais 1 veut dire 100%. Le NLU te donnera toujours un chiffre entre 0 et 1. Par exemple, 0,5 c’est 50%.

[01:47:48] [Dialogue] was ask to end session with id 88925e74-f10a-4cd2-8c03-cbfd4187fa1f by saying 'Il est une heure 47'
[01:47:48] [Tts] was asked to say "Il est une heure 47"

Il est demandé à notre AudioServer de finir la discussion en donnant l’heure. Et c’est le composant TTS qui s’en charge. TTS ? « Text To Speech ». Là, tu as trouvé comme un grand, c’est la petite voix qui cause dans le poste et qui lit le texte.

Le reste du log n’a pas trop d’importance, et puis avec ce que tu viens de lire, tu sauras l’interpréter.

Voilà ! Tu es maintenant prêt à analyser la sortie de sam watch !

19 Comments

  1. Hello
    Super projet ça a l’air top et le tuto bien fait. J’arrive à l’étape sam install assistant et il me demande enter the path to home assistant. De quel répertoire s’agit-il ?
    Merci de votre aide
    Mathieu

    • Bonjour matthieu,

      C’est tout simplement parce que tu as dans ton assistant une application qui s’appuie sur home-assistant dans ces actions. Au vu de ta question, tu n’as pas home assistant (concurrent jeedom, eedomus, openhab etc…).
      Il faut donc que tu trouves cette application et que tu l’enlèves de l’assistant. Pour cela, tu dois Forké toutes tes applications ainsi que les intents et regarder chaque action.
      Il y’a plusieurs possibilité : Snipplets, github et home assistant. Si ton action fait appel à home assistant, ce n’est pas bon 🙂

      Ced

    • Bonjour
      Effectivement je suis aller un peu vite j’ai voulu essayer pleins d’app snips 😆.
      Par contre j’ai maintenant pleins d’erreurs de ce type quand je fait Sam install assistant.
      Une idée ?
      Certaines apps ont besoin de l’assistant Google ? Je peux faire un mix de snips et de Google ?
      Merci


      Cloning skill bluevert.Heure from url: https://github.com/JDureau/snips-skill-heure
      error: impossible d’ouvrir .git/FETCH_HEAD: Permission non accordée

      Running setup.sh & generating virtual environment for snips-skill-heure
      ✖ Error setting up virtualenv, one or more actions might not be able to run. Reason :
      Traceback (most recent call last):
      File « /usr/lib/python3/dist-packages/virtualenv.py », line 2379, in

    • Bonjour Mathieu,

      Nettoie tout et refait un sam install assistant :
      pi@raspberrypi:~ $ sudo rm -r /usr/share/snips/assistant/*
      pi@raspberrypi:~ $ sudo rm -r /var/lib/snips/skills/*

      Ced

    • Bonjour Pour information j’ai du repartir de zéro et réinstallé ma distribution. Quand j’installe qu’une seule application cela marche sans problème par contre des que j’essaye d’installer une application qui nécessite home assistant cela plante tout. Cela capte bien la voix mais ne répond plus.
      A priori des bugs ont été saisies sur ce problème.

    • Bonjour Mathieu,

      Effectivement, si tu n’as pas home-assistant, il ne faut pas installer les applications qui nécessitent en pré-requis home-assistant.
      C’est vrai que le store d’application de snips est excessivement mal fait à l’heure d’aujourd’hui car il n’est pas possible de trier les applications par la technologie des actions (avec ou sans, HA, github, snippets).
      Il n’y a plus qu’à espérer que ce soit une futur mise à jour proche !

      Ced

  2. Hello,

    Genial tes tutos. Il manque l’integration a Jeedom ! 😀
    petite coquille, page 4, juste avant le paragraphe « l’installation de sam » il faudrait modifier la commande
    sudo apt-get install -y snips-platform-voice snips-skill-server
    par
    sudo apt-get install -y snips-platform-voice snips-skill-server snips-watch

    Sinon il manque un bout;

    Bon je sais que maintenant il y a sam init mais bon…

    Freddy

    • Bonjour Freddy,

      Effectivement, mais tu remarqueras que l’install de snips-watc est page 7 😉
      J’avais déjà remarqué ce détail mais commme l’install est donnée un peu plus loin, j’ai laissé l’article comme il est 🙂

      En tout cas merci pour la relecture ! 🙂

      Ced

  3. Bonsoir Ced,
    J’ai fait un rpi-update et je m’en mors les doigts GRRRRR
    Mon respeaker 2 mic tirer sa révérence.J’ai essayé de ré-installer les pilotes rien n’y fait.
    Problème connu et une solution existe? ou suis-je le seul?

  4. Merci Ced
    Il me manquait un argument dans l’ajout de mon utilisateur dans le groupe sudo.
    Je faisait usermod -G sudo Nouvel utilisateur au lieu de
    usermod -a -G sudo Nouvel utilisateur je teste ça aujourd’hui.

  5. Bonjour,
    Merci pour ce Tuto clair et précis.
    J’ai 2 soucis :
    Si je choisi un autre nom d’utilisateur que pi tout se passe bien jusqu’au reboot post install de mon respeaker2mic; lsmod | grep seeed ne retourne rien aplay -l et arecord -l idem par contre si aplay -l et arecord -l exécuté en sudo ma carte est bien présente ( utilisateur crée au départ appartenant au groupe sudo et pi supprimé avant toute install)
    Et deuxièmement si je fait une Maj du kernel dans dernière mouture avec une installation avec user pi par défaut j’ai le même souci qu’en haut.
    Avez vous une idée ?
    Merci
    Hervé

    • Bonsoir,

      Il ne faut pas oublier d’ajouter ce nouvel utilisateur dans les mêmes groupes natifs que pi. Pour en obtenir la liste :
      cat /etc/group | grep pi

      ensuite il faut exécuter cette commande pour chaque groupe :
      usermod -a -G groupe nouvel_utilisateur

      où « groupe » est le nom du groupe à affecter au nouvel utilisateur et « nouvel_utilisateur » le login du nouvel utilisateur.

      Si cela n’est pas fait, le nouvel utilisateur créé n’a pas accès à certaines ressources (audio, gpio etc…)

      Ced

  6. Bonjour,
    Merci pour ce tuto. J’ai bien suivi toutes les étapes mais lors du test du micro, j’ai un fort grésillement et ma voix est quasi inaudible.
    Tu sais d’ou ca peut venir ?
    Merci

    • Bonjour Pang,

      Il me faudrait plus d’info sur le matériel utilisé mais là, il semblerait que cela soit un problème matériel. Surtout si tu entends ta voix dans le fond.

      Cela peut-être dû à un défaut de masse ou une pollution de ton alimentation. Ce sont là que des suppositions, mais si j’étais toi, j’essaierai de changer d’alimentation et de micro dans un premier temps pour voir le résultat.

      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.