alexylem / jarvis

Jarvis.sh is a simple configurable multi-lang assistant.
http://openjarvis.com
MIT License
799 stars 198 forks source link

Plugin Visage pour Jarvis #366

Closed tchoul closed 7 years ago

tchoul commented 7 years ago

Bonjour,

J'ai un écran 3.5 et je me demandais comment on pouvait créer une interface visuel pour Jarvis, un visage comme le robot buddy par exemple.

Quelqun l'aurait déjà fait?

tigre-bleu commented 7 years ago

J'ai fait vaguement un truc du genre: Une matrice de Led et un shield ethernet sur un arduino. J'ai programmé une petite API HTTP sur l'arduino que j'appelle dans les Hooks pour afficher une image quand jarvis écoute une commande, et l'effacer quand jarvis repasse en veille.

tchoul commented 7 years ago

C'est déjà cool! Mais je voudrais un visage tout le temps, qui dormirait quand il n'est pas solicité, qui fasse semblant de chanter quand il y a une musique etc... Mais ça à l'air chaud à faire!

physicien commented 7 years ago

Pas si difficile à faire, mais faut faire des animations et avoir un visage pas trop horrible. Il faut également voir comment faire réagir le visage aux différents évènements pour que ce soit bien fluide (par contre, je ne connais pas assez le code de Jarvis pour dire spécifiquement ce qui serait la meilleure façon de faire).

tchoul commented 7 years ago

Ok je vais essayer de me renseigner mais bon je suis pas caler dans le domaine on verra bien... si je trouve quelque chose je reviens dans ce ticket

Jean-Bernard-Hallez commented 7 years ago

Je suis preneur si vous y arrivez... Actuellement j'ai juste 3 leds qui s'allume, 1 pour le Nez et les autres pour les yeux... vraiment bof bof même si il peut faire des clins d’œil... là je suis preneur si vous arrivez a y mettre un visage... j'ai recherché personnellement à le faire mais en vain... je suis un tout petit programmateur du dimanche.... lol... je suis arrivé une fois à voir une cadre photo sans teint avec le visage de jarvis mais impossible de remettre la main dessus snif...

Jean-Bernard-Hallez commented 7 years ago

http://nokians.fr/2014/08/des-nouvelles-animations-pour-cortana-en-chine-et-aux-usa/ tiré de #394

Jean-Bernard-Hallez commented 7 years ago

Bonjour... Alors alors cette interface visuel... Ca avance positivement... ?

alexylem commented 7 years ago

Cette idée me trotte de plus en plus dans la tête... Je me l'assigne, mais si qqun est partant pour m'aider je suis pas contre. Le plus dûr est de savoir comment exploiter au mieux l'affichage pour les besoins de tous: page web en plein écran, affichage bas niveau, autre?

alexylem commented 7 years ago

Bon allez je me lance. Donnons un visage à Jarvis! Je suis très séduit par les animations que tu as proposé: http://nokians.fr/2014/08/des-nouvelles-animations-pour-cortana-en-chine-et-aux-usa/ Même si j'ai un peu peur car Cortana doit vouloir dire non open-source. Donc a priori je ne pourrai pas les inclure dans le repo. Vous avez d'autres "sources" ?

Je n'ai pas encore d'écran et j'hésite entre 3 modèles:

Je suis tenté par l'officiel mais je le trouve un peu cher. L'alternative équivalente en résolution à 40€ me semble acceptable. Vous en pensez quoi?

physicien commented 7 years ago

J'ai vu passer une source justement pour un visage. On peut facilement s'en inspirer. Et pour choisir l'émotion à afficher, juste à faire une fonction qui détermine une position sur 2 axes (activation et positivité). Voici un exemple.

Pour le choix de l'écran, j'ai le officiel et je n'irais ne te conseille pas plus petit.

alexylem commented 7 years ago

Merci @physicien donc tu recommande l'écran officiel? J'aime bien aussi l'idée de l'émotion à 2 axes, mais j'aimerais proposer un catalogue d'animation qui ne sont pas que des émotions (entrée, sortie, endormi...) Je me suis lancé dans le code. Pour éviter de rajouter des dépendances je pars sur Python (avec Tkinter). J'arrive à afficher une image en plein écran, ca marche sur OSX et Linux. J'ai bcp galéré pour afficher un Gif animé ET transparent, mais j'y suis arrivé. Par contre pour les animations de Cortana certaines frames s'affichent mal (pour toutes les images). Alors que en affichage natif/browser, il n'y a pas de pb...

