alexylem / jarvis

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

Jarivs multi-utilisateurs #190

Open Stan92 opened 8 years ago

Stan92 commented 8 years ago

Bonjour, Ce n'est pas une issue mais une demande éventuelle de fonctionnalités. Est il possible ou serait il envisageable de prévoir les points suivants :

Le but de fichier de configuration serait uniquement de permettre de récupérer le nom et le magic word Tous les autres paramètres de config seraient communs (Moteur de synthèse, de reconnaissance, etc...)

alexylem commented 8 years ago

Ok si je comprends bien tu voudrais qu'une instance de Jarvis puisse gérer plusieurs pofils d'utilisateurs pour les différentes personnes de la maison?

On pourrait aussi imaginer que ca soit automatique pas au démarrage, mais au déclenchement du hotword (ex: 1 hotword par utilisateur):

Alex: Jarvis?
Jarvis: Oui Alex?
Alex: Check mes mails
Jarvis: tu as 2 emails non lus
[...]
Sarah: Siri?
Siri: Oui Sarah?
Sarah: Check mes mails
Siri: Tu n'as aucun email non lu
Stan92 commented 8 years ago

Quelle perspicacité ;-) Exact, ça serait cela en gros... Avec ta solution, le petit hic, c'est que le hotword serait du coup identique/commun pour toutes les personnes de l'appartement... Et l'idéal de l'idéal, toujours dans le fichier de "config utilisateur", ca serait de préciser si c'est une voix féminine ou masculine que l'utilisateur aimerait entendre, et pourquoi pas la notion de langue (Français, anglais, etc...). Comme dit dans mon ticket initial, seul les paramètres intrinsèques seraient communs... Mais bon, je ne ferai pas la fine bouche si ce que tu proposes est envisageable ;)

taostaos commented 8 years ago

Il est peut etre jouable de tester bob pour faire du speaker recongition sur le fichier audio du hotword prononcé, par contre, je ne suis pas chaud pour faire un poc =P

Stan92 commented 8 years ago

Pour être plus concis, le but est qu'une fois l'utilisateur "reconnu" (en l’occurrence, là cela sera de la reconnaissance faciale), c'est que je puisse transmettre en paramètre le(s) fichier(s) de config/commandes en exécutant Jarvis. Le but (en tout cas me concernant), n'est pas de reconnaître la voix de l'utilisateur.

dguerizec commented 8 years ago

+1 pour la reconnaissance vocale de l'utilisateur.

La reconnaissance faciale a plusieurs problèmes, comme l'obligation d'avoir une caméra, et d'être placé en face (cela dit, si c'est possible de faire un hook qui permet de switcher le profil utilisateur, ça peut aussi être implémenté en externe).

Michelgard commented 8 years ago

J'ai un projet de ce type dans mes futures bidouilles... Un miroir sans tain avec un écran, un raspberry pi, une web cam le tout couplant la reconnaissance faciale et des commandes vocales avec Jarvis par exemple. Pour l’instant c'est resté en l'état de projet par manque de temps, pour le bricolage du cadre et du miroir mais aussi que la reconnaissance faciale (là je parle de donner un nom à un visage pas simplement de le trouver dans l'image) n'est pas très fiable malgré pas mal d'essais de ma part. Mais j'espère bien avoir cet objet dans mon salon un jour :)

alexylem commented 8 years ago

Pour la reco faciale c'est discuté ici: #56 Pour la reco du speaker c'est ici: #109

@Stan92 dans ma proposition il n'y a pas un hotword commun mais bien 1 par utilisateur. Il n'y a pas trop de sens de lancer jarvis avec un fichier de config en paramètre car il est censé être lancé en permanence. Donc je serai plus en faveur de reconnaitre le speaker via l'un des 3 moyens discutés:

  1. Reco faciale => #56
  2. Reco voice => #109
  3. Personal hotword => ce ticket
Stan92 commented 8 years ago

Je te remercie Alex, pour la reco faciale, ma bidouille fonctionne apparemment sans souci. En revanche, il est vrai que je ne suis pas entrer à fond dans la documentation, je ne vois comment "transmettre" l'utilisateur authentifié via la reco à Jarvis. Un peu comme dans ton scénario, où cela passe de Alex à Sarah. Je me pencherai sur les différents liens transmis pour checker. En tout cas merci pour les pistes...

alexylem commented 8 years ago

Aujourd'hui Jarvis ne gère pas le multi-profile. Si tu veux ca il faut l'implémenter dans Jarvis. En workaround tu peux installer 2 instances de Jarvis et lancer la bonne:

git clone https://github.com/alexylem/jarvis jarvis-1
git clone https://github.com/alexylem/jarvis jarvis-2
# external event, launch corresponding jarvis to start recognition
./jarvis-X/jarvis.sh -l # directly listen for an order

