如何使用Kinect SDK跟踪眼睛?

9
要求在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 " + v.X + " Y " + v.Y + " Z " + v.Z);
}

在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 Sensor是否重要?(Microsoft不保证Kinect for Windows应用程序与Xbox 360 Kinect Sensor完全兼容)
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?


除了面部跟踪之外,XYZ是从Kinect原点以毫米为单位测量的。我猜这些值是相同的,尽管它们可能是与面部点的差异。我以前没有直接处理过面部跟踪器,所以无法确定。 - Nicholas Pappas
@EvilClosetMonkey:根据此文档,测量单位为米。 - jacknad
实际上,人脸跟踪器似乎是以米为单位的。常规深度坐标系统报告以毫米为单位,我还没有追踪到您上面发布的链接。您离Kinect有多远?拿把尺子! :) - Nicholas Pappas
我注意到你在MSDN上得到了一个答案。看起来这个答案应该被转发到这里供参考,但是我自己这样做会感觉有些奇怪,因为我没有回答过它。也许原帖的作者应该这样做?对此我不太确定礼仪要求是什么。 - Mike Precup
@MikePrecup:我建议OP在MSDN上发布一个链接到这里。 - jacknad
@jacknad,我在下面发表了我的评论。谢谢! - Mike Marks
网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接