C# Kinect V2高清人脸跟踪-多个人脸

C# Kinect V2高清人脸跟踪-多个人脸,c#,wpf,kinect,kinect-sdk,kinect.toolbox,C#,Wpf,Kinect,Kinect Sdk,Kinect.toolbox,我已经在WPF中使用Kinect V2工作了很长时间。目前,我已经编写了一个模块,通过HighDefinitionFaceFrameSource和HighDefinitionFaceFrameReader从颜色流中提取人脸轮廓。基本上,我使用HightDefinitionFaceFrameResult中的faceModel和faceAllignment属性来计算面周围的路径。然后,我将其映射到颜色流,这会给我一个人的脸的图像。然后,我将颜色流绘制到一个WriteableBitmap,显示在我的X

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

这种方法对于一个人来说非常有效。然而,当我尝试将它扩展到六个人时,它减慢了我的可视化效果的渲染,使之停止!似乎只有渲染受到影响,因为面帧似乎像往常一样到达,CPU和内存使用也不受影响。这似乎发生在我处理多个高清人脸帧时

我还注意到,Microsoft SDK示例只跟踪一张带有
HighDefinitionFaceFrameSource
的脸。也许SDK中有一个限制


是否有人通过
HignDefinitionFaceFrameSource
Reader
跟踪了六个人

在进一步测试后,我发现Kinect SDK不允许多个
HighDefinitionFaceFrameSource
s具有设置的跟踪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是身体对象列表中的当前跟踪ID。骨架跟踪器应在每一帧上更新此值


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

你有没有找到答案?我试图控制HD人脸跟踪,一次跟踪不止一个人,但还没有找到任何例子。如何使用跟踪id告诉它HD中要跟踪的人脸?我不知道你可以通过它对应的身体id来选择高清人脸。你能分享一些代码吗,我很忙。非常感谢。