front_processing/doc/readme.txt
author bastiena
Tue, 20 Mar 2012 18:00:55 +0100
changeset 7 8a21bec5d45f
parent 5 d40f84d77db4
permissions -rw-r--r--
Middleware : No proximity bugs anymore. The skeleton disappear if a tracked person is too close or not tracked anymore. Processing : There are no laggs anymore when an user stay too long moving his hands and drawing tons of ellipses. (TUIO Cursors are not taken by their vectors, only the last position of the cursors are caught to be drawn).
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
     1
TraKERS (Tracking using Kinect and Extracting Robust Skeletons) est une interface basée sur la détection de gestures / positions du squelette envoyé par le SDK Microsoft (1.0) de Kinect.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
     2
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
     3
Auteur : Alexandre BASTIEN.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
     4
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
     5
I) TraKERS - Eléments requis :
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
     6
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
     7
Dans cette partie, il vous faudra installer Processing, disponible ici : http://processing.org/download/
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
     8
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
     9
II) TraKERS - Structure :
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    10
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    11
Dans le Front, se trouvent deux exécutables "Trakers" et "Trakers_gestures", respectivement pour le tracé de courbes via les coordonnées des positions des mains récupérées du Middleware et pour l'affichage des gestes détectés. Il aurait été possible de les rassembler en un programme, mais pour des raisons de clarté lors de l'utilisation, j'ai préféré procéder ainsi.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    12
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    13
III) TraKERS - Utilisation :
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    14
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    15
Si le Middleware est lancé, le programme de Front lancé fait office de client, et récupère les notifications envoyées. Détaillons les deux programmes :
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    16
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    17
A) Trakers
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    18
Comme indiqué plus haut, il reçoit et affiche les coordonnées des mains entrant dans le champ délimité par le Middleware.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    19
Afin d'indiquer les limites de zone de dessin, un masque noir a été appliqué, et se met à jour.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    20
Les notifications du client s'affichent en blanc en haut du masque, et indique si une ou deux mains sont détectées.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    21
Lorsque l'on dessine, une série d'ellipses apparaissent à l'écran, formant des courbes.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    22
Lorsque deux mains sont détectées, la gauche est rouge et l'autre verte.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    23
Si une main et une seule est détectée, la courbe sera rouge.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    24
Si la ou les mains s'approchent et atteignent une certaine proximité, le segment dessiné deviendra bleu à partir de ce moment-là.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    25
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    26
B) Trakers_gestures
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    27
Le même masque a été appliqué dans ce programme d'affichage de notifications de gestes indiqués par le Middleware.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    28
Le programme indique simplement dans la partie supérieure du masque s'il détecte ou non une gesture, et s'il en détecte une, donne le code envoyé par le Middleware.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    29
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    30
IV) Fonctionnement :
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    31
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    32
Les programmes sont découpés en fonctions, afin de rendre leur structure plus cohérente.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    33
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    34
Il existe deux fonctions principales sous Processing.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    35
void setup(), qui permet d'initialiser des variables, la taille de la fenêtre, etc.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    36
void draw(), qui est raffraichie constamment et sert principalement à dessiner ou faire appel aux fonctions amenées à être appelées toutes les N ms.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    37
Il est bien entendu possible de dessiner via des fonctions déjà implémentées et prêtes à l'emploi, dont la documentation se trouve ici :
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    38
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    39
http://processing.org/reference/
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    40
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    41
Ils reçoivent des messages OSC de la part du Middleware. Ceux-ci sont contenus dans des objets qui sont des TuioCursors (en 3D) pour gérer la position des mains et des TuioStrings (objets personnalisés, ajoutés aux dll client et serveur TUIO).
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    42
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    43
Dans les programmes, les curseurs 3D sont principalement utilisés pour transmettre les coordonnées X, Y et Z (X et Y étant des pixels, et Z une distance en mètres). Les strings, quant à eux, ne véhiculent que de simples messages textuels.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    44
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    45
Ils sont envoyés par des listes présentes dans le client TUIO.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    46
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    47
Voici un bout de code expliquant comment obtenir la position des mains :
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    48
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    49
TuioProcessing tuioClient;
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    50
tuioClient = new TuioProcessing(host, port; //host pourrait être this par défaut et port le numéro du port au format int.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    51
//On récupère les curseurs.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    52
Vector tuioCursorList = tuioClient.getTuioCursors();
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    53
//Si aucune main n'est repérée.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    54
if(tuioCursorList.size() <= 0)
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    55
{
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    56
	//fonction_1();
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    57
}
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    58
//Si une main est repérée.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    59
else if (tuioCursorList.size() == 1)
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    60
{
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    61
	TuioCursor cursor = (TuioCursor)tuioCursorList.elementAt(0);
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    62
	//fonctionAffiche1Main(cursor);
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    63
}
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    64
//Si c'est les 2.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    65
else if(tuioCursorList.size() == 2)
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    66
{
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    67
	//fonctionAffiche2Mains(tuioCursorList);
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    68
}
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    69
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    70
Voici à présent comment extraire les positions d'une main, via un tuioCursor :
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    71
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    72
//On obtient la liste des points (déplacements) du curseur TUIO.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    73
Vector pointList = cursor.getPath();
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    74
for (int j=0;j<pointList.size();j++)
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    75
{
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    76
	//On prend chaque point pour les afficher.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    77
	TuioPoint pt = (TuioPoint)pointList.get(j);
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    78
	//On affiche les coordonnées dans la fenêtre à la position (100 ; j*20), j allant de 20 à N.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    79
	text(pt.getX() + " " + pt.getY() + " " + pt.getZ(), 100, j*20+20);
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    80
	//Si deux mains sont détectées, on quitte la fonction.
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    81
	if(tuioClient.getTuioCursors().size() == 2)
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    82
		break;
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    83
}
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    84
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    85
Il est à noter que plusieurs projets existent sous Processing, notamment dans l'affichage de fluides ou de fumée par exemple :
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    86
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    87
http://processing.org/discourse/yabb/YaBB.cgi?board=Contribution_Simlation;action=display;num=1045166270
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    88
http://bodytag.org/nav.php?u=fluid3/
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    89
http://bodytag.org/fluid3/fluid3.pde
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    90
http://bodytag.org/nav.php?u=smoke2/
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    91
http://bodytag.org/smoke2/smoke2.pde
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    92
d40f84d77db4 Documentations (readme)
bastiena
parents:
diff changeset
    93
Si vous expérimentez des difficultés ou souhaitez me soumettre une requête, voici mon adresse : alexandre.bastien@iri.centrepompidou.fr