2013-06-17 4 views
9

L'exigence est de définir un rectangle autour de chaque oeil dans l'espace 3D. Il devrait y avoir un moyen de suivre les yeux en utilisant le Microsoft Kinect SDK. Selon thisComment suivre les yeux avec Kinect SDK?

Le suivi du visage SDK utilise le système de coordonnées Kinect pour produire ses résultats de suivi 3D. L'origine est située au centre optique (capteur) de la caméra, l'axe Z pointe vers un utilisateur, l'axe Y pointe vers . Les unités de mesure sont des mètres pour la translation et des degrés pour les angles de rotation .

Ajout

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

à CreateResult() dans Microsoft.Kinect.Toolkit.FaceTracking imprime

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 

lorsque le SDK commence le suivi d'un visage. Je devrais pouvoir utiliser ces coordonnées pour peindre une boîte autour de chaque oeil mais la coordonnée Z devrait probablement être plus proche de 1.0, pas -0.1 .. ou -0.2 .. (basé sur ma configuration) donc je ne fais pas confiance les nombres. Le XYZ est-il supposé être l'emplacement du FeaturePoint dans l'espace 3D par rapport au capteur? Est-ce que je me méprends sur le système de coordonnées Kinect? Est-ce que j'utilise le SDK Kinect de manière incorrecte? Est-ce important que j'utilise un capteur Kinect Xbox 360? (Microsoft ne garantit pas une compatibilité totale pour Kinect pour les applications Windows et le capteur Kinect Xbox 360)

Edit: L'ajout de ce

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

à FaceTracker.cs :: piste() affiche ce

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

Ces chiffres semblent corrects en fonction de la configuration. Les FeaturePoints n'impriment qu'une seule fois, mais les Headpoints sont imprimés en continu pendant le suivi des pistes. Les valeurs FeaturePoint sont-elles relatives au HeadPoint?

+0

En dehors de suivi du visage, XYZ est mesurée en millimètres de l'origine Kinect. Je suppose que les valeurs sont les mêmes, même si elles peuvent être la différence d'un point du visage. Je n'ai pas travaillé directement avec le traqueur de visage avant d'être sûr. –

+0

@EvilClosetMonkey: Selon [this] (http://msdn.microsoft.com/en-us/library/jj130970.aspx#ID4EWF) _Les unités de mesure sont meters_. – jacknad

+0

En effet, les semblent être en mètres pour le traqueur de visage. La profondeur régulière [système de coordonnées] (http://msdn.microsoft.com/en-us/library/hh973078.aspx) rapporte en millimètres et je n'ai pas retrouvé le lien que vous avez posté ci-dessus. À quelle distance de la Kinect êtes-vous assis? Prenez une règle! :) –

Répondre

Questions connexes