ldleman / yana-server

Interface PHP de domotique Y.A.N.A (You Are Not Alone)
http://projet.idleman.fr/yana
107 stars 59 forks source link

[Projet] Yana & Jarvis #285

Open valentin8709 opened 7 years ago

valentin8709 commented 7 years ago

Salut Idleman! Maintenant que je recommence à avoir un peu de temps, je me repenche sur Yana. Et pour avoir testé plusieurs solutions domotiques, je reviens toujours vers mon petit Yana Server customisé. Par contre, il reste selon moi un point faible: la reconnaissance vocale. Il faut un client sous Windows, qui au passage ne fonctionne pas hyper bien, est un peu lourd (ouvrir plusieurs fenêtres et applis pour que ça fonctionne), et ça ne prend pas en charge le mode "discussion". Bref je ne voudrai pas t'offenser mais je ne trouve pas ça utilisable à ce jour.

J'ai cherché plusieurs alternatives, et je suis tombé sur Jarvis que tu dois peut être déjà connaître. Si ce n'est pas le cas, ça vaut éventuellement le coup que t'y jettes un oeil :) J'aimerai donc intégrer, ou plutôt "lier" Jarvis et Yana. De cette façon, Jarvis (que l'on peur renommer comme on le souhaite, donc en Yana) s'occuperait d'écouter en permanence, et directement depuis le Raspberry, puis enverra les requêtes (si reconnues comme valides) à Yana via appel URL. Jarvis peur récupérer le retour de l'appel, et donc exprimer une réponse, ou Yana peut directement appeler Jarvis pour la dite réponse.

D'où plusieurs questionnements: déjà, est-ce que tu penses que c'est une bonne idée? Ensuite, est-il possible de faire cela via plugin? Il faudrait que Yana synchronise les commandes vocales dans le fichier de Jarvis, et que Yana appelle directement Jarvis lors des réponses.

Exemple:

Du point de vue technique, tout est possible, Jarvis peut être utilisé en ligne de commande, via API, peut être personnalisé, peut traiter le mode conversation comme ci-dessus, peut passer par internet pour la reconnaissance / synthèse mais peut aussi utiliser des outils sans connexion requise à installer directement sur le Raspberry (qui d'ailleurs fonctionnent vraiment bien), dispose d'un système de market un peu comme Yana, bref ce qui m'intéresse c'est optimiser le concept Yana / Jarvis. Techniquement, je trouverai comment faire une fois le modèle définie.

Voili voilou, merci d'avance, évidemment n'hésite pas si tu souhaites avoir plus de précisions =)

ldleman commented 7 years ago

Yop ! :)

Tout d'abord pas de soucis a critiquer le yana actuel, je suis bien conscient de ses faiblesses et de ses manques, nottamment de la difficulté de le porter sur le rpi directement (le mode discussion et l'ergonomie n'étant qu'une question de temps de dev à consacrer au projet alors que la reco vocale sur du linux c'est plus coton ^^). Bref yana n'a pas vocation a avoir un seul client unique de communication, c'est pourquoi j'ai implémenté la notions de communication socket afin de pouvoir dialoguer avec plusieurs interfaces différentes en fonction de l'os ou du type d'appareil.

Pour rentrer plus en détail dans la technique je te répondrais avec plaisir mais ne connaissant Jarvis que de nom j'ignore comment il fonctionne de son coté et ce qu'attends le client vocale pour être en accord avec la plateforme domotique.

A l'heure actuelle yana peux fonctionner via des ordres url et des réponses JSON (ancien système de communication serveur / interface) OU via les socket (nouveau système), de son coté jarvis fonctionne comment ? Il y a une notion de client vocal et de serveur ou c'est du tout en un ? (ce qui serait dommage) si client il y a , il reçoit les textes a synthetiser sous quel format et il envois les textes reconnus sous quels format ?

Si la partie reconnaissance+synthèse vocale de jarvis peut être a 100% gerée en ligne de commande c'est effectivement reliable a yana sous forme de plugins.

maditnerd commented 7 years ago

Pour avoir tester vite fait, Jarvis est très intéressant. Il gère un paquet de moteur de STT/TTS : http://domotiquefacile.fr/jarvis/content/stt.

