C# Kinect V2高清人脸跟踪-多个人脸
我已经在WPF中使用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
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来选择高清人脸。你能分享一些代码吗,我很忙。非常感谢。