La majorité de l'animation est OK image Mais 2 frames s'affichent mal (sur toutes les animations) image

Si des experts python/imagerie passent par la je suis preneur.

Lusitanos67 commented 7 years ago

Un écran à 110€, pour but d'avoir un visage... hum un peu cheros, celuia à 35 ou 40 doivent être largement suffisant pour vos besoins non ?

alexylem commented 7 years ago

Bon j'ai réussi à corriger le problème des frame en désoptimisant le GIF. Mais je ne suis pas super convaincu car l'affichage de l'animation prend 70% du processeur de mon Macbook... Je me demande si je ne devrais pas partir sur une solution web (page lancée en plein écran avec un web socket pour changer l'animation...). La aussi je n'ai jamais fait de socket donc je ne suis pas contre un peu d'aide...

alexylem commented 7 years ago

Bon sur OSX j'ai un solution simple et fonctionnelle: en applescript j'ouvre Safari pour afficher le Gif (je peux même le mettre en plein écran) et je change l'URL de la page en fonction des évènements. image Il ne me reste plus qu'à trouver comment faire de même (changer l'URL de la page en cours) sur linux.

wikijm commented 7 years ago

Un petit aperçu de Jarvis-UI sur un écran [Waveshare 7"](Waveshare Avec Bicolor Case 7 pouces écran tactile capacitif LCD HDMI 800*480 pour Raspberry Pi / BB BLACK / PC / divers systèmes / Raspberry Pi 3 Modèle B ) et d'un écran SpotPear 2,4". A gauche se trouve le JABRA 510 (micro + enceinte), et des piles LR6 pour donner une idée de la taille réelle. lrm_20170212_113245

Toute accusation éhontée de photoshopage ne serait que pure calomnie ! ;-)

alexylem commented 7 years ago

@wikijm bah oui tiens, ton raspberry pi il est alimenté par induction? 😁

physicien commented 7 years ago

@alexylem si je comprends bien, il sera facile de changer les animations en ne changeant que les gifs?

Je montre moi aussi mon installation: quand tu es pauvre, mais que tu veux quand même un écran de 7''. webcam-1482608818

alexylem commented 7 years ago

Wow génial @physicien, ca serait génial si tu pouvais poster cette image sur: http://domotiquefacile.fr/jarvis/projects

alexylem commented 7 years ago

Mon script avance bien:

image

alexylem commented 7 years ago

@physicien dans le même style que toi, voici le miens 😄 image

alexylem commented 7 years ago

@alexylem si je comprends bien, il sera facile de changer les animations en ne changeant que les gifs?

Donc oui chacun pourra créer ses propres thèmes/faces et ranger ses gifs dans les dossiers d'état.

alexylem commented 7 years ago

Premier aperçu du démarrage: https://youtu.be/On96y-Fj4e8

alexylem commented 7 years ago

Aperçu démarrage et arrêt: ezgif com-optimize

alexylem commented 7 years ago

Avec 2 nouveaux hooks: start_listening et stop_listening fevr -12-2017 21-21-19

alexylem commented 7 years ago

Avec 2 nouveaux hooks: start_speaking et stop_speaking speaking

wikijm commented 7 years ago

Attention, on va se faire manger par https://vivoka.com/

Lusitanos67 commented 7 years ago

Ah ouais le projet est bien avancée ...

alexylem commented 7 years ago

Ca a l'air d'être à l'étape de projet. Nous on a un truc qui marche, open-source, hackable avec une formidable communauté derrière 👍

Jean-Bernard-Hallez commented 7 years ago

Bonjour @alexylem, peux tu faire partager l'installation de toutes ces animations que l'on puisse le télécharger et l'installer directement ? Merci...

alexylem commented 7 years ago

J'ai un plugin que je peux publier mais il ne fonctionne que sur Mac car je n'ai pas encore d'écran sur mon raspberry pi pour implémenter sur Linux. Je ne suis pas contre un peu d'aide, il me faut simplement trouver les commandes linux pour:

alexylem commented 7 years ago

Le voici: http://domotiquefacile.fr/jarvis/plugins/face

alexylem commented 7 years ago

J'ai commandé un LCD 5" tactile 800x480 à 36€ image Je l'ai pris sans boitier car je compte à terme tout encastrer dans une grande boite (avec les enceintes, la caméra, et le micro array PSEye que je démonterai pour l'occasion).

Livraison prévue mercredi, je pourrai alors enfin faire évoluer ce plugin pour linux.

Jean-Bernard-Hallez commented 7 years ago

sur mon Rasperry j'ai installé midori et mes hooks apparaissent comme ceci... Par exemple: midori -e Fullscreen -a http://192.168.0.14/faces/cortana/exit/exit.gif &

Mais c'est lent....

alexylem commented 7 years ago

Ecran reçu: img_0488 @Jean-Bernard-Hallez merci pour cette piste 👍 , mais c'est sûr que c'est lent si tu dois lancer une nouvelle instance de midori à chaque fois... je crois qu'il faut plutôt trouver un moyen de changer l'URL en cours comme j'ai fais sur OSX...

physicien commented 7 years ago

Bonne chance avec l'écran. Je viens de le reconnaître et je n'ai jamais réussi à le faire fonctionner, car les drivers ne sont plus à jour. Pour précision, c'est le tactile de l'écran qui ne fonctionne pas. :robot:

alexylem commented 7 years ago

Pas grave pour le tactile je n'en ai pas besoin (pour l'instant). Pour la partie affichage je n'ai aucun doute vu que c'est de l'HDMI.

alexylem commented 7 years ago

L'écran fonctionne à merveille. Je n'ai pas installé la couche tactile, pas besoin pour le moment. Je me suis rendu comte que je n'avais pas X installé (Raspbian jessie lite) alors j'ai tenté d'afficher un GIF depuis le mode console et ca fonctionne ! Le GIF s'affiche en plein écran et est animé. Il me reste plus qu'à le faire tourner en boucle.

Allez un petit aperçu 😄 gif on console screen

Encore à voir l'aspect performance dans l'enchainement des animations...

Si c'est satisfaisant, la première version du plugin sera destinée au mode console (que l'on peut facilement activer depuis raspi-config). D'ailleurs qui utilise un full desktop sur un si petit écran? 😄