Le plus impressionnant, ça reste le moteur SnowBoy.

En gros SnowBoy est un détecteur de mot clé hors ligne, il reconnaît le premier mot dit (Yana) puis délégue ça à un moteur en ligne (bing speech par ex.) Sur le site web, les gens peuvent enregistrer les phrases/mot clé et puis télécharger le modèle. Plus de gens participent plus la reconnaissance vocale hors ligne est précise pour tout le monde.

Evidemment rien n’empêche d'enregistrer des phrases complète (genre "Allume le salon"), si on oublie les faux positif (j'ai pas tenté de régler ça au petit oignon) OHMYGAD ça marche, et c'est de loin la reco la plus réactif que j'ai vu et ça fonctionne sans internet (reco/synthèse) donc impressionnant.

Alors certes il faut enregistrer les phrases que l'on veut utiliser en avance et c'est pas très flexible, mais y a du potentiel.

valentin8709 commented 7 years ago

Merci pour l'explication, du coup ça va bien éclairer Idleman je pense :) Pour moi, Jarvis est LA solution de reconnaissance / synthèse vocale pour Linux et Unix Like.

@ldleman Jarvis est en standalone, pas de client / serveur. Mais je ne vois pas en quoi ça gène, si il y a possibilité de le relier à Yana, il y aurait d'un côté UN coeur domotique (Yana Server), et de l'autre, plein de petits Jarvis. Il faut juste trouver un moyen de synchroniser tout ça. Jarvis se base sur un fichier contenant toutes les phrases qui peuvent être reconnues, et les actions associées. Du côté de Yana, il suffirait de renvoyer la réponse sur le Jarvis ayant initié la requête.

Le problème: comment faire pour le retour des requêtes? Modifier tous les retours de Yana directement? Modifier Jarvis pour interpréter les retours de Yana? Une autre solution?

(Je sais pas si je suis très clair =/ )

ldleman commented 7 years ago

Okay, je ne suis pas fan du passage par le net et encore moins de bing et de ses limitations mais si il est possible de choisir d'autres moteurs performants et locaux ça me vas :).

J'ai cru comprendre qu'un simple jarvis.sh -s "hello world" permet le tts donc ça ne devrait pas être trop complexe à gerer par exemple en ajoutant un hook permettant de réécrir la méthode Client::talk via un plugin avec la commande : exec('jarvis.sh -s "$myText"');

Pour la partie reconnaissance c'est plus coton, la syntaxe de commande utilisée n'étant pas du totu la même que celle de yana mais je peux y bosser, faut que je trouve un micro simple a installer/pas cher sur mon rpi histoire d'effectuer mes tests, vous avez des suggestions ?

ldleman commented 7 years ago

Sur le tableau je ne vois pas OHMYGAD et aucun autre moteur ne semble être à la fois hors ligne et reconnaitre les commandes, ça par contre ça pue pas mal...

maditnerd commented 7 years ago

😄 désolé je voulais dire oh my god, Le moteur que j'ai testé c'est SnowBoy https://github.com/kitt-ai/snowboy

De base il est fait pour reconnaître des mot clés, mais ça a l'air de marcher avec des phrases qu'on lui a préalablement appris. L'apprentissage peut se faire sur le site web et apparemment même directement à l'aide d'une api Exemple ici : http://docs.kitt.ai/snowboy/ C'est la partie qui réclament internet et qui est closed-source. Une fois la phrase enregistré il fournit un fichier .pmdl , il suffit de le mettre sur le Raspberry Pi pour qu'il soit capable de reconnaître la phrase/mot hors ligne.

Si j'ai bien compris, si 2000 personnes s'enregistre en train de dire une phrase/mot, le modèle (un fichier à copier sur le raspberry pi) devient universel et il suffit d'avoir le fichier .pmdl pour que ça marche.

valentin8709 commented 7 years ago

Pour un micro qui normalement marche en plug and play (USB) et de bonne qualité: https://www.amazon.fr/dp/B01LCIGY8U/ref=cm_sw_r_cp_ep_dp_-wFmybMAE6C66 Par contre pas encore testé, je l'ai commandé j'attends de le recevoir.

