Je voudrais faire mon propre assistant vocal local

Voici le projet d’assistant vocal HA que j’ai en tête depuis un petit moment, et je cherche à trouver une solution pour avoir mon propre système DIY de reconnaissance vocale associé à Assist.
Voilà l’idée :

Prérequis que j’ai ou vais installer :

  • des haut parleurs dans toutes les pièces chez moi, le tout connecté à HA (pour musique et TTS)
  • des bandes à leds adressables (commandé par ESP32) dans toutes les pièces en éclairage indirect, connecté à HA, pour la lumière dite « de circulation » (on entre dans une pièce, une lumière indirecte s’allume. Plus personne, elle s’éteind. toussa, toussa)

Concept :
Un boitier avec un ESP32 (ou équivalent) avec un micro reconnait un mot clé de commande (Jarvis ou Marvin ou Alexa, whatever), enregistre les quelques secondes de la commande vocale qui suit en wav, transmet au RPI Home Assistant par wifi, transcrit le wav en texte, transmet à Assist qui traite la commande.

Accessoirement (et parce que je suis un nerd en puissance ! - et qu’il faut que ça fasse classe - ou frime selon les goûts)
Lors du wake up, utiliser les bandes leds de la pièce pour faire un truc du genre : LED Strip trail effect - YouTube (ça sert de retour visuel indiquant que la commande est en traitement). Une fois la commande traitée, dire (tts) « OK » ou alors un truc genre « Bien, maître » => pour les psychopathes mégalos.

Contraintes non négociables :

  • fonctionne en local (zero cloud)
  • total DIY (no GAFAM, no techno propriétaire)
  • electro-efficient (conso électrique super mini)
  • encombrement tout réduit
  • boitier esp+micro satellite alimenté par usb facile à installer un peu n’importe où dans n’importe quelle pièce

Et donc, après quelques recherches, j’ai découpé mon système comme suit :

  • un esp32 avec un micro et une extension genre tenserflow pour la reconnaissance du wake-word, puis enregistrement wav
  • une instance Rhasspy qui fait du Speech to Text depuis le wav
  • un transfert du texte généré vers Assist
  • Accessoirement HA doit pouvoir savoir de quelle pièce est émise la commande pour gérer le contexte (il y aurait un boitier satellite par pièce)

Quelqu’un aurait connaissance d’un projet similaire ou de briques (hard ou soft) déjà existantes pour faire avancer mon projet ?
Je suis capable d’adapter du code existant mais pas de me taper le projet en entier, n’ayant pas trop encore de bagage avec les technos ESP ou instance Rhasspy ou faire causer tout le monde ensemble.

Comme toujours, question, remarques ou critiques bienvenues !
Et d’avance, merci.

2 « J'aime »

Projet intéressant qui va dans le sens de HA: 2023: Home Assistant's year of Voice - Home Assistant

Comme assistant, il y a Génie aussi : Demo: Genie, privacy-preserving virtual assistant by Stanford - Home Assistant

Alexa de Amazon ? Dans Gafam, il y a Amazon :laughing:

Salut je crois que c’est le but d’anciennement ALMOND qui s’appelle GENIE

regarde dans la boutique des integrations

Salut,

NabuCasa ayant aquis Rhasspy, et ce qui est dit dans les liens partagés par @Giga77 ils va clairement y avoir des choses dans ce sens.

Les briques sont en train de se mettre ne place.
A l’heure actuelle, je ne sais pas si quelqu’un a réussi à tirer quoi que ce soit de Assist en Français. Ceux que j’ai entendu ne sont pas allé loin et mes tests se sont terminés sur des echecs :frowning:

Mais bon Assist c’est tout nouveau, il faudra 2 ou 3 releases supplémentaires pour arriver à quelque chose, et j’ai peur que de se lancer en l’état c’est devoir perdre pas mal de temps pour combler en DIY des trous qui le seront dans une release.

Le problème principale je pense sera le matériel. avoir des micros aussi efficaces qu’une Echo ça va pas être évident. Et c’es là dessus qu’il faudrait se pencher le plus je pense.

1 « J'aime »

Je pensais faire un truc du genre si qqun annonce « ok Google » ou « Alexa », la requête part dans le service concerné.
Et un wake word pour HA qui se limite en local

Perso, j’ai pas Alexa , j’ai juste un Google Mini et un Nest Hub que je n’utilise que pour faire du TTS

J’irai explorer les pistes indiquées ici plus tard; là chuis en weekend :grin:

Aller, je déterre . Avec la maj 2023.5 as tu avancer sur le sujet. Je suis assez curieux. La problématique pour moi est les micros. Le dot amazon possède un quartet de micro longue portée, faudrait trouver l equivalance pr le brancher sur un esp.
As tu avancer ds tes recherches?

Effectivement, avec la dernière mise à jour tu peux désormais faire un assistant vocal local.

Il y a même une solution pour faire un micro DIY basé sur un ESP avec ESPHome :

1 « J'aime »

Salut,
Basé sur l’atom écho ( comme par hasard, c’est en rupture partout.) . Pas sur que ça fonctionne avec d’autre esp.

Ouai enfin, j’ai vu la demo sur l’atom, je suis assez dubitatif quand même Je ne possède pas d amazon dot, mais mes parents oui. et il faut dire que j’étais assez bluffé de la puissance des micros. dans l’autre pièce, tu arrivais a faire marcher alexa. Là on est pas sur un micro ou il faut parler a 5 cm du bins.

et en plus t’as un haut parleur integré sur le dot, amazon a quand même fait un super produit. il faudrait le même hardware mais sans la partie logiciel. Je pense qu’a l’heure de l’open source, il ya tous ce qui faut pour reproduire ca, mais mes compétences hélas ne le permettent pas.

Bonjour,

Je cherche un tuto explique comment passer un ordre vocal…

En effet a ce stade j’ai installé piper et whisper puis intégré wyoming.

J’ai configuré l’assistant vocal en mettant piper et whisper comme STT et TTS.

Et j’ai fais un alias pour un relai zigbee que j’ai appelé « lumiere aquarium ».

Mais je ne trouve rien ensuite… comment faire pour dire « allume la lumiere aquarium » et que ça s’actionne? Une automatisation?

Hello

Tout est clairement expliqué dans la doc de assist , quel est exactement ton problème ?

Bonjour,

Merci pour le lien.

J’ai donc creer un bouton « assist ». Quand j’appui dessus un menu s’ouvre.

Si je tape « eteins lumiere aquarium », la prise connectée se coupe bien.

Par contre a l’oral ça ne fonctionne pas… la phrase « eteins lumiere aquarium » s’ecrit bien apres que j’ai parlé.

Mais on me repond : desolé je n’ai pas compris…
Qu’est-ce que j’oubli?

Quelqu’un pour m’aider?

Salut jette un coup d’oeil cela a l’air de correspondre à ta demande

Bonsoir,

pour raviver ce thread, j’ai suivi la conférence d’hier sur YT ici la video explique comment faire son propre voice assistant NO-CLOUD a base d’un ESP32 + un micro et un micro ampli pour y connecter un haut parleur.
faut un peu de patience, la partie ESP32 n’est pas au début de la video mais ca vaut la peine, d’ailleurs j’ai commandé le matos sur AlieX
Voilà voilà

Salut,
regarde ce post Projet voice control, ca en parle déja du matos pour faire un assist vocal avec un ESP32.

1 « J'aime »

Bon alors voici où j’en suis depuis le temps :

  • j’ai installé un RPI3 avec wyoming-satellite
  • ajouté un micro (usb)
  • ajouté des haut-parleurs
  • installé mpd (service), j’ai un media_player en plus (pratique)
  • ajouté tout ça dans HA

Openwakeword marche bien (même des fois un peu trop, il récupère des trucs aléatoirement, depuis la TV), l’enregistrement des ordres est propre (wav sans trop de bruit).
PAR CONTRE : whisper est dans les choux complet ! il ne comprend rien, j’ai beau tweeker dans tous les sens, essayer d’autres modèles ou paramètre, nada : y capte keud

Du coup, je me demandais si je peux utiliser un truc cloud dans mon pipeline, en attendant d’avoir quelque chose capable de traiter du STT (genre GPU, TPU Coral, whatever…)
Si qqun a des infos/idées/tutos, je prends; c’est le dernier truc qui me manque pour faire mon assistant local.

A noter que je prends aussi si qqun sait comment créer plusieurs wakewords parce que je voudrais que ça déclenche des pipelines différents.

Salut,
Utilise Vosk a la place de whisper et porcupine1 a la place de openwakeword.

les modules complémentaire son dispo sur ce github:

1 « J'aime »

Vosk foirasse lamentablement avec des erreurs docker (j’utilise pas docker) ou des trucs du genre :
main.py: error: argument --correct-sentences: invalid float value: ‹ null ›