如何使用Kinect SDK跟踪眼睛?

要求是在3D空间中围绕每只眼睛定义矩形。 应该有一种方法可以使用Microsoft Kinect SDK跟踪眼睛。 根据这个

Face Tracking SDK使用Kinect坐标系输出其3D跟踪结果。 原点位于相机的光学中心(传感器),Z轴指向用户,Y轴指向上方。 测量单位是用于平移的米和用于旋转角度的度。

添加

... 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 " + vX + " Y " + vY + " Z " + vZ); } 

到Microsoft.Kinect.Toolkit.FaceTracking中的CreateResult()打印

 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 

当SDK开始跟踪面部时。 我应该能够使用这些坐标在每只眼睛周围画一个框,但是Z坐标应该更接近1.0,而不是-0.1 ..或-0.2 ..(根据我的设置)所以我不相信这些数字。 XYZ应该是FeaturePoint在3D空间中相对于传感器的位置吗? 我是否误解了Kinect坐标系? 我是否正确使用Kinect SDK? 我使用的是Xbox 360 Kinect传感器吗? (Microsoft不保证Kinect for Windows应用程序和Xbox 360 Kinect传感器的完全兼容性)

编辑:添加此项

 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 :: Track()打印出来

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

根据设置,这些数字似乎是正确的。 FeaturePoints仅打印一次,但HeadPoints连续打印而trackSucceeded。 FeaturePoint值是否相对于HeadPoint?