【问题标题】:Kinect SDK 1.5 - Face Tracking : WPF color-depth only trackerKinect SDK 1.5 - 人脸跟踪:WPF 颜色深度跟踪器
【发布时间】:2012-05-28 14:10:58
【问题描述】:

我正在开发用于面部跟踪的新 kinect SDK,我注意到示例 (Previous Question) 提供的托管代码和非托管代码之间存在一些差异。我无法使用 c# 和 WPF 重现快速 c++ 示例:从与 kinect for windows 相同的设置开始,这是两组代码:

c++:

if (m_KinectSensorPresent && m_KinectSensor.GetVideoBuffer())
{
    HRESULT hrCopy = m_KinectSensor.GetVideoBuffer()->CopyTo(m_colorImage, NULL, 0, 0);
    if (SUCCEEDED(hrCopy) && m_KinectSensor.GetDepthBuffer())
    {
        hrCopy = m_KinectSensor.GetDepthBuffer()->CopyTo(m_depthImage, NULL, 0, 0);
    }
    // Do face tracking
    if (SUCCEEDED(hrCopy))
    {
        FT_SENSOR_DATA sensorData(m_colorImage, m_depthImage, m_KinectSensor.GetZoomFactor(), m_KinectSensor.GetViewOffSet());

        FT_VECTOR3D* hint = NULL;
        if (SUCCEEDED(m_KinectSensor.GetClosestHint(m_hint3D)))
        {
            hint = m_hint3D;
        }
        if (m_LastTrackSucceeded)
        {
            hrFT = m_pFaceTracker->ContinueTracking(&sensorData, hint, m_pFTResult);
        }
        else
        {
            hrFT = m_pFaceTracker->StartTracking(&sensorData, NULL, hint, m_pFTResult);
        }
    }
}

c#:

int hr;
            HeadPoints headPointsObj = null;
            Vector3DF[] headPoints = GetHeadPointsFromSkeleton(skeletonOfInterest);

        if (headPoints != null && headPoints.Length == 2)
        {
            headPointsObj = new HeadPoints { Points = headPoints };
        }

        this.copyStopwatch.Start();
        this.colorFaceTrackingImage.CopyFrom(colorImage);
        this.depthFaceTrackingImage.CopyFrom(depthImage);
        this.copyStopwatch.Stop();

        var sensorData = new SensorData(this.colorFaceTrackingImage, this.depthFaceTrackingImage, DefaultZoomFactor, Point.Empty);
        FaceTrackingSensorData faceTrackSensorData = sensorData.FaceTrackingSensorData;

        this.startOrContinueTrackingStopwatch.Start();
        if (this.trackSucceeded)
        {
            hr = this.faceTrackerInteropPtr.ContinueTracking(ref faceTrackSensorData, headPointsObj, this.frame.ResultPtr);
        }
        else
        {
            hr = this.faceTrackerInteropPtr.StartTracking(
                ref faceTrackSensorData, ref regionOfInterest, headPointsObj, this.frame.ResultPtr);
        }

同一个跟踪调用的结果,显然提供了相同的数据,c# 的结果为 false,c++ 的结果为 true。

有什么想法吗?我希望我的跟踪器能在骨架数据之外工作,就像 c++ 示例一样。

【问题讨论】:

    标签: wpf kinect


    【解决方案1】:

    我在此论坛Microsoft Forum 中找到了解决方案。你必须修改 SDK 提供给你的工具,而且提供的代码乱七八糟是不好的,但它终于可以工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      相关资源
      最近更新 更多