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?
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. –
@EvilClosetMonkey: Według [this] (http://msdn.microsoft.com/en-us/library/jj130970.aspx#ID4EWF) _ Jednostki pomiarowe to meters_. – jacknad
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ę! :) –