Bonjour la communauté.
Pour ceux qui, comme moi, s’amusent à gérer leur maison/jeedom par la voix, peut-être cette app « maison » présentera-t-elle de l’intérêt: je l’ai appelée « domotix » en attendant mieux et elle interagit avec, eh oui, les interactions de jeedom.
Quickstart:
Une courte vidéo (https://youtu.be/zSZmVpTghXU) en indique le fonctionnement pour les pressés. Sinon, voici,résumé, le
Contexte:
- J’ai essayé de nombreuses solutions de stt (reconnaissance vocale) mais me suis chaque fois heurté à la qualité du matériel d’enregistrement. Peut-être n’ai-je pas mis le prix, je ne me suis pas équipé non plus de microphones spatiaux ou autres produits sans doute efficaces mais aussi coûteux.
- Google home a alors débarqué chez moi et j’ai été bluffé justement par le petit nombre de faux-positifs qu’il offrait. A partir de ce moment, en combinaison avec le plugin gsh en mode standalone (merci au concepteur), mon jeedom procure un vrai confort d’utilisation …
- Pourquoi changer une équipe qui gagne? Parce que depuis quelque temps, des applications dans lesquelles on s’investit deviennent soit payantes (IFTTT), soit caduques (dialogflow), et ça, pour rester poli, ça me gonfle, moi qui essaie au maximum de ne pas être « cloud-dépendant ». Même GH modifie de temps en temps des paramètres de configuration et, comme dit Loïc, le mode standalone de gsh durera le temps que Google le voudra!!
- « Fort » de cette analyse, j’ai cherché une solution pour rester en local, avoir une bonne reconnaissance vocale à bas prix, un tts tout aussi accessible, le tout donnant le moins de faux-positifs possibles. Le smartphone s’imposait.
- MON problème: j’ai touché à une petite vingtaine de langages, en maîtrise plutôt bien 3, 4 mais me lancer dans android studio n’a pas été (et n’est toujours pas) ma tasse de thé.
Premier essai:
J’ai trouvé un bout de code basé sur « speechrecognizer » qui se lance comme un service sur smartphone et écoute donc en permanence un « wake word » (hotword,mot d’appel,etc.). Si je me souviens bien, il s’agit de l’entreprise picovoice. J’y ai ajouté (en suant sang et eau) le même code mais lancé comme app et écoutant l’ordre à transmettre à jeedom (via api http). L’app se fermait alors et redonnait le contrôle au service initial.
Ca donnait quelque chose comme :
- Copperfield
- oui
- ouvre le portail
- voilà
- Copperfield
- etc.
Ca marchait bien, plus de « ok google », échanges beaucoup plus naturels du coup mais… donnait quand même pas mal de faux-positifs (notamment avec les dialogues à la télé). J’ai alors fait des essais en cherchant le wake word idéal. Pour cela j’ai dû créer des comptes sur le site: on y exerce le mot d’appel (choixpeau magique, Bernardo, Vladimir, …) et on télécharge puis stocke sa signature (ou son empreinte, je ne sais plus le terme employé) dans le smartphone.
Picovoice vante son produit comme travaillant localement, donc pas de latence due au transit par le net. C’est vrai! Mais au lancement du service, je me suis rendu compte qu’une connexion internet vérifiait la validité du compte… Et là, à un moment donné, je me suis retrouvé exclu car n’ayant pas respecté les règles des conditions générales. Je me souviens leur avoir écrit que je faisais des essais et que le plan « free » devait s’appliquer. Ils m’ont répondu par la même formule lapidaire « non-respect des conditions générales ». Il y a donc un truc qui m’échappe et j’ai laissé tomber (d’autant qu’on se retrouve encore dépendant du cloud, même si ce n’est qu’au lancement et que le service fonctionnant non-stop consomme de la batterie)
Deuxième essai:
C’est alors qu’a débarqué dans ma vie l’IA, l’intelligence artificielle. Là aussi, bluffé par ses potentialités, je me suis dit que si je ne m’y entendais pas dans les arcanes d’android, je pouvais peut-être me dépatouiller en mettant bout à bout des morceaux de code générés par plus doué que moi.
C’est ainsi qu’a commencé cette aventure (que je recommande vivement!):
- Peux-tu me créer le code android mettant l’appareil en écoute dès le lancement de l’application, permettant le lancement de routines suivant les ordres que je donne et s’auto éteignant après 1 minute d’inactivité ?
- Quel code pour faire une requête de type get dans android?
- J’aimerais que mon app se lance avec un raccourci (touche du smartphone éventuellement)
Voilà quelques questions posées à chatgpt qui m’ont permis de partir de 0 et n’avoir que le strict minimum pour satisfaire mes besoins. On me dira à raison que du coup, le code n’est pas optimisé et qu’il consomme peut-être aussi trop de batterie. Sans doute, mais comme il n’est lancé qu’un temps limité à 30 sec, à moi, il convient comme ça.
Fonctionnement:
- double-pression sur le bouton power (un peu comme un talkie-walkie)
- l’app se lance et écoute
- je donne l’ordre vocal
- l’app transmet grâce à l’URL fournie par l’équipe jeedom l’interaction au module du même nom
- l’app répond « ok » ou « pas compris la demande »
- l’app écoute
- l’app se ferme après 30 secondes
Rem: comme j’avais écrit sur le raspberry hébergeant jeedom un programme en python relié à l’api « OPENAI », j’ai ajouté la possibilité de faire une demande vocale à chatgpt, le programme m’envoyant la réponse dans ma boîte mail.
Voilà. Je suis assez content de moi. Ce que je n’arrive pas à faire, c’est déclencher le programme même si l’écran est verrouillé (oui, je sais, c’est plus secure ainsi mais ce serait tellement plus convivial de voir une tâche exécutée juste après l’avoir demandée).
Todo:
- je ne désespère pas de trouver un jour un moyen d’appeler domotix par la voix plutôt que par une pression sur l’icône ou une double-pression sur power…
- pouvoir passer à travers l’écran verrouillé sans perdre la protection ce ce verrou (?)
Voici la vidéo: https://youtu.be/zSZmVpTghXU
… et l’apk pour Android >= 9.0(comme d’hab, autoriser les sources inconnues) : (https://)
[EDIT : ]… Lien désactivé ce 23 septembre, une nouvelle version totalement repensée bientôt disponible.
[EDIT 2:] J’ai procédé à une refonte complète de « domotix » rebaptisé en « jeedomix » car une recherche google m’a appris ce que je redoutais: le nom était déjà utilisé…
La philosophie générale qu’on peut lire à l’origine de ce post est maintenue mais comme le programme est désormais un service (écoute non-stop), je me détourne de domotix et me consacre désormais à jeedomix pour lequel je me suis permis un nouveau post:
Interactions par la voix sur Android.
Merci de m’avoir lu,
Claude