2016-07-01 20 views
0

Ich entwickle eine Kinect-Gesten-Anwendung. Also habe ich einen Code vom Internet zur Handgeste bekommen.Wie misst man die Kinect Skeleton Axis Dimension?

handupgesture() 
{ 

bool up = false; 
float refDistance = 0.2F; 

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

for (int i = 20; i < localSkeletonHistory.Count; i++) 
{ 
      if (!(Math.Abs(localSkeletonHistory[i].Joints[JointType.ShoulderCenter].Position.Y - refPos.Y) < 0.05F && 
        Math.Abs(localSkeletonHistory[i].Joints[JointType.HandRight].Position.X - startPos.X) < 0.05F && 
        Math.Abs(localSkeletonHistory[i].Joints[JointType.HandRight].Position.Z - startPos.Z) < 0.05F)) 
      { 
       break; 
      } 
      if (localSkeletonHistory[i].Joints[JointType.HandRight].Position.Y >= (startPos.Y + refDistance)) 
      { 
       up = true; 
       SkeletonHistory.Clear(); 
       break; 
      } 
     } 
     return up; 
} 

meine Zweifel sind:

  • Was 0.05F ist? ist es in Meter? Zentimeter?
  • Der Z-Achsenabstand ist der Abstand der Verbindung vom Kinect-Abstand. ist es ?

Dieser Code erkennt keine Hand. Irgendwelche Fehler oder Vorschläge?

Antwort

1

0.05F in C# bedeutet eine Float-Nummer.

Das Schlüsselwort float gibt einen einfachen Typ an, der 32-Bit Gleitkommawerte speichert. Die folgende Tabelle zeigt die Genauigkeit und den ungefähren Bereich für den Float-Typ .

Standardmäßig wird ein reelles numerisches Literal auf der rechten Seite des Zuweisungsoperators als doppelt behandelt. Daher einen Schwimmer Variable zu initialisieren, verwenden das Suffix F oder F, wie im folgende Beispiel:

float x = 3.5F; or in your case 0.05F 

Quelle: https://msdn.microsoft.com/en-us/library/b1e65aza.aspx

Was Ihre zweite Frage, z-Achsen repräsentieren die Tiefe . Jedes Bild, das aufgenommene Tiefenbild, wird von der Kinect-Laufzeit in Skelettdaten verarbeitet. Skeleton-Daten enthalten 3D-Positionsdaten für menschliche Skelette für bis zu zwei Personen, die im Tiefensensor sichtbar sind. Die Position eines Skeletts und jedes der Skelettgelenke (wenn die aktive Verfolgung aktiviert ist) werden als (x, y, z) -Koordinaten gespeichert. Im Gegensatz zum Tiefenraum werden Skelettkoordinaten in Metern angegeben.

Die x-, y- und z-Achsen sind die Körperachsen des Tiefensensors wie unten dargestellt:

Skeleton space

Dies ist ein rechtshändiges Koordinatensystem, das mit einem Kinect am Ursprung platziert die positive z-Achse erstreckt sich in die Richtung, in die der Kinect zeigt. Die positive y-Achse erstreckt sich nach oben und die positive x-Achse erstreckt sich nach links.

Quelle: https://msdn.microsoft.com/en-us/library/hh973078.aspx

Was Ihre letzte Frage - versuchen, die 0.5F Toleranz zu reduzieren.

Außerdem würde Ich mag Sie in Windows Kinect-Website für einige Beispiele Punkt: https://kinectforwindows.codeplex.com/