c# - 如何使用 Kinect SDK 跟踪眼睛?

标签 c# kinect kinect-sdk eye-tracking

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

The Face Tracking SDK uses the Kinect coordinate system to output its 3D tracking results. The origin is located at the camera’s optical center (sensor), Z axis is pointing towards a user, Y axis is pointing up. The measurement units are meters for translation and degrees for rotation angles.

添加

...
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 传感器重要吗? (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 的吗?

最佳答案

关于c# - 如何使用 Kinect SDK 跟踪眼睛?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17155573/

相关文章:

c# - 检查 JToken 是否为空数组

c# - Kinect 语音识别

c# - 无法加载文件或程序集 Microsoft.Kinect.Tools

c# - 捕获手写并将其转换为键入文本的最佳方法

kinect - 如何找到关节坐标(X,Y,Z),以及如何绘制被跟踪关节的轨迹?

c# - 基于原始 SDK 的 kinect 数据需要什么校正数学

c# - 在 C# 中,有什么方法可以判断 Regex.Replace 进行了多少次替换?

c# - 以编程方式为营销人员保存 Sitecore Web 表单

c# - 可移植类库是否适用于 .net 3.5?

wpf - Kinect SDK 1.6 和 Joint.ScaleTo 方法