Pour aller plus loin il faut que j'implémente ca dans le Core (je pourrai utiliser ce ticket).

physicien commented 8 years ago

Point d'information: devrions nous avoir le multi-profile ou la reconnaissance en premier? Je demande, car les deux fonctionnalités sont intimement liées et d'un certain point de vue, c'est la poule ou l'oeuf.

alexylem commented 8 years ago

@Stan92 si je comprends bien tu as un système de reconnaissance faciale et tu aimerais lancer Jarvis avec le bon profile. J'imagine que tu souhaite lancer Jarvis en mode écoute d'une commande et non pas en mode normal car la personne est déjà reconnue donc pas besoin d'attendre un hotword, si? Du coup pourquoi personnaliser le hotword dans ce cas, juste les commandes devraient suffire non? Dernière question, penses-tu vouloir des commandes "communes" ainsi que des plugins "commun" ou tout doit être vraiment séparé? Car si tout doit vraiment être séparé, la solution de contournement que je t'ai proposée (2 installations séparées de Jarvis) pourrait très bien faire l'affaire! Tu pourrais essayer?

Stan92 commented 8 years ago

Alex, Je partage le point de vue de ton premier paragraphe.

Pour les questions communes, l'idéal serait réellement que chaque utilisateur puisse paramétrer les siennes.. pour être un peu plus transparent sur le projet, c'est que je comptais faire une interface Web où chaque membre de la famille puisse paramétrer comme bon lui semble ses commandes. Quant au fait de lancer plusieurs installations, cela ne limiterait-il pas le système ? J'entends par là qu'il faudrait lancer autant d'installation qu'il y a de membres dans la famille...

Grosso modo voici comment je voyais le workflow de mon petit projet..

Je suis relativement novice dans l'environnement Raspberry & Raspian (Linux), et donc peux être un peu utopique sur mes demandes...

alexylem commented 8 years ago

Ok donc c'est vrai qu'après réflexion, une installation par membre de la famille est un peu limité car tu dois tout paramétrer X fois (moteurs de reco vocale, différentes clés API, sensibilité, ...). Donc le multi-profil pourrait être adapté ici (sur les commandes). Comme le trigger est "externe", pas besoin d'avoir un hotword personnalisé, donc la je pense que le plus simple est d'autoriser le passage en argument d'un fichier de commandes:

(pas encore disponible)

# Stan est reconnu
# lancer Jarvis en mode écoute avec les commandes de Stan
$> ./jarvis.sh -l -m stan-commands
# Stanette est reconnue
# lancer Jarvis en mode écoute avec les commandes de Stanette
$> ./jarvis.sh -l -m stanette_commands

En fait dans l'absolu tu pourrais déjà le faire ainsi

(déjà possible)

# Stan est reconnu
# lancer Jarvis en mode écoute avec les commandes de Stan
$> cp stan-commands jarvis-commands && ./jarvis.sh -l
# Stanette est reconnue
# lancer Jarvis en mode écoute avec les commandes de Stanette
$> cp stanette-commands jarvis-commands && ./jarvis.sh -l

Lorsque Jarvis est lancé en mode écoute avec -l il attend un ordre vocale, et en fonction du mode conversation (dans les settings) il peut en accepter d'autre jusqu'à un timeout.

Par contre ici les plugins sont partagés, donc si tu veux aussi des plugins personnalisés (ex: pour les emails) alors il faut changer le Core de Jarvis. A toi de voir.

Stan92 commented 8 years ago

Je ferai déjà avec le (Déjà possible)...
Pour la partie Plugins, faut que tu bosses un peu car je n'y connais rien.... (éventuellement on pourra se parler en Off) Merci encore une fois pour ton aide... Et pour info, ma fille s'appelle Stephy et non Stanette ;-)

alexylem commented 8 years ago

Pour les plugins tu peux te renseigner ici: http://domotiquefacile.fr/jarvis/content/plugins

taostaos commented 8 years ago

@Stan92 on ne sait jamais, peut être que ca peut te permettre de partir sur de bonne base:smart-mirror

NYGHOST commented 8 years ago

j'ai vu @alexylem dans Jarvis-events ( ouai je sais j'ai mis du temps) que l'on pouvais lancer une commmande directement dans Jarvis on pourrait alors prononcer un nom différent (comme tu as fait) et charger un nouveau fichier commande? mais ca impliquerai un fichier contenant les préférences etc alors que l'on peut simplement ajouter ces commandes dans "Jarvis command" sous forme de dialogue

alexylem commented 8 years ago

@NYGHOST j'ai du mal à te suivre... Oui on peut lancer une commande directement (très pratique pour tester ses plugins):

$> ./jarvis.sh -x "check mes emails"

Mais si tu veux charger un fichier de commande à part (si les commandes ne peuvent pas être mergées dans le même fichier), alors voir mon post ci-dessus.

