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?
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. –
@EvilClosetMonkey: Selon [this] (http://msdn.microsoft.com/en-us/library/jj130970.aspx#ID4EWF) _Les unités de mesure sont meters_. – jacknad
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! :) –