Pages: 1
Bonjour, je me présente, je m'appele Vincent, j'ai 32 ans et je suis nouveau sur le forum. J'utilise principalement Max/MSP pour piloter des robots (bipèdes et quadrupèdes) que j'ai construits et que je pilote à l'aide d'un séquenceur type "step sequencer" et j'envoie donc certaines séquences quand je veut faire tel ou tel mouvement au robot (marcher,tourner,etc...). je les contrôles donc à l'aide du clavier ou d'une manette USB, ils ne sont pas autonomes pour l'instant mais c'est mon but.
Je fait ça en tant que loisir et mon travail n'a rien à voir avec ça (je suis tourneur-fraiseur).
Voila pour la présentation, maintenant je vais vous exposer mon problème.
Je suis malgré tout débutant sur max/msp et pas du tout programmeur et je cherche à faire un programme (patch)mais je n'y arrive pas malgrés les nombreux essais de modification de patchs que j'ai fait pour essayer d'arriver au resultat souhaité.
Je ne comprend presque rien en programation et la solution de mon problème est peut etre simple pour des utilisateurs plus expérimenté mais pas pour moi, alors si vous avez une solution à mon probleme et que vous voulez bien me l'expliquer j'en serais infiniment reconnaissant.
En fait je souhaite que ma webcam que j'ai motorisée avec des servomoteurs puisse suivre le visage face à elle.la webcam s'oriente avec des servomoteurs sur les axes horizontal et vertical (x et y).
L'interface que j'utilise pour ces servomoteurs est pilotée en midi donc avec une position allant de 0 à 128, 64 étant le point ou la webcam est face à l'utilisateur.
J'ai souvent utilisé cette carte pour contrôler les servos donc je n'ai pas de problèmes à ce niveau la.(j'utilise ctlout pour envoyer les données au bon servomoteur, c'est tout simple).
Le problème est au niveau du lien entre la position envoyée au servo et le programme qui capte le visage de l'utilisateur (j'utilise un patch d'une version non-commercialle de faceAPI surnomé "Head in space") et qui me donne une position en x et y quand le visage se déplace horizontalement et verticalement.(je l'ai configuré pour qu'il envoi aussi une position de -64 à 64 , 0 étant le point central)
Bref le probleme concret est que par exemple quand mon visage se déplace à gauche, le programme Headinspace m'envoie un nombre comme -32 , donc le programme envoie cette commande que j'ai
modifié pour qu'elle se soustraie a la position centrale, donc 64 -32, ce qui envoie la position 32 a mon servo qui se deplace au plus rapidement a cette valeur...
Mais voila! Le gros probleme est que à ce moment le programme HeadinSpace voit de nouveau le visage au centre donc il envoie tout de suite une position 64 (centre) au servomoteur qui se deplace de nouveau au plus vite à cette position mais le visage etant toujour à gauche dans cette nouvelle position, il renvoi de nouveau la position 32 et cela sans fin.
En bref, ca ne marche pas du tout, je voudrais juste que quand le visage s'éloigne du point central, la webcam s'oriente dans la direction du visage et l'accompagne jusqu'a ce qu'il redevienne en position central pour la vision de la webcam.
J'ai trouvé quelqun qui à fait une video sur youtube avec max/msp et qui fait exactement ce que je voudrais faire mais il n'as jamais répondu à mes questions et ne propose pas de telecharger son patch.
Pour vous faire une idée, vous pouvez trouver la video sur youtube en tapant: "facetracking webcam using max/msp/jitter and arduino version 1" (sans les guillemets).
Je ne sait pas comment il à fait, mais lui y arrive.
Merci à vous d'avoir lu mon message, et merci d'avance à ceux qui pourront m'eclairer.
Dernière modification par rizen29 (2014-04-11 13:12:44)
Hors ligne
Ça a l'air très cool comme projet ;-)
Juste une idée, quand HeadinSpace envoie la valeur -32, je décrémenterais la position du servo non pas de 32 (il y a de toute façon de grande chance pour que ça ne soit pas les mêmes unités) mais juste de 1 (-1 donc). Ma théorie est qu'en déplaçant de 1 headspace va réanalyser la position de la tête et envoyer une nouvelle valeur, genre -30... il faut continuer la danse tant que la distance n'est pas proche de 0, pas forcément égale à 0 non plus en raison du manque de précision de l'analyse et/ou des servos (128 pas c'est pas beaucoup non plus).
Une version plus avancée pourrait d'utiliser un incrément différent suivant la distance. Par exemple is HeadinSpace renvoie 50, peut-être que l'incrément pourrait être plus important que si HeadInspace renvoie 5.
Voilà, c'était juste une idée.
Hors ligne
Salut, merci de ta réponse ej !
Effectivement tu as raison il vaut mieux déplacer les servomoteurs de façon incrémentale comme tu le suggère, c'est de cette manière que les autres personnes qui avaient un projet similaire (sur max/msp ou autre) ont procédés.
Je m'en suis rendu compte en analysant les codes de ces projets que j'ai trouvé sur internet. Comme tu le suggère aussi j'ai pu me rendre compte qu'il vaut mieux laisser une marge de non- action des servomoteurs quand le visage est au centre de l'écran car il n'est jamais fixe sur le point central (64).
Ton idée de différentes plages de mouvements pour utiliser un incrément différent suivant la distance est bonne aussi, j'y avait pensé mais je ne savait pas comment procédé, je pense que la solution se trouve la et qu'il faut un rapport de transmition des positions au servos différents selon que le visage s'éloigne lentement ou trés rapidement.
Mais tout ça à a voir avec les fps de ma webcam et la vitesse de mes servos.
En effet, je me suis rendu compte que le manque de précision des servos (seulement 128 positions) pose un problème ainsi que le manque de FPS de la webcam que j'utilise et qui perd la capture du visage quand il y a des mouvements trop rapide des servo, c'est pourquoi j'essaye aussi de limiter la transmition des positions au servos pour qu'ils s'actionnent moins rapidement et soit ainsi accordés en gros aux fps de la webcam. Ce que j'ai partiellement réussi à faire en m'inspirant de patchs trouvé sur internet utilisant les fonctions "speedlimit" il me semble et les fonctions "delay" ou autre.
Bref j'ai comme même finalement réussi en bidouillant avec cette technique d'incrémentation à faire à peut prés ce que je voulait sauf que la caméra semble s'éloignée du visage quand celui s'approche du centre au lieu de le suivre
quand il sort du centre mais ça ne perd plus la position du visage et je pense qu'en bidouillant je trouverais la solution.
Merci pour tout, je posterais des infos pour vous tenir au courant de l'évolution du projet et demander peut-etre encore quelques conseils.
Tchao!
Dernière modification par rizen29 (2014-04-13 16:33:41)
Hors ligne
Pages: 1