图像处理-从视频源检测人体

本文关键字:检测 视频 图像处理 | 更新日期: 2023-09-27 18:02:10

我正在尝试从视频源中提取人,以便我以后可以使用他的图像。我只需要提取人体,而忽略环境。好在背景是静态的。我尝试过使用AForge并应用CustomFrameDifferenceDetector过滤器,它将当前帧与静态背景图像进行比较,并提取不同的像素(差异>阈值)。效果很好,但当皮肤或部分衣服的颜色与背景相似时,就会出现问题。在这些情况下,过滤器忽略了这些部分,结果在身体上有各种孔。简单地降低阈值并不能解决问题,因为身体阴影和其他噪声会增加(即使在噪声抑制下)。

你知道任何已知的解决这个问题的方法吗?还是这个问题还没有解决?

图像处理-从视频源检测人体

这是一个很难解决的问题(这也是微软Kinect不只使用可见光的原因之一,也是蓝/绿屏幕仍然如此流行的原因之一)。我会尽量去掉洞(你应该能够预测身体的位置)。如果您有足够的处理能力,可以使用不同的阈值并合并结果。你也可以尝试过滤新的分离图像(例如,将当前帧添加到最后一帧并将结果规范化)。这样你就可以更加一致地跟踪你在一帧中丢失的形状。

另一种方法:使用检测到的形状/区域仅用于检测身体的位置。也就是说,忽略它的特定形状,在预估的身体位置上方/周围使用一个预制的形状。如果你想做一些类似蓝屏的行为,这很可能不起作用,但它可能有助于关闭漏洞。

Alturos。Yolo做的正是你想要的。

Yolo从带注释的图像中学习如何检测您正在寻找的对象。首先,您需要使用Nuget Package Manager安装项目,以及一组已经训练好的映像。在您的示例中,YOLOv2-tiny模型应该足够了:

Install-Package Alturos.Yolo
Install-Package Alturos.YoloV2TinyVocData 

安装后,您可以像这样使用它来检测图像中的人:

using (var yoloWrapper = new YoloWrapper("yolov2-tiny-voc.cfg", "yolov2-tiny-voc.weights", "voc.names"))
{
    var items = yoloWrapper.Detect(@"your_image.jpg");
    //if (items[0].Type == "Person") { ... }
}

items数组将包含找到的所有对象的信息。你可以使用Type属性来检查是否为人类