david2dia commented 7 years ago

Je suis super intéressé par cette fonctionnalité, surtout que les dernières versions ne permettent pus le multi-instance.

Dens26 commented 7 years ago

Salut @alexylem.

Je tenais à te féliciter pour le travail que tu as fais, c'est vraiment super.

As tu avancé concernant la reconnaissance faciale?

alexylem commented 7 years ago

@Dens26 Merci bcp. Non pas avancé sur ce projet, même si j'ai un prototype fonctionnel dans les cartons. Mais trop complexe à ce stade pour être généralisé et accessible en plugin.

alexylem commented 7 years ago

Qui est toujours intéressé par cette fonctionnalité? Si oui, laquelle parmi les 2 propositions suivante vous irait le mieux? 1) Ajout d'un flag -m pour passer un fichier de commandes en paramètre (trigger externe) 2) 2+ hotwords distincts partageant les même plugins & configuration 3) 2+ hotwords distincts avec leur propres plugins & configuration

Stan92 commented 7 years ago

Hello, J'opterai pour la proposition 2...

alexylem commented 7 years ago

Inconvénient de l'option 2, pas de personnalisation pour les plugins, ex pour le plugin gmail, chaque personne enregistrée ne pourra pas checker sa propre boite mail. Avantage, pas besoin d'installer et de configurer les plugins "génériques" pour chaque utilisateur. Après je devrais pouvoir trouver un moyen d'avoir le meilleur des deux mondes en installant les plugins par défaut dans un répertoire partagé, et au moment de le configurer (s'il a un fichier de config), demander si c'est pour l'utilisateur "actif" (le fichier de config sera dans son répertoire utilisateur) ou pour tout le monde (répertoire commun).

NYGHOST commented 7 years ago

moi ca m'interesse mais la 3eme option chacû ayant ses propres plugins et configuration

Dens26 commented 7 years ago

Pour ma part je pense que d'avoir la possibilité de mettre en place plusieurs hotwords (plusieurs utilisateurs) n'a pas de sens si derrière on partage la même config. Apres, il y a des plugins qui ne demande pas forcement une config par utilisateur comme la météo par exemple.

wikijm commented 7 years ago

L'issue #109 devrait aussi répondre au besoin. Plus facile de rentrer dans un univers dédié à chaque utilisateur si ce dernier est reconnu (speaker recognition) lors de sa requête vocale.

alexylem commented 7 years ago

@wikijm il y plusieurs manières de reconnaitre la personne en question:

@Stan92 puisque tu es à l'origine de ce ticket, tu es ok avec la proposition 3 tout en ayant un partage par défaut de la config et des plugins? Je vais avoir besoin de volontaires pour tester sur la branche beta lorsque je m'y mettrai vraiment. Il va y avoir du GROS changement dans le code et les fichiers!

wikijm commented 7 years ago

Le WAF n'étant pas le fort de mon foyer, j'ai peur de ne pas pouvoir trop participer aux tests :expressionless:

RobyBioloid commented 7 years ago

On irait donc vers la proposition 3 avec un partage de le config et des plugins?

Je ne voit pas l’Intérêt de reconnaitre la personne qui parle si c'est pour après ne pas en tenir compte. Ça donnerait juste la possibilité à tout les membre de la famille d'activer Jarvis.

Je comprend que ça permet de ne pas avoir à installer et configurer chaque plugins à chaque fois.

Du coup, une solution toute bête serait de créer une variable avec la personne reconnu. On garde la config et les plugins par défaut.

Pour les plugins qui n'ont pas besoin de savoir qui est l'auteur de la commande comme par exemple Jarvis-time, la réponse est la même pour tous.

Pour les plugins comme Jarvis-mails, ont vient récupérer qui est l'auteur de la commande via la variable et ont exécute la demande en fonction de l'auteur!

En gros, c'est au concepteur du plugins de gérer le multi-utilisateur si besoin

alexylem commented 7 years ago

@RobyBioloid regarde mon commentaire plus haut:

je devrais pouvoir trouver un moyen d'avoir le meilleur des deux mondes en installant les plugins par défaut dans un répertoire partagé, et au moment de le configurer (s'il a un fichier de config), demander si c'est pour l'utilisateur "actif" (le fichier de config sera dans son répertoire utilisateur) ou pour tout le monde (répertoire commun).

Qu'est-ce que t'en penses?

RobyBioloid commented 7 years ago

Ok, je comprends pas très bien.

Il faut créer un fichier utilisateur par utilisateur avec un fichier config

Du coup si j'installe le plugins Jarvis-mails, il faut entrer la config "pour tout le monde" et après entrer pour chaque utilisateur la config propre à l'utilisateur.

Quand la commande est reconnue, que ce passe t'il? Jarvis demande à chaque coup si c'est pour 'tout le monde' ou pour 'l'utilisateur'?

