Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2013-09-29 11:03:46 position dans GEM avec kinect

ralf
membre
Date d'inscription: 2013-09-28
Messages: 31

position dans GEM avec kinect



Hello,

J'essaye depuis quelque temps l'utilisation de la kinect avec PureData (open-ni) et je capte correctement toutes les coordonnées du squelette ainsi que les images (rgb + depth). Je souhaiterais mettre en place un programme basique de réalité virtuelle : une image vidéo de la personne devant la kinect (image captée) avec une sphère qui se déplace selon la position de la main de la personne.

Ca a l'air tout bête, mais je bute sur le problème de convertion des coordonnées spatiales captées par la kinect en coordonnées dans l'espace de représentation GEM.

Dans les exemples de programmes Pure Data que l'on trouve sur internet, les objets virtuels sont souvent positionnés à des positions très approximatives par rapport à l'image captée. Mais pour de la réalité virtuelle, il faut plus de précision...

Sortant de la kinect, x et y varient de 0 à 1; z semble varier de 0 à 3.
Dans GEM, le centre est au centre de la fenêtre, dans ma fenêtre (6.4 sur 4), x' varie entre + ou - 6.4; y' entre + ou - 4; z', je ne sais pas trop…

De toute évidence, une simple équation linéaire ne convient pas. Comment convertir les positions (x, y, z) venant d'une kinect en positions (x', y', z') de GEM ?

http://codelab.fr/up/myimage.png

Hors ligne

 

#2 2013-09-29 15:15:11 Re : position dans GEM avec kinect

Olm-e
membre
Lieu: Bruxelles
Date d'inscription: 2011-11-15
Messages: 84
Site web

Re: position dans GEM avec kinect



explique : pourquoi un système d'équation linéaire ne suffirait pas  ?

par ailleurs, je penses que si le rectangle fait 6.4 4 , la fenêtre te montre x' de -3.2 à +3.2 et y' de -2 à +2

donc
x' = (x - 0.5)*6.4
y' = (y - 0.5)*4
z' = (z - 1.5)/3

ceci dit : la talle de ta fenêtre ne devrais pas influencer sur les coordonnées spatiales, mais plutôt sur la position de la caméra et des objets ... je conserverait un espace en -1/+1 sur tout les axes (ou simplement à la même proportion): la sortie de la kinect est déjà "normalisée" ...  , et jouer sur  les paramètres de position et focale de la caméra.
ne pas oublier qu'on est dans un espace 3d avec une perspective...

Hors ligne

 

#3 2013-09-29 18:24:33 Re : position dans GEM avec kinect

ralf
membre
Date d'inscription: 2013-09-28
Messages: 31

Re: position dans GEM avec kinect



Merci de ta réponse. Mais, il semble que cela ne soit pas si simple...

>>explique : pourquoi un système d'équation linéaire ne suffirait pas  ?

Je n'ai pas trouvé de système linéaire simple. La solution que tu proposes ne fonctionne pas : les coefficients ne permettent pas un suivi bien positionné. Tout au plus, un mouvement dans la bonne direction (en x, car y est inversé puisque la valeur de y venant de la kinect a une origine située en haut). Même en inversant le y, ce n'est pas bon : les paramètres ne conviennent pas...

Je confirme aussi que la fenêtre GEM montre x' variant de -6.4 à +6.4 et y' de -4 à +4. (Cf. le patch joint.)

Il semble que les équations soient plus complexes... J'ai essayé une variation des coefficients de x et y selon z, mais sans succès...

Peut-être une autre idée ?

Je joins le patch pour toute tentative.

Dernière modification par ralf (2013-09-29 18:30:03)

Hors ligne

 

#4 2013-09-29 23:42:47 Re : position dans GEM avec kinect

sakramh
membre
Lieu: clichy-sous-bois
Date d'inscription: 2008-12-02
Messages: 829
Site web

Re: position dans GEM avec kinect



et tu as trituré les propriété ( sous patch [pd PROPERTIES] de l'exemple (pix_openni-help.pd) ? Y'a des histoires de coordonnées "real world" "osc style" . (Et tout un tas de bazar qui a fait que perso je suis revenu à osceleton tout simple, exit les pix_freenect, pix_openni) (enfin ... j'ai pas eu envie de fouiller trop longtemps)


le code est l'alchimie de l'âge du silicium

Hors ligne

 

#5 2013-09-30 01:24:19 Re : position dans GEM avec kinect

Gwenn Thanameaux
membre
Date d'inscription: 2013-09-13
Messages: 14

Re: position dans GEM avec kinect



@sakramh Je crois que les coordonnées "OSC style" "real world" "Peter Gabriel" et autres sont plutôt liées au formatage de la liste d'info plutot qu'aux infos elles-même non?

Mais bien d'accord que OSCceleton est plus sympa à utiliser, même si tu perds en portée.

@ralf Pour les coordonnées, tu as essayé la lib mapping, entre autre [mapping/curve_exp] qui pourrait t'aider. Sinon, il faudrait essayer de transformer tout ton système GEM en  mode ortho.

Hors ligne

 

#6 2013-09-30 11:28:55 Re : position dans GEM avec kinect

nononononono
membre
Lieu: Toulouse
Date d'inscription: 2011-02-04
Messages: 614

Re: position dans GEM avec kinect



Salut, en effet c'est assez compliqué de faire coincider le Z de la Kinect avec celui de l'openGL...
tu devrait pouvoir entrevoir une solution dans ce papier : http://unspecified.wordpress.com/2012/0 … rix-maths/ (regarde à la fin...)

Hors ligne

 

#7 2013-09-30 17:13:41 Re : position dans GEM avec kinect

sakramh
membre
Lieu: clichy-sous-bois
Date d'inscription: 2008-12-02
Messages: 829
Site web

Re: position dans GEM avec kinect



@ enclavacuba : oui sans doute . j'avais plus rien pour vérifier et je me souvenais d'une histoire de propriété à forcer pour faire correspondre l'image du sensor avec celle de la camera  . Je sens que je vais recompiler ces objets .
cela dit la courbe finale du lien de sixfoisno (merci pour ce lien) est pas loin d'une courbe log .
Aussi il y a des exemples de patch sur le github de l'auteur https://github.com/kronihias/pd-kinect-examples
que j'ai bien sûr jamais essayés roll

Dernière modification par sakramh (2013-09-30 17:20:42)


le code est l'alchimie de l'âge du silicium

Hors ligne

 

#8 2013-09-30 19:25:21 Re : position dans GEM avec kinect

ralf
membre
Date d'inscription: 2013-09-28
Messages: 31

Re: position dans GEM avec kinect



Oui, merci pour ces liens. Je vais regarder tout ça de près. J'espérais bien trouver une courbe plutôt que d'essayer d'établir des coefficients pour chaque position de Z.

Pour ce qui est des exemples du message de sakramh, la correspondance, dans ces exemples, est très approximative malheureusement.

Je ne pense pas que l'utilisation d'OSCeleton simplifie ce problème de correspondance entre les deux espaces. (J'avoue ne pas avoir réussi à l'installer sur mon Mac car ce n'est pas simple...) Je dirais même que cela complique un peu puisque l'on ne peut plus recevoir l'image de la kinect (sauf erreur de ma part) alors qu'avec Openni, on l'obtient directement.

Hors ligne

 

#9 2013-09-30 20:16:36 Re : position dans GEM avec kinect

benjamin
membre
Lieu: Orléans
Date d'inscription: 2008-03-18
Messages: 168
Site web

Re: position dans GEM avec kinect



pour tests, essayer avec l'objet [maxlib/scale] qui permet de faire du mapping de données de façon linéaire ou logarithmique
pour les X dans ton cas, ça donnerait   [maxlib/scale 0 1 -6.4 6.4 0] et remplacer le 0 par un 1 pour passer en logarithmique
as-tu essayé avec une fenetre GEM en rapport 4/3 ? je crois que la resolution de la kinect est du 640x480, une fenetre GEM par exemple en 800x600 créera un espace en x de -5.334 +5.334 et -4 +4 en y
++b

Hors ligne

 

#10 2013-10-01 10:18:15 Re : position dans GEM avec kinect

nononononono
membre
Lieu: Toulouse
Date d'inscription: 2011-02-04
Messages: 614

Re: position dans GEM avec kinect



apres si tu  veux juste faire coincider le Z avec X et Y, comme dit gwen, tu as le mode ortho, ou bien tu peux utiliser cette formule : newX=X-((X/4)*Z) et pareil pour le Y.
++

Hors ligne

 

#11 2013-10-01 10:42:50 Re : position dans GEM avec kinect

pob
Exterminator
Lieu: Rennes
Date d'inscription: 2009-10-13
Messages: 765
Site web

Re: position dans GEM avec kinect



juste une idée comme ça...
C'est pas un problème de focale de la caméra par rapport à la 'focale' e la kinect ?
Si tu changes la focale de ta camera et que tu la déplaces en avançant/reculant, ça ne permet pas à un moment de faire coïncider les deux ?

Hors ligne

 

#12 2013-10-01 14:36:47 Re : position dans GEM avec kinect

sakramh
membre
Lieu: clichy-sous-bois
Date d'inscription: 2008-12-02
Messages: 829
Site web

Re: position dans GEM avec kinect



@ pob : ben non, vu que les deux capteurs (camera genre webcam et camera "sensor") sont dans la même boîte (la kinect) . Et que déjà dans les patches d'exemples de mesure de distance de pix_freenect il y a tout un tas de pépites de chocolat, non pardon, de [expr] avec des formules empiriques pour compenser/rectifier un problème lié à libfreenect  . Maintenant c'est vrai que dans Gem on peut modifier le placement de la camera rvb .

Dernière modification par sakramh (2013-10-01 14:43:17)


le code est l'alchimie de l'âge du silicium

Hors ligne

 

#13 2013-10-01 19:35:32 Re : position dans GEM avec kinect

Olm-e
membre
Lieu: Bruxelles
Date d'inscription: 2011-11-15
Messages: 84
Site web

Re: position dans GEM avec kinect



j'avoue ne pas avoir testé cet objet pix_openni, mais avec osceleton j'obtenais des coordonnées assez cohérentes, tant qu'on considère qu'on est dans un espace 3D et que la camera ajoute effectivement une perspective ... (les coordonnées sont donc toujours relatives à une origine qui est la kinect virtuelle, et la caméra dois être adaptée pour voir la scène sous l'angle voulu)

sinon, pour un usage type kioske, il y a l'excelent "melon" ... :  http://sourceforge.net/projects/kinect-melon/

Hors ligne

 

#14 2013-10-07 18:59:05 Re : position dans GEM avec kinect

ralf
membre
Date d'inscription: 2013-09-28
Messages: 31

Re: position dans GEM avec kinect



Oui, merci de ces infos. Je m'en suis finalement sorti en utilisant le mode ortho et des coefficients établis expérimentalement (sinon, c'est un casse-tête impossible...). Excellente aussi l'application melon ! Le seul dommage de ces applications externes est que l'on ne peut ressortir que les coordonnées du squelette et non l'image. C'est pourquoi je retourne vers open_ni qui fournit des données assez stables.

A propos des coordonnées, je voudrais bien comprendre la relation entre ce fichu espace GEM et ce que l'on met dedans...

Par exemple :

Si on prend une simple image chargée par un pix_image et dessinée par un pix_draw. L'image dans GEM est affichée dans sa taille d'origine (la taille que l'on retrouve si on ouvre l'image dans un éditeur d'image). C'est pratique, sauf que l'on ne peut lui appliquer aucune transformation, déplacement, rotation, etc (impossible avec pix_draw).

Mais si on affiche cette même image avec un pix_texture et un rectangle (sans argument), l'image prend une taille carrée de 1x1. Après cela, c'est tout un pataquès pour lui redonner sa taille d'origine : le seul moyen que j'ai trouvé c'est d'utiliser un pix_info pour ressortir la taille de l'image en pixels, de diviser la taille en X et en Y par 125 (un chiffre magique dont la provenance m'échappe...) et de l'appliquer dans les entrées width et height du rectangle.

Auriez-vous une explication à cela ou une solution meilleure que mon usine à gaz ?

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024