MulhollandDr commented 7 years ago

Vraiment génial, j'ai hâte de tester ça !

Jean-Bernard-Hallez commented 7 years ago

Ha Oui ! Je me languis...

Takanato commented 7 years ago

Bonjour,

Petite question qui peut paraître idiote.

Y aurait-il un moyen d'utiliser le visage de Jarvis sur un appareil distant ? Si par exemple j'ai une tablette murale, il y a t-il possibilité d'afficher le visage sur cette tablette, même si cela nécessite quelque modification de ma part ?

Merci par avance pour vos réponses.

alexylem commented 7 years ago

Sans pb avec les hooks. C'est ce que j'utilises pour ce plugin, mais il te faudra mettre en place ce service sur la tablette distante, et l'appeler depuis les hooks de Jarvis. Je pense que tu trouveras la solution en cherchant sur internet comment faire afficher une image à distance sur une tablette (en fonction de l'OS bien entendu...). Ca pourrait aussi être une évolution de ce plugin à long terme, j'ai aussi un iPad sur un support mural qui me sert d'interface domotique et ca m'intéresserait d'y afficher le visage de Jarvis. Mais une chose après l'autre si vous voulez bien 😄

alexylem commented 7 years ago

Juste pour vous tenir informé de mes avancées. J'avais fait le choix d'utiliser mplayer pour afficher les animations GIF dans le framebuffer (sans X installé). Hors il ne lit pas les GIF en boucle (alors que le loop est bien défini dans le GIF). L'option -loop de mplayer fonctionne mais la boucle n'est pas fluide, il y a un écran noir entre les 2 lectures, je n'aime pas l'effet. Je me tourne donc sur une solution python avec https://github.com/chidea/FBpyGIF mais l'animation, bien qu'elle boucle correctement, s'affiche mal. Je suis en discussion avec le créateur sur ce pb ici: https://github.com/chidea/FBpyGIF/issues/12 J'ai aussi la possibilité en framebuffer d'y faire afficher une page web avec links2 mais j'ai aussi des problèmes d'affichage que j'investiguerai si je n'ai pas de succès avec l'option Python. Dernier recourt... X... (la ca sera facile).

alexylem commented 7 years ago