Sinon, pas encore testé non plus, mais il existe pocketsphynx qui permet la reconnaissance hors-ligne (http://domotiquefacile.fr/jarvis/content/stt).

ldleman commented 7 years ago

Pour le micro je me demande si ce n'est pas mieux de tabler sur un auto alimenté étant donné la faibel alim du rpi en ce qui concerne les peripheriques.

Je me suis commandé celui là pour le coup (je suis pas fan d'amazon) pas d'auto alim mais il a l'air d'avoir été eprouvé sur le rpi je ne voudrait pas être bloqué par une bête histoire de drivers indisponible :p .

Concernant la reco je vais voir ce que je peux faire pour ajouter une config des moteurs de reco / synthses sur yana de manière a pouvoir plugger jarvis et autres solutions mais je pense que ce n'ets pas encore la solution ultime, il faudrait de la reco de commandes entieres, en hors ligne, en francais, performante et sur rpi (oui je sais ^^).

J'ai un user qui a creusé du coté de windows Iot qui s'applique sur le rpi et qui permet l'utilisation de la lib de reco windows actuellement utilisée par yana client, J'en ai un autre qui a bien progressé coté pocketsphinx + model vocal francais, il faudrait que je creuse de ces cotés mais je manque de temps.

Pour ce qui est de la synthèse c'est beaucoup plus simple, des soft de synthèse gratuit, hors ligne et installable sur linux existant déjà.

valentin8709 commented 7 years ago

Merci pour toutes ces précisions, je suis assez d'accord avec toi sur les points de vue état des lieux / vie privée (hors ligne) / etc... Par contre, j'aimerai bien éviter l'utilisation de Windows IoT.

De mon côté je vais essayer de développer un plugin pour Jarvis, qui récupèrera la liste des commandes via le socket de Yana Server, et parsera les réponses de façon adéquate (si type="talk" alors lire "sentence"). L'idée étant de ne pas toucher à Yana, et d'avoir un simple plugin à installer sur Jarvis. Avec ce dernier j'essaierai de n'utiliser que des outils hors ligne (snowboy, pocketsphynx et pico2wav). On verra bien ce que ça donne =)

valentin8709 commented 7 years ago

J'aurai besoin de quelques infos par contre: comment récupérer la liste des commandes ET les URL à appeler pour déclencher ces commandes? (En gros récupérer la liste du widget "Commandes Vocales"?). Il y a bien cette url:https://XXX/yana-server/action.php?action=vocalinfo_commands mais cela ne renvoie pas les URL qu'il est possible d'appeler pour déclencher les dites commandes.

Sinon, je peux aussi directement taper dans la base SQLite, mais c'est pas très jolie =/

ldleman commented 7 years ago

Avec l'action "GET_SPEECH_COMMAND", ex : http://mon.raspberry.pi/hcc3/action.php?action=GET_SPEECH_COMMAND Tu as une doc ici : http://projet.idleman.fr/yana/?page=Documentation

Par contre il s'agit de l'ancien protocole de communication, le nouveaux étant le socket que je te conseille vivement.

valentin8709 commented 7 years ago

Super merci, c'est ce que je cherchais =) Par contre pour l'utilisation du socket, je veux bien passer par là mais je ne comprend pas trop la doc, comment se connecter au socket? Tous tes exemples sont en php, mais en principe je pourrai faire des requêtes depuis n'importe quel langage? (j'utiliserai bash très probablement)

ldleman commented 7 years ago

Il faut te connecter au serveur socket en TCP sur le port 9999, une fois connecté tu peux t’authentifier et lancer des commandes d'écoute ou de réception via du JSON.

Effectivement tu peux faire du socket avec n'importe quel langage, celui ci étant un des fondements du web.

  1. Tu lance le serveur socket sur ton yana via la commande php /chemin/yana/socket.php
  2. Tu te connecte avec ton programme au serveur socket (donc a l'adresse du rpi) sur le port 9999
  3. Tu t'authentifie via la commande json CLIENT_INFOS ou tu devra fournir le token ainsi que la localisation du client (salon, cuisine, mobile ...) et son type (si l écoute, si il parle ou si c'est une interface type visage)
  4. Tu peux lancer des commandes ou ecouter les commandes du serveur en fonction du type de ton client.