alexylem commented 7 years ago

@RobyBioloid Non c'est pas ca, je vais mieux expliquer: Au moment d'ouvrir la configuration de Jarvis ou d'un plugin, tu vas dire si tu le fais pour tout le monde, ou juste pour un utilisateur spécifique (la question te seras posée via une boite de dialogue). Mettons tu installes Jarvis-weather, à priori même config pour tout le monde, donc au moment ou tu rentres / sauvegarde la configuration, tu répondras "pour tout le monde". Mettons tu installes Jarvis-gmail, la c'est perso, donc au moment ou tu rentres / sauvegardes la configuration, tu répondras "pour moi seulement". Je verrai au moment du développement comment je gérerai les différents utilisateurs. L'avantage de cette option est qu'on ne change rien aux plugins, et qu'on laisse toujours le choix (simple) à l'utilisateur.

fredissimo06 commented 7 years ago

salut, pas mal cette idée. Je me demandais si on pouvait déjà changer le $username sans que ça ne crée un problème d'execution ? je suppose que l' $username est stocké dans une variable "temporaire" le temps que jarvis est lancé, on pourrait redefinir la variable dans mon idée en gros ca pourrait donner: si l'username est définit sur "fred"

jarvis: qui est la ? moi: fred jarvis: bonjour fred jarvis: ca va fred moi: oui, mais moi c'est alex jarvis: bonjour alex ....

maintenant l'username est alex dans la variable.

Le but serait, dans un premier temp de personnaliser la conversation. Après dans les script, il suffirait d'adapter en déclarant les utilisateurs dans le config.sh et en bouclant sur un tableau du style: utilisateur 1 : fred : api gmail : ....................... utlisateur 2: alex : apigmail :..................

apres je dis ca je suis novice dans tout ces langages

alexylem commented 7 years ago

@fredissimo06 ta solution est déjà possible. Tu peux modifier la variable username sans problème. commands

JE*APPELLE (*)==username=(1); say "ok $username"

Par contre pour la prise en compte dans les plugins, faire un tableau dans la config veut dire qu'il faut demander à tous les développeurs de plugins de changer en fonction. La je suis moins chaud.

fredissimo06 commented 7 years ago

ah ok, merci je vais essayé d'exploiter ça pour l'username.

excact, comme tu l'avais déjà dis, ce n'est pas une solution viable. Il vaut mieux que ce soit en natif plutôt que de retoucher tous les plugins.

désolé, je vais encore poser une question bête, qui peut paraître en décalage avec le sujet, mais j'essaye de comprendre la mécanique pour l'identification de l'utilisateur : les infos type api, les ip ... etc.. en gros ce que contiennent les fichiers config.sh, sont aussi stockées dans une variable ou elles sont récupérés dans les fichiers au moment où jarvis en a besoin ?

alexylem commented 7 years ago

Oui rien à voir avec ce ticket, mais si tu regardes dans le code, les plugins sont chargés au démarrage de Jarvis et chaque Plugin a ses propres variables (convention de nommage à respecter) qui sont utilisées dans les fonctions (aussi nommées specifiquement) des plugins, qui elles-même sont utilisées dans les commandes des plugins.

Bon il ne me reste plus qu'à m'y mettre!

D-Kalck commented 7 years ago

J'espère vivement qu'une telle fonctionnalité verra le jour, étant donné que j'ai justement installé Jarvis pour que ma femme (et moi) commandions la maison. Idéalement, il faudrait que Jarvis reconnaisse la personne (le username) en fonction de la voix et non pas du hotword (ça sera bien que tout le monde s'adresse à la même personne).

alexylem commented 7 years ago

@D-Kalck je suis d'accord avec toi, le speaker recognition est bien meilleur. Disons que la reco via le hotword est une prémière étape, car relativement plus facile à implémenter.

yoh0O commented 6 years ago

Bonjour,

Une question sur le multi micro et le multi utilisateur: est-il actuellement possible de lancer des instances différents de jarvis (mais sans l'installer plusieurs fois) tout en lui donnant un fichier de conf différent à chaque fois ? Le fichiers de conf pas pour les commandes, mais pour les périphériques à utiliser. De cette manière on fait par exemple tourner un jarvis par pièce. (Après les ressources CPU à nous de les gérer)

Bonne journée :)

ghost commented 6 years ago

Bonjour,

Tout d'abord, merrci pour ce super projet !

Je cherchais justement à pouvoir utiliser Jarvis à 2. De mon côté, aucun problème d'utiliser un seul hotword pour les 2. J'ai juste le besoin de reconnaître 2 voix pour les mêmes commandes. Des commentaires lus ici, c'était le plus simple à mettre oeuvre. Je vois que le ticket est toujours Open mais il n'y a plus de nouvelles ? On a une solution pour le multi utilisateur ?

Merci!