Je souhaite créer un assistant vocal satellite sur un RPI3B+/Respeaker4 équivalent à mon ancienne version SNIPS
Quelle est le meilleur choix pour créer un assistant vocal satellite ayant les caractéristiques suivantes ?
Matériel Raspberry Pi 3b+ et Respeaker 4
Détection de wakeword (francophone) en local sur le satellite RPI3
STT en local sur le satellite RPI3
STT qui cherche à matcher sur un set de phrases pré-définies (mode Corrected dans Vosk)
Objectifs principaux :
Exécuter des tâches simples sur HomeAssistant (« Change la luminosité à 50% dans la cuisine », « Éteins toutes les lumières de la maison ».)
Retourner des informations depuis HA (« Quelle température dans la chambre »…)
WakeWord et STT en local sur le satellite pour éviter les latences et utiliser la puissance du RPI3 qui ne servira qu’à cette tâche (donc décharger le serveur RPI4 sur lequel tourne HA).
Objectif secondaire :
Pouvoir envoyer des phrases en dehors des conversations (« Alarme activée »; « Intrusion détectée »…)
Exigences principales :
Minimiser les mauvaises interprétations (au détriment des possibilités, je préfère pouvoir allumer les ampoules sans me répéter 10 fois s’il faut sacrifier le fait de pouvoir faire des actions plus complexes).
Exigences secondaires
Wakeword ‹ mon chouchou › (celui qui est le mieux reconnu dans mes tests après ‹ snips ›, même en prononciation française) => nécessite porcupine1 ou 3
Pourquoi de ce post ?
Après quelques expérimentations, je ne retrouve pas la fiabilité de mon ancien système SNIPS (RIP).
J’ai testé l’AtomEcho, il plante trop souvent.
J’ai testé un pipeline classique sur un satellite RPI3 avec whisper qui tourne sur le serveur HA RPI5 en médium mais la reconnaissance est trop souvent à côté de la plaque (ex : « Allume l’en poule » pour « Allume l’ampoule ») et c’est très long.
Pour la partie STT, la solution vosk me semble intéressante car il est possible de limiter la reconnaissance aux actions que l’on veut effectuer (moins d’erreurs d’interprétations). Le soucis c’est que je ne trouve pas de ressources pour connecter vosk (qui tourne sur le satellite RPI3) avec mon installation wyoming-satellite qui tourne également sur le RPI3. Pour reformuler, je ne trouve pas comment utiliser le STT en local sur le satellite sans passer par le STT installé sur le serveur HA (RPI4).
Ceci étant, et c’est aussi le sens de mon post, peut-être que je me trompe de direction. C’est pourquoi j’aurai aimé des retours d’expériences de personnes ayant installé ce type de configuration.
Merci par avance !
Ma configuration
Raspberry 3B+
ReSpeaker 4-Mic Array for Raspberry Pi
Salut,
quand tu vois la latence sur un RPI4, j’ai un doute sur un RPI3, beaucoup moins puissant.
Je suis sur un RPI4 pour mon HA, et j’utilise un Atom echo et un rpi3 en satellite ( micro et HP en usb ).
Aucun soucis de reconnaissance, ca met 2-4s à répondre.
Pour le Atom echo, je n’utilise pas le wakeword, je passe par le bouton. Ça ne plante pas.
« quand tu vois la latence sur un RPI4, j’ai un doute sur un RPI3, beaucoup moins puissant. »
=> c’est sûr ce point que j’ai un peu de mal. J’avais installé il y a 5ans ou plus un Snips sur ce RPI3, c’était très fluide. J’espérais trouver une solution aux mêmes performances tant d’années plus tard (comme je disais quitte à installer un modèle réduit en mode limited ou corrected comme vosk le permet).
D’autant plus que je ne prévois pas d’installer grand chose d’autre sur ce PI3 (un motion pour la caméra) alors qu’avant en plus il y avait une instance Domotiz dessus + l’interface graphique (actuellement il est en headless).
Ce qui me frusque également c’est que je ne trouve aucune doc / tuto pour brancher mon wyoming-satellite à vosk (s’il se branche au STT sur HA c’est que c’est forcement possible).Il y a bien les paramètres wake-uri, event-uri mais pas stt_uri !?
J’ai cru voir qu’il y avait peut-être possibilité de passer par Mosquitto mais si c’est faisable, c’est un marteau pour écraser une mouche par rapport au fait de juste passer un paramètre supplémentaire à wyoming-satellite
Pour info, en passant à Vosk sur mon HomeAssistant, cela est beaucoup plus rapide par contre je ne comprend pas tout à fait ce paramètre dans le module :
« Strictness when correcting sentences, where 0 is the most strict and larger values get less strict. This is only used when a YAML file exists for the model’s language at /share/vosk/sentences/.yaml. »
Est-ce que cela veut dire qu’il faut que je surcharge les intents de base de HA ?
Pour mon utilisation, cela me vas de me limiter à « Allumer / éteindre » les lumières etc. (pas d’intégration avec ChatGpt ou autre).
Oui, ont en parlent sur presque tous les post de assist
0 - force la transcription à être l’une des phrases modèles
supérieur à 0 - autorise le passage de plus de phrases qui ne sont pas similaires aux modèles
Par defaut 0, ça va utiliser une phrase identique dans la sentence. Si tu augmentes la valeur, ça t’enterra d’utiliser d’autre phrase qui pourrait correspondre, comme tu peux ajouter des sentences custom.
Cela dépasse le cadre de ma question originelle qui était de pouvoir installer Vosk sur mon RPI3B+ à la place de le faire sur HA mais serait-il possible de me donner un exemple concret sur le concept de strictness car je ne comprend pas très bien ?
Si je ne créé pas de fichier particulier (/share/vosk/sentences/.yaml), la valeur n’aura aucune incidence que je mette 0 ou 10 000 ?
Si je prend l’exemple
intents:
HassTurnOn:
data:
# name
# See intents/sentences/fr/homeassistant_HassTurnOn.yaml
# area
- sentences:
# Allume la lumiere du bureau
- "<allume> [<tous>] [<le>]<lumiere> [<dans>] [<le>]{area}"
# Allume le bureau
- "(<allume>|<eclaire>) [<le>]{area}"
# Lumière dans le bureau
- "<lumiere> [<dans>] [<le>]{area}"
slots:
domain: light
Et que je dis « Shtroumf la lumière du bureau », à 0 cela ne marchera pas et à 99 cela fonctionnera ?
Oui, ça ne sert que si tu utilises un yaml perso. Ça cherchera plus de phrase qui peuvent correspondre si tu l’augmentes. Donc ne touche pas, c’est option, si tu n’utilises pas un yaml custom.
La sentence de HA par défaut est déjà bien faite.
Merci, à vrai dire j’ai lu plusieurs fois la doc déjà mais ça ne m’éclaire pas plus que ça. J’ai du mal à trouver des tutos sur le sujet.
Dans ma configuration, j’ai activé « limit sentences » mais j’ai l’impression que ce n’est pas pris en compte (c’est marqué « When enabled, only sentences from the file /share/vosk/sentences/.yaml can be spoken. » et je n’ai pas créé ce fichier).
En fait, j’essaye de faire en sorte que l’assistant me comprenne mieux car dans la configuration actuelle il arrive encore parfois à comprendre « Timbres la lumière du bureau » à la place d’éteindre.
Cela veut dire que vosk est en mode Open-ended ? Ce qui est contradictoire avec la doc qui dit que dans ce mode c’est moins bon et plus long que whisper alors que dans les faits c’est le contraire ?
D’accord mais que faire quand il comprend « allume la lumière du savon » au lieu de « salon ».
Je pensais qu’en mode limited ou corrected cela pouvait aider d’où mes questionnements
Je t’en dirais pas plus, je ne me sers pas trop d’assist ( et pour mon utilisation, ça fonctionne bien ). Peut-être que @Krull56, t’en diras plus, s’il voit le message.