La doc est ici : http://projet.idleman.fr/yana/?page=Interfacev2

Erim32 commented 7 years ago

Bonjour, je suis très intéressé par ton projet, n'hésite pas a signaler sur ce post l'avancement. Ou si tu as besoin et que je suis en mesure de t'aider les difficultés que tu rencontre.

valentin8709 commented 7 years ago

Merci Erim32 :) J'ai reçu mon micro il y a quelques jours. Le plugin est fini mais je n'ai pas encore testé. Pour l'instant, à chaque lancement de Jarvis, les commandes vocales de Yana sont récupérées, et lorsqu'elles sont déclenchées renvoient le retour de Yana (genre "bien maître"). Il faut que je fasse quelques tests, que je publie le plugin est tout sera ok :)

Si tu veux une date, je pense que ce sera un peu après Noël (pas trop le temps cette semaine).

flyleold commented 7 years ago

message transferer dans la bonne section

AF340 commented 7 years ago

Hello, Juste une remarque sur l'intro de valou, il existe aussi 2 clients sur android, dont le mien qui fonctionne très bien... ;) Cela dit, un projet avec un RPI comme client est sans doute aussi intéressant, surtout que google entend bien étendre ses actions IOT sur RPI/

Slts

2017-05-10 9:54 GMT+02:00 flyleold notifications@github.com:

bonjour je cherche a installer yana sur pi equipé de mate lors de l'instalation je bloque sur Configuration de desktop-file-utils (armhf) impossible de passer cette etape ca reste bloqué reconfiguration du paquet avec dpkg je peux passer cette etape par contre impossible d'acceder a yana 404 erreur

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/ldleman/yana-server/issues/285#issuecomment-300404648, or mute the thread https://github.com/notifications/unsubscribe-auth/ASWheKqsoQrV3-a43dMKF5CH5wKg37WSks5r4W0-gaJpZM4K7hOK .

victor81000 commented 6 years ago

bonjour, je suis avec interet l'affaire, j'ai domoticz couplé avec yana ( nan, ils ont pas encore fait de petit.... XD) j'ais installé yanalinux recemment mais apparement, le fait que google change son api fait qu'il ne fonctionne plus. je pourrais installer jarvis mais decidement non, je prefere yana...alors ( et puis, si on peut faire en sorte que rien ne sorte de la maison c'est encore mieux XD oui, c'est bientot noel en plus..... ;)

valentin8709 commented 6 years ago

Hello =) Merci pour l'intérêt que tu portes au projet. Malheureusement, je n'ai plus le temps de travailler dessus =/ J'ai acheté un bon micro pour les tests, crée un plugin Jarvis qui synchronise la liste des commandes dispos via Yana et appelle l'url de déclenchement. Je n'ai pas encore géré le retour, mais de mémoire c'est un simple json à parser. [EDIT]: en fait si j'ai déjà fais la gestion des retours (comme quoi ça fait longtemps que je m'y suis par remis... La prochaine étape c'est tests + debug.

Le projet est donc en suspens, et je ne pense pas m'y remettre de si tôt. Par contre je ne laisse pas tomber pour autant, c'est quelque chose que je finirai pour sûr, et je mettrai à jour ce fil au fur et à mesure.

Personellement, je n'ai jamais accroché aux clients Yana bien que je n'ai pas encore testé Domocom ed AF340. Jarvis est excellent sur certains points, mais n'a pas les avantages de Yana. D'où le mixe des deux =)

victor81000 commented 6 years ago

merci de ton retour, j'ai aussi fait appel aux bonnes volontés de easydomoticz pour ressusciter yanalinux ;). et milles merci pour tout votre travail :)

maditnerd commented 6 years ago

Salut, c'est moi qui avait fait yana-linux, ça fait un bail que j'ai mis de coté la reconnaissance vocale donc j'imagine que ça doit plus marcher des masses. J'ai changé la doc pour bien le préciser, désolé à ceux à qui j'ai crée un faux espoir 😮

C'était basé sur un hack de Steven Hickson (https://github.com/StevenHickson/PiAUISuite) quand il était possible d'utiliser l'api de google sans clé en bricolant des requêtes webs bien crados.

