1

我在 WPF 中使用 Kinect V2 已经有一段时间了。目前,我已经编写了一个模块来通过HighDefinitionFaceFrameSource和从颜色流中提取面部轮廓HighDefinitionFaceFrameReader。本质上,我使用faceModel和中的faceAllignment属性HightDefinitionFaceFrameResult来计算脸部周围的路径。然后我将它映射到颜色流,这给了我一个人脸的图像。然后,我将颜色流绘制到一个WriteableBitmap,并显示在我的 XAML 窗口中。路径数据暂时被丢弃。

这种方法非常适合一个人。但是,当我尝试将其扩展到六个人时,它会减慢我的可视化渲染速度!似乎只有渲染受到影响,因为面部框架似乎像往常一样到达,CPU 和内存使用也没有受到影响。一旦我处理了多个高清面部框架,这似乎就会发生。

我还注意到 Microsoft SDK 示例仅使用HighDefinitionFaceFrameSource. 也许,SDK 有限制?

有没有人设法用HignDefinitionFaceFrameSource&跟踪六个人Reader

4

1 回答 1

1

经过进一步测试,我发现 Kinect SDK 不允许您让多个HighDefinitionFaceFrameSources 具有设置的跟踪 ID。所以,在我看来,当时只允许跟踪一张脸。请注意,我在这里可能错了,也许微软 Kinect 团队的某个人可以给出更明确的答案,但这是我发现的。

这是我设法解决此限制的方法。我正在遍历被跟踪的身体列表并分别为每个人脸设置跟踪 ID。这让我可以跟踪一个人脸一段时间,获取我需要的所有数据,停止跟踪它并移动到下一个人脸并重复。当然,这有很多缺点——你的面部跟踪数据流不像它应该的那样“流畅”,可视化有数据“差距”——很小,但很明显。但是,这只是一种解决方法,我仍在寻找更好的解决方案。

针对您的评论,Sergio,您可以通过为其分配一个当前有效的跟踪 ID 来将其设置为活动的。

        // update the face frame source to track this body

        if (FaceFrameSources[bodyFrameIndex].TrackingId != trackingId)
        {
            FaceFrameSources[bodyFrameIndex].TrackingId = trackingId;
        }


        //set all the tracking face data to false
        // update the high definition face frame source to track this body / face

        if (_highDefinitionFaceFrameSources[bodyFrameIndex].TrackingId != trackingId)
        {
            _highDefinitionFaceFrameSources[bodyFrameIndex].TrackingId = trackingId;
        }

在这里, trackingId 是您的 Body 对象列表中的当前跟踪 ID。您的骨架跟踪器应在每一帧上更新此值。

将 中的TrackingId值设置HighDefinitionFaceFrameSource为 0 将禁用对该对象的跟踪。

于 2016-02-05T18:37:01.977 回答