Bon le problème d'affichage est résolu, les GIF s'affichent correctement. Maintenant j'ai un autre problème, le temps de chargement des GIF est trop long, même pour ceux joués en playlist (sans relancer le programme python). Sur mon raspberry pi 3, l'animation Cortana met 4 secondes à charger. Autant dire que que ca va pas aller, Jarvis va avoir 2 trains de retard... Pour des GIF bcp plus simples (à 2 ou 3 frames), aucun problème. Bien entendu, je n'aurais aucun soucis si on parlait d'images non animées, mais ca serait bcp moins sympa. Il me reste à essayer de faire marcher links2 avant de partir sur X...

alexylem commented 7 years ago

Pas réussi à faire marcher links2 ni netsurf-fb. Si vous vous y arrivez ca m'aiderait.

Avec mplayer j'ai réussi à faire fonctionner la boucle sans micro-interruption en convertissant au préalable le gif en mp4. Le temps de chargement est acceptable (un peu moins d'une seconde). Ce n'est pas encore la solution idéale car il faut installer un convertisseur pour convertir tous les gif en mp4 mais bon, au moins ca marche:

sudo SDL_VIDEODRIVER=fbcon SDL_FBDEV=/dev/fb0 mplayer -vo sdl -framedrop neutral.mp4 --loop=0
alexylem commented 7 years ago

Bon j'ai craqué et j'ai installé Pixel depuis Raspbian Lite:

sudo apt-get install --no-install-recommends xserver-xorg
sudo apt-get install --no-install-recommends xinit
sudo apt-get install raspberrypi-ui-mods
sudo raspi-config # boot to desktop
sudo reboot

C'est bcp plus simple et surtout... fluide! (qui l'eut cru)

gifview --animate --display :0 neutral.gif

preview

alexylem commented 7 years ago

🎉 🎈 Ca y est le plugin est désormais disponible à tous sur Linux!

Demo vidéo: https://youtu.be/gjSzJusWkHg

Important avant de vous jeter dessus

Ok maintenant les points positifs

A venir (car je sais que vous allez poser la question)

Pour l'installer, c'est comme d'habitude: Plugins > Search > Face > Install

J'attends vos retours avec impatience!

physicien commented 7 years ago

Super, je viens de l'installer et il marche plutôt bien. Actuellement, j'essaie de comprendre le fonctionnement des fonctions qui choisissent l'expression à afficher. Donc si je comprends bien, tout se passe avec la fonction pg_face_state qui va choisir un visage aléatoire dans les choix disponibles pour un état donné à l'aide de la fonction pg_face_get_random. Ce que je n'arrive pas à déterminer est l'argument utilisé afin de définir l'état précis. Donc quel est-il? :robot:

alexylem commented 7 years ago

Oui c'est bien ca pg_face_state afficher un visage aléatoirement (en utilisant pg_face_get_random) parmis les gif dans le dossier correspondant (même nom) à l'état passé en paramètre: image

Voici 3 exemples d'utilisation: (Dans les hooks du plugin)

pg_face_state "listening" & # afficher un état "listening" en boucle
pg_face_state "happy" "neutral" & # affiche une animation "happy" puis "neutral" en boucle
pg_face_state "exit" true # affiche une animation exit et force l'attente de la fin de l'animation

Attention Vous n'êtes pas censé modifier les hooks du plugin, ils seront écrasés à la prochaine version. Si vous voulez des évolutions dans les hooks, merci de me le faire savoir, je rajouterai des paramètres de config. Par exemple je pense à une option pour ne pas afficher de visage si pas en mode conversation (pour ceux qui ont un dashboard par exemple). Perso j'ai rajouté une commande pour quitter l'économiseur d'écran dans mon hook entering_cmd (au niveau de Jarvis).

J'espère que ca répond à ta question.

alexylem commented 7 years ago

Nouvelle vidéo avec mon nouveau DIY case 😅
https://youtu.be/bc7NcxszPZU image

Takanato commented 7 years ago

Cool ! Je vais tester ça dés que possible.

Bon par contre je n'est pas trouvé pour l'instant pour l'utiliser sur un tablette (malgré plusieurs recherche mais ça doit venir de moi xD).

Du coup je me pose une autre question, j'ai deux Jarvis (un maitre sur le même Pi que ma Jeedom et un autre en esclave car ma pièce à vivre est très grande). Pense tu que je puisse changer le visage de Jarvis à distance quand l'esclave passe en conversation etc... ? Histoire d'avoir le retour visuel qui fonctionne que l'on utilise le maitre ou l'esclave.