2013-06-17 17 views
9

Die Anforderung besteht darin, ein Rechteck um jedes Auge im 3D-Raum zu definieren. Es sollte eine Möglichkeit geben, Augen mit dem Microsoft Kinect SDK zu verfolgen. Nach thisWie verfolgen Sie Augen mit Kinect SDK?

Die Face Tracking SDK verwendet die Kinect-System Tracking-Ergebnisse zur Ausgabe seiner 3D-Koordinaten. Der Ursprung befindet sich an der Kamera Zentrum (Sensor), Z-Achse zeigt auf einen Benutzer, Y-Achse zeigt oben. Die Maßeinheiten sind Meter für die Translation und Grad für Drehwinkel.

Hinzufügen

... 
Debug3DShape("OuterCornerOfRightEye", faceTrackFrame.Get3DShape() 
    [FeaturePoint.OuterCornerOfRightEye]); 
Debug3DShape("InnerCornerRightEye", faceTrackFrame.Get3DShape() 
    [FeaturePoint.InnerCornerRightEye]); 
Debug3DShape("InnerCornerLeftEye", faceTrackFrame.Get3DShape() 
    [FeaturePoint.InnerCornerLeftEye]); 
Debug3DShape("OuterCornerOfLeftEye", faceTrackFrame.Get3DShape() 
    [FeaturePoint.OuterCornerOfLeftEye]); 
... 
private void Debug3DShape(string s, Vector3DF v) 
{ 
    Debug.WriteLine(s + " X " + v.X + " Y " + v.Y + " Z " + v.Z); 
} 

zu CreateResult() in Microsoft.Kinect.Toolkit.FaceTracking druckt

OuterCornerOfRightEye X -0.05728126 Y 0.04850625 Z -0.1144406 
InnerCornerRightEye X -0.01584376 Y 0.04850625 Z -0.1279687 
InnerCornerLeftEye X 0.01584374 Y 0.04850625 Z -0.1279687 
OuterCornerOfLeftEye X 0.05728124 Y 0.04850625 Z -0.1144406 

wenn das SDK ein Gesicht beginnt Tracking. Ich sollte in der Lage sein, diese Koordinaten zu verwenden, um ein Feld um jedes Auge zu malen, aber die Z-Koordinate sollte wahrscheinlich näher an 1,0 sein, nicht -0,1 .. oder -0,2 .. (basierend auf meinem Setup), also traue ich nicht die Zahlen. Soll die XYZ die Position des FeaturePoint im 3D-Raum relativ zum Sensor sein? Verkenne ich das Kinect-Koordinatensystem falsch? Benutzt ich das Kinect SDK falsch? Spielt es eine Rolle, dass ich einen Xbox 360 Kinect Sensor verwende? (Microsoft volle Kompatibilität garantiert nicht, für Kinect für Windows-Anwendungen und die Xbox 360 Kinect Sensor)

Edit: diese

Hinzufügen
if (trackSucceeded) { 
    ... 
    if (headPointsObj != null) 
     for (int i = 0; i < 2; i++) 
      DebugHeadPoint(i, headPointsObj.Points); 
} 
private void DebugHeadPoint(int i, Vector3DF[] points) { 
    if (points == null) throw new ArgumentNullException("points"); 
    Debug.WriteLine("HeadPoint[" + i + "] X " + points[i].X + 
     " Y " + points[i].Y + 
     " Z " + points[i].Z); 
} 

zu FaceTracker.cs :: Track() dieses

druckt
HeadPoint[0] X 0.01227657 Y -0.2290326 Z 1.319978 
HeadPoint[1] X 0.00613283 Y -0.02143053 Z 1.280334 
HeadPoint[0] X 0.003939687 Y -0.2297621 Z 1.319813 
HeadPoint[1] X -0.003732742 Y -0.02388078 Z 1.277723 
... 

Diese Zahlen scheinen basierend auf dem Setup korrekt zu sein. Die FeaturePoints werden nur einmal gedruckt, aber die HeadPoints werden kontinuierlich gedruckt, während TrackSucceeded. Sind FeaturePoint-Werte relativ zum HeadPoint?

+0

Außerhalb der Gesichtserkennung wird XYZ in Millimetern vom Ursprung Kinect gemessen. Ich würde vermuten, dass die Werte die gleichen sind, obwohl sie den Unterschied zu einem Gesichtspunkt ausmachen können. Ich habe mich vorher noch nicht direkt mit dem Face Tracker beschäftigt. –

+0

@EvilClosetMonkey: Nach [dieser] (http://msdn.microsoft.com/en-us/library/jj130970.aspx#ID4EWF) _Die Maßeinheiten sind Meter_. – jacknad

+0

Tatsächlich scheinen die Meter für den Gesichtstracker zu sein. Die reguläre Tiefe [Koordinatensystem] (http://msdn.microsoft.com/en-us/library/hh973078.aspx) meldet sich in Millimetern und ich habe den oben angegebenen Link nicht gefunden. Wie weit weg von der Kinect sitzt du? Nimm ein Lineal! :) –

Antwort

Verwandte Themen