2013-06-17 42 views
9

Wymagane jest zdefiniowanie prostokąta wokół każdego oka w przestrzeni 3D. Powinien istnieć sposób śledzenia oczu przy użyciu zestawu SDK Microsoft Kinect. Według thisJak śledzić wzrok za pomocą aplikacji Kinect SDK?

Face Tracking SDK Kinect wykorzystuje układ współrzędnych na wyjściu jego wyników śledzenia 3D. Początek znajduje się w optycznym środku kamery (czujnik) , oś Z jest skierowana w stronę użytkownika, oś Y wskazuje w górę. Jednostki miary są to metry dla translacji i stopnie dla kątów obrotu .

Dodawanie

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

do CreateResult() in Microsoft.Kinect.Toolkit.FaceTracking drukuje

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 

gdy zaczyna SDK śledzenia twarzy. Powinienem umieć użyć tych współrzędnych, aby pomalować pudło wokół każdego oka, ale współrzędna Z powinna być bliższa 1,0, nie -0,1 .. lub -0.2 .. (w oparciu o moją konfigurację), więc nie ufam liczby. Czy XYZ ma być lokalizacją FeaturePoint w przestrzeni 3D w stosunku do czujnika? Czy źle rozumiem układ współrzędnych Kinect? Czy nieprawidłowo używam zestawu Kinect SDK? Czy to ważne, że korzystam z czujnika Kinect Xbox 360? (Microsoft nie gwarantuje pełnej kompatybilności dla Kinect dla aplikacji Windows i Xbox 360 Kinect Sensor)

Edit: Dodanie tego

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

do FaceTracker.cs :: Track() wypisuje ten

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 
... 

Te liczby wydają się poprawne w zależności od konfiguracji. Punkty charakterystyczne są drukowane tylko raz, ale punkty HeadPoints są drukowane w sposób ciągły, podczas gdy TrackSucceeded. Czy wartości FeaturePoint odnoszą się do HeadPoint?

+0

Poza śledzenia twarzy, XYZ jest mierzone w milimetrach z pochodzenia Kinect. Sądzę, że wartości są takie same, chociaż mogą różnić się od mimiki twarzy. Nie mam przedtem bezpośredniego kontaktu z modułem do śledzenia twarzy. –

+0

@EvilClosetMonkey: Według [this] (http://msdn.microsoft.com/en-us/library/jj130970.aspx#ID4EWF) _ Jednostki pomiarowe to meters_. – jacknad

+0

Rzeczywiście, wydają się być w metrach dla trackera twarzy. Regularna głębokość [układ współrzędnych] (http://msdn.microsoft.com/en-us/library/hh973078.aspx) zgłasza się w milimetrach i nie znalazłem linku, który podałeś powyżej. Jak daleko od Kinect siedzisz? Chwyć linijkę! :) –

Odpowiedz