2016-07-05 28 views
2

Ich entwickle eine Hand Gesten-Anwendung mit Kinect-Gerät. Hier überprüfe ich die Geste mit X-, Y- und Z-Koordinaten.Was ist die Natur von XYZ Koordinaten des Skeletts mit kinect

Ich möchte die Art des Skeletts für eine bestimmte Geste wissen. Ich überprüfe die Geste ist Hand drücken oder nicht.

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; 
} 

Aber ich bin immer intial Werte wie:

Ausgang:

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 

ich meine Hand bin schieben, so dass die Z-Achse den Wert erhöhen sollte oder den Wert verringern? bedeutet, dass die Z-Koordinatenlänge vom Kinect-Gerät oder vom menschlichen Körper ausgeht?

Sind diese Bedingungen gut für die Hand drücken? Irgendwelche Vorschläge ? Kann ich einen Beispielcode bekommen?

Nützliche Links für x, y, z-Koordinatenprüfung für Handdruck, Handzug?

Ich bin mit der Koordinierungsprüfung verwirrt.

Antwort

3

Diese Werte sind in Metern in der Kinect v2 „Camera Space“ (Es gibt ein schönes Bild auf der verlinkten Seite):

Kamera Raum bezieht sich auf das 3D-System von Kinect verwendet koordinieren. Das Koordinatensystem wird wie folgt definiert:

  • Ursprung (x = 0, y = 0, z = 0) in der Mitte des IR-Sensors auf Kinect befindet
  • X wächst auf den Sensor linken
  • Y aufwächst (beachten Sie, dass diese Richtung auf dem Neigungssensor basiert)
  • Z wächst aus in Richtung der Sensor
  • 1 Einheit = 1 Meter
zugewandt

Wenn Sie also vor der Kamera stehen und Ihre Hand darauf drücken, sollte der Z-Wert abnehmen.
Um Koordinaten basierend auf der Benutzerposition & Richtung zu erhalten, müssten Sie die Koordinaten selbst drehen und übersetzen.

+0

Großartig. Danke Henning. Ich habe es über die Koordinatensysteme erfahren. Jetzt kann ich Algorithmen für den Hand-Push schreiben – user2986042