2013-06-17 21 views
9

Il requisito è definire un rettangolo attorno a ciascun occhio nello spazio 3D. Ci dovrebbe essere un modo per tenere traccia degli occhi utilizzando l'SDK di Microsoft Kinect. Secondo thisCome rintracciare gli occhi con Kinect SDK?

La Face Tracking SDK utilizza il sistema di coordinate Kinect per emettere i suoi risultati di monitoraggio 3D. L'origine si trova nel centro ottico della fotocamera (sensore), l'asse Z è rivolto verso un utente, l'asse Y sta puntando su su. Le unità di misura sono metri per la traslazione e gradi per gli angoli di rotazione .

Aggiunta

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

a CreateResult() in Microsoft.Kinect.Toolkit.FaceTracking stamperà

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 

quando l'SDK avvia il monitoraggio di un volto. Dovrei essere in grado di utilizzare queste coordinate per dipingere una casella attorno a ciascun occhio ma la coordinata Z dovrebbe essere probabilmente più vicina a 1.0, non -0.1 .. o -0.2 .. (in base alla mia configurazione), quindi non mi fido di i numeri. Si suppone che XYZ sia la posizione del FeaturePoint nello spazio 3D rispetto al sensore? Ho frainteso il sistema di coordinate Kinect? Sto utilizzando l'SDK Kinect in modo errato? È importante che io stia utilizzando un sensore Kinect Xbox 360? (Microsoft non garantisce la piena compatibilità per Kinect per le applicazioni Windows e il sensore di Kinect per Xbox 360)

Edit: L'aggiunta di questo

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

a FaceTracker.cs :: Track() stampa questo

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

Questi numeri sembrano corretti in base all'impostazione. I FeaturePoint si stampano solo una volta ma i punti di riferimento vengono stampati continuamente mentre la traccia è completata. I valori FeaturePoint sono relativi all'headPoint?

+0

Al di fuori di face tracking, XYZ viene misurata in millimetri dall'origine Kinect. Direi che i valori sono gli stessi, sebbene possano essere la differenza rispetto a un punto facciale. Non ho mai saltato direttamente con il face tracker per essere sicuro. –

+0

@EvilClosetMonkey: in base a [questo] (http://msdn.microsoft.com/en-us/library/jj130970.aspx#ID4EWF) _Le unità di misura sono metri_. – jacknad

+0

In effetti, sembra di essere in metri per il face tracker. La profondità regolare [sistema di coordinate] (http://msdn.microsoft.com/en-us/library/hh973078.aspx) riporta in millimetri e non ho rintracciato il collegamento che hai postato sopra. Quanto distanti dal Kinect sei seduto? Prendi un righello! :) –

risposta