2016-07-05 1 views
2

Je développe une application de geste de la main avec le dispositif de kinect. Ici, je vérifie le geste avec les coordonnées X, Y, Z.Quelle est la nature de XYZ cordinates de squelette avec kinect

Je veux connaître la nature du squelette pour un geste particulier. Je vérifie le geste est pousser la main ou pas.

private handpush() 
{ 

bool MovedFront = false; 
float refDistance = 0.2F; 


SkeletonPoint refPos = SkeletonHistory[0].Joints[JointType.ShoulderCenter].Position; 
SkeletonPoint startPos = SkeletonHistory[0].Joints[JointType.HandRight].Position; 

//printing all intial cordinates 

Console.WriteLine(" ShoulderCenter[0].Z = " + refPos.Z); 

Console.WriteLine(" HandRight[0].X = " + startPos.X); 
Console.WriteLine(" HandRight[0].Y = " + startPos.Y); 
Console.WriteLine(" HandRight[0].Z = " + startPos.Z); 


    for (int i = 20; i < SkeletonHistory.Count; i++) 
    { 
      Console.WriteLine(" ShoulderCenter[i].Z = " + SkeletonHistory[i].Joints[JointType.ShoulderCenter].Position.Z); 
      Console.WriteLine(" HandRight[i].X = " + SkeletonHistory[i].Joints[JointType.HandRight].Position.X); 
      Console.WriteLine(" HandRight[i].Y = " + SkeletonHistory[i].Joints[JointType.HandRight].Position.Y); 
      Console.WriteLine(" HandRight[i].Z = " + SkeletonHistory[i].Joints[JointType.HandRight].Position.Z); 


      if (!(SkeletonHistory[i].Joints[JointType.HandRight].Position.Y < SkeletonHistory[i].Joints[JointType.Head].Position.Y && 
        Math.Abs(SkeletonHistory[i].Joints[JointType.ShoulderCenter].Position.Z - refPos.Z) < 0.05F && 
        Math.Abs(SkeletonHistory[i].Joints[JointType.HandRight].Position.Y - startPos.Y) < 0.1F && 
        Math.Abs(SkeletonHistory[i].Joints[JointType.HandRight].Position.X - startPos.X) < 0.1F)) 
      { 
       Console.WriteLine("CheckHandPush breaking !!"); 
       break; 
      } 

      if (SkeletonHistory[i].Joints[JointType.HandRight].Position.Z <= (startPos.Z - refDistance)) 
      { 
       Console.WriteLine("CheckHandPush sucess"); 
       bMovedFront = true; 
       temp_SkeletonHistory.Clear(); 
      } 
    } 

    return MovedFront; 
} 

Mais je reçois des valeurs intial comme:

sortie:

ShoulderCenter[0].Z = 1.246491 
HandRight[0].X = 0.1519185 
HandRight[0].Y = -0.2328865 
HandRight[0].Z = 1.014945 

ShoulderCenter[i].Z = 1.248788 
HandRight[i].X = 0.1397971 
HandRight[i].Y = -0.2452036 
HandRight[i].Z = 1.054223 

----- 
ShoulderCenter[0].Z = 1.26865 
HandRight[0].X = 0.1545139 
HandRight[0].Y = -0.3375102 
HandRight[0].Z = 1.057466 

ShoulderCenter[i].Z = 1.25049 
HandRight[i].X = 0.09602752 
HandRight[i].Y = -0.283217 
HandRight[i].Z = 1.150237 


--- 

ShoulderCenter[0].Z = 1.243356 
HandRight[0].X = 0.1406149 
HandRight[0].Y = -0.2458241 
HandRight[0].Z = 1.065399 

ShoulderCenter[i].Z = 1.250542 
HandRight[i].X = 0.1392216 
HandRight[i].Y = -0.2418006 
HandRight[i].Z = 1.046706 

Je pousse ma main, de sorte que l'axe Z devrait augmenter la valeur ou diminuer la valeur? signifie que la longueur de la coordonnée Z commence à partir du dispositif kinect ou du corps humain?

Est-ce que ces conditions sont bonnes pour la poussée manuelle? Aucune suggestion ? puis-je obtenir un exemple de code ??

Des liens utiles pour la vérification des coordonnées x, y, z pour la poussée manuelle, la traction manuelle?

Je suis confus avec la vérification des coordonnées.

Répondre

3

Ces valeurs sont exprimées en mètres dans la v2 Kinect « Camera Space » (Il y a une belle photo sur la page liée):

espace caméra fait référence au système de coordonnées 3D utilisé par Kinect. Le système de coordonnées est défini comme suit:

  • l'origine (x = 0, y = 0, z = 0) est situé au centre du capteur IR sur Kinect
  • X pousse à
  • gauche de la sonde
  • Y grandit (à noter que cette direction est basée sur l'inclinaison du capteur)
  • Z pousse dans la direction du capteur fait face
  • 1 unité = 1 mètre

Par conséquent, lorsque vous vous tenez devant la caméra et que vous poussez votre main vers elle, la valeur Z devrait diminuer.
Pour obtenir les coordonnées en fonction de la position des utilisateurs & direction, vous devez faire pivoter et traduire les coordonnées vous-même.

+0

Très bien. Merci Henning. Je l'ai eu à propos des systèmes de coordonnées. Maintenant, je peux écrire des algorithmes pour pousser la main – user2986042