Installation de Rhasspy
Puisque nous utiliserons Docker, nous allons installer l’image de Rhasspy
docker pull rhasspy/rhasspy
Et là, on va tranquillement se faire une tisane (oui, j’ai arrêté le café) le temps que ça se télécharge et ça s’installe; tout au plus 5 minutes je dirais.
Et si tout se passe bien, tu devrais finir avec un truc comme ça :
8716c2918376: Pull complete
4127b7a39349: Pull complete
596cb04f8218: Pull complete
Digest: sha256:7ad16678074d1431872f12e1010961d5134d0af658fb6bac3a1c33ce18cb09be
Status: Downloaded newer image for rhasspy/rhasspy:latest
docker.io/rhasspy/rhasspy:latest
pi@rasp-test:~ $
Et voilà Rhasspy est installé. Est ce que ce n’est pas plus simple ? 😉
Démarrage de Rhasspy
Bon, maintenant que tout est prêt, il nous reste plus qu’à lancer Rhasspy. Mais rappelle-toi, Rhasspy est dans une bulle Docker, donc c’est cette bulle qu’on va lancer.
docker run -it -p 12101:12101 \
-v "$HOME/.config/rhasspy/profiles:/profiles" \
-v "/etc/localtime:/etc/localtime:ro" \
--device /dev/snd:/dev/snd \
--name rhasspy \
rhasspy/rhasspy \
--user-profiles /profiles \
--profile fr
La commande ci dessus te permettra de voir les logs si quelque chose cloche.
Pour lancer Rhasspy en tâche de fond :
docker run -p 12101:12101 \
-v "$HOME/.config/rhasspy/profiles:/profiles" \
-v "/etc/localtime:/etc/localtime:ro" \
-d --restart unless-stopped \
--device /dev/snd:/dev/snd \
--name rhasspy \
rhasspy/rhasspy \
--user-profiles /profiles \
--profile fr
Comme ça, tu vas certainement te demander à quoi servent tous ces arguments. Alors on va résumer tout ça.
Les arguments
-ti : allocation d’un pseudo TTY (console) et on garde le STDIN ouvert
-p : Sachant que Rhasspy est accessible via le réseau, il écoute donc sur un port qu’on appelle port TCP. un port ne peut-être utilisé que par une application. Rhasspy utilise le port 12101 par défaut. Donc dans sa bulle, il écoute sur le port 12101. Cependant, depuis ton navigateur web, il va bien falloir que tu accèdes à ce port. Hé bien grâce à ce paramètre, tu définis le port qui sera à l’extérieur de la bulle et qui se rediriger par Docker sur le port 12101 dans la bulle. Après tu as le choix, tu peux garder le même (ce qui est le cas ici), ou bien en choisir un autre.
-d : Pour exécuter notre conteneur en mode détaché, en arrière plan en quelque sorte.
–restart unless-stopped : Il redémarrera à chaque fois le conteneur Rhasspy quelque soit le code de sortie (erreur ou non) sauf si on a expressément demandé à ce que le conteneur soit arrêté.
-v : Même si Rhasspy est dans sa bulle, parfois, on a besoin d’accéder facilement à certains fichiers. Par exemple, les fichiers de configuration. Il faut donc les sortir de la bulle tout en les rendant accessibles à celle-ci. Dans cette ligne de commande, on dit à Docker que tous les fichiers du répertoire /profiles
de la bulle sont en fait à aller chercher sur la carte SD à l’emplacement $HOME/.config/rhasspy/profiles
. Du coup, pour modifier la configuration de Rhasspy, nous aurons juste à aller dans ce répertoire.
–device : Avec Rhasspy, nous allons bien évidemment avoir besoin d’accéder au micro et à la sortie son du raspberry. Ici, on donne l’accès donc au périphérique son /dev/snd à notre bulle.
rhasspy/rhasspy : C’est la bulle qu’on souhaite lancer.
–user-profiles /profiles : Argument passé à Rhasspy quand il est lancé. Tu remarqueras qu’on lui dit d’aller chercher les fichiers de config dans le répertoire /profiles
de la bulle mais qu’on a vu un peu plus haut que ces fichiers sont en fait accessibles depuis notre home.
–profile fr : Argument passé à Rhasspy pour avoir un profil en français.
Bonjour et merci pour le tuto !
Non spécialiste, j’ai forcément raté qq chose avec ce retour au lancement…
pi@raspberrypi:~ $ docker run -it -p 12101:12101 \
>
“docker run” requires at least 1 argument.
See ‘docker run –help’.
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
Run a command in a new container
pi@raspberrypi:~ $ -v “$HOME/.config/rhasspy/profiles:/profiles” \
>
bash: -v : commande introuvable
pi@raspberrypi:~ $ -v “/etc/localtime:/etc/localtime:ro” \
>
bash: -v : commande introuvable
pi@raspberrypi:~ $ –device /dev/snd:/dev/snd \
>
bash: –device : commande introuvable
pi@raspberrypi:~ $ –name rhasspy \
>
bash: –name : commande introuvable
pi@raspberrypi:~ $ rhasspy/rhasspy \
>
bash: rhasspy/rhasspy: Aucun fichier ou dossier de ce type
pi@raspberrypi:~ $ –user-profiles /profiles \
>
bash: –user-profiles : commande introuvable
pi@raspberrypi:~ $ –profile fr^C
pi@raspberrypi:~ $
J’apprécierais bien un petit coup de pouce !
Merci
Seb
Bonsoir Seb,
Le problème vient du fait que pour des raisons que j’ignore, ce que tu as tapé n’interprète pas correctement le caractère \ qui permet simplement de faire un retour à la ligne sans pour autant arrêter la ligne de commande que l’on est en train de taper. Cela permet d’éviter d’afficher une ligne de commande trop longue.
Essaye directement ceci :
docker run -p 12101:12101 -v "$HOME/.config/rhasspy/profiles:/profiles" -v "/etc/localtime:/etc/localtime:ro" -d --restart unless-stopped --device /dev/snd:/dev/snd --name rhasspy rhasspy/rhasspy --user-profiles /profiles --profile fr
Ced
bonjour je cherche a utiliser un haut parleur Bluetooth avec une installation de rhasspy en docker .. J’ai donc suivi ton tuto pour installer pulseaudio puis mon enceinte bluetooth ..
cela fonctionne vlc ou aplay envoie le son correctement vers le haut parleur en question
mais rassphy si je lui demande de faire une sortie tts vers pulse ca se plante avec une message d’erreur [ERROR:2021-03-17 18:16:13,256] rhasspyserver_hermes: Command ‘[‘aplay’, ‘-q’, ‘-t’, ‘wav’, ‘-D’, ‘pulse’]’ returned non-zero exit status 1.
J’ai l’impression que le docker n’accédé pas au serveur pulse audio est ce qu’il y a une option a ajouter
Bonjour Casimir,
Effectivement, le problème est que Docker doit essayer d’accéder directement au périph son (le fameux /dev/snd/xx). Du coup, ça ne passe pas par PulseAudio.
Une alternative serait de passer soit par le réseau : https://wiki.archlinux.org/index.php/PulseAudio/Examples#PulseAudio_over_network
Et sinon, peut-être une piste avec les socket unix : https://stackoverflow.com/questions/51859636/docker-sharing-dev-snd-on-multiple-containers-leads-to-device-or-resource-bu
Cédric
Salut Ced,
Merci pour ce super tuto ….encore !!!
Dis moi, est ce que c’est normal que je sois obligé de modifier mon rhasspy json en étant root, j’ai l’impression qu’il y a un truc pas bon, idem pour créer le dossier snowboy..
Merci tout plein
(t’as avancé sur ton miroir?)
Hey, Salut Snake !! Comment vas tu ?
Non, je n’ai pas avancé sur le miroir lol. Là je suis en train de refaire tout mon bureau et ça me prend un temps de fou ! Mais l’idée est toujours là 😀
Pour ton fichier Rhasspy, ça sent le rhasspy en tant que root. Si tu lances la commande :
ps aux | grep rhasspy
oups aux | grep docker
si tu passes par Docker, tu auras l’utilisateur qui lance le processus.Si c’est root, alors ca peut être normal qu’il est créé les fichiers en tant que root.
Pour corriger, relancer Rhasspy (ou docker) en tant que user et faire un chown
pour réaffecter les droits à tout le répertoire.
Tiens moi au courant ;)
Ced
Salut Ced,
bien merci…
bon ben moi non plus, j’ai laché l’affaire (pour l instant), je suis sur la 3D et je me prépare une petite machine CNC…bref.
Je vais regarder de ce côté la, car effectivement je pense que c’est juste une histoire de droit, mais dès l’installation, car je n’ai pas le fichier “snowboy” de créer….
je te dirais ça quand j’aurais remis le nez dedans.
Bon courage pour le bureau 😉 à bientôt
Snake
Salut Ced,
c’est tout bon (enfin presque) …
le wakeword est en place, ça répond, ça agit….reste plus qu’à changer les sons un peu trop hard à mon goût…bon courage 😉
Tu verras c’est vraiment un bon remplaçant de snips !
Bon courage à toi aussi 🙂
Bonjour, merci Cédric. Je vais essayer.
Bonjour, merci pour le tuto. Je suis en train de faire mon installation.
j’ai une petite question à propos du lancement du docker.
avez vous une astuce pour lancer le docker au démarrage du RPi ?
J’ai essayé de créer un service mais je fais une erreur.
Merci d’avance
Bonjour Charly,
Essaye de modifier la ligne de démarrage du conteneur par ceci :
docker run -d --restart unless-stopped (le reste de la ligne de commande)
Cédric