Depuis Google a crée un module pour la reconnaissance vocale : https://aiyprojects.withgoogle.com/voice/#project-overview Donc j'imagine que si vous voulez avoir de la reconnaissance vocale avec Google, faut creuser là bas. Soit-dit en passant le kit a un micro/haut parleur du coup ça peut être pas mal à avoir dans tout les cas.

Sinon si vous voulez de la reconnaissance vocale hors-ligne, qui ne marche qu'avec des phrases prédéfini, j'avais fait un exemple vite fait avec snowboy pour contrôler un websocket https://github.com/maditnerd/yana-linux La doc officiel est pas mal fichu : http://docs.kitt.ai/snowboy/ et y a moyen de l'utiliser avec alexa, si vous voulez pas passer par https://www.openjarvis.com/

L'avantage c'est que snowboy est (relativement) facile à installer et on peut faire des programmes en python pour l'utiliser. Après c'est censé être utilisé qu'avec un mot-clé donc c'est pas dit que ce soit pas une mauvaise piste.

maditnerd commented 6 years ago

J'ai reset le repo, j'y est mis des bouts de code qui pourrait être utile:

J'espère que ça pourra être utile si vous voulez bricoler vos propres clients, si vous avez besoin d'un coup de main, hésitez pas à demander.

valentin8709 commented 6 years ago

Merci beaucoup @maditnerd pour le repo et les infos complémentairs, ça sera utile pour sûr =)

victor81000 commented 6 years ago

merci de ta reactivité! :)

raspbian3301 commented 5 years ago

Salut la DREAM TEAM, Je reviens un peu tard sur le sujet dans l'espoir d'une réponse à cette question!! Yana est basé sur "SARAH" mais pour RPI - GPIO. Jusque la on est d'accord. Je tournais sous sarah (WIN7) et un gars de la communauté a créer un script qui permet de contourner les clés API de Google donc d'avoir les réponses de recherche ok google et s'est développé ainsi pleins de plugins autour de celui. Jusqu'a ce que google change mais a ce jour sa marche toujours. MA QUESTION EST : est il possible d'y récupérer les informations de sarah sous WINDOWS > RPI ou d'adapter ce plug pour RPI? Ce script utilise NIRCMD est donc incompatible avec raspi. Une soluce?

ldleman commented 5 years ago

Salut,

Yana utilise les même principe que sarah mais n'est pas basé sur la même technologie (seul l'ancienne de yana, YURI était un vrai fork de sara, nous avons redéveloppé le système entièrement lors de la naissance de yana car certaines fonctionnalités manquaient sur sarah pour intégerer pleinement notre bot au système )

Du coup je ne peux pas vraiment te répondre sur le sujet, le meixu serait de poser la question a jp encausse, fondateur de sarah qui doit pouvoir te répondre :).

Je te déconseille bien entendu l'utilisation des service google "a l'arrache" le géant du web modifiant régulièrement ses webservice, le plus logique serait de passer pas une solution de reconnaissance locale.

Amicalement,

Idle

Le 09/02/2019 à 17:15, raspbian3301 a écrit :

Salut la DREAM TEAM, Je reviens un peu tard sur le sujet dans l'espoir d'une réponse à cette question!! Yana est basé sur "SARAH" mais pour RPI - GPIO. Jusque la on est d'accord. Je tournais sous sarah (WIN7) et un gars de la communauté a créer un script qui permet de contourner les clés API de Google donc d'avoir les réponses de recherche ok google et s'est développé ainsi pleins de plugins autour de celui. Jusqu'a ce que google change mais a ce jour sa marche toujours. MA QUESTION EST : est il possible d'y récupérer les informations de sarah sous WINDOWS > RPI ou d'adapter ce plug pour RPI? Ce script utilise NIRCMD est donc incompatible avec raspi. Une soluce?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/ldleman/yana-server/issues/285#issuecomment-462057238, or mute the thread https://github.com/notifications/unsubscribe-auth/ACf-M00tsaT_G2HUa3Bzvf7JZD5QzHBZks5vLvQ9gaJpZM4K7hOK.