我一直在研究只在安全摄像头视频中检测人物的方法。我想将vision.peopledetector
与vision.BlobAnalysis
和vision.ForegroundDetector
一起使用。但它不起作用。
它应该像基于运动的多目标跟踪示例,但仅用于检测人类。似乎无法运作。
到目前为止,我没有使用vision.BlobAnalysis
和`vision.ForegroundDetector。它根本不准确,不能计数
video = VideoReader('atrium.mp4');
peopleDetector = vision.PeopleDetector;
videoPlayer = vision.VideoPlayer;
while hasFrame(video)
img = readFrame(video);
[bboxes,scores] = step(peopleDetector,img);
D = 1;
frame = insertObjectAnnotation(img,'rectangle',bboxes,D);
step(videoPlayer,frame);
end
答案 0 :(得分:1)
行。所以这就是我认为正在发生的事情:atrium.mp4视频的分辨率不足以使用vision.PeopleDetector
进行可靠的检测。以下是我修改代码的方法:
video = VideoReader('atrium.mp4');
peopleDetector = vision.PeopleDetector;
videoPlayer = vision.VideoPlayer;
while hasFrame(video)
img = readFrame(video);
img = imresize(img, 3); % resize the frame to make people large enough
[bboxes,scores] = step(peopleDetector,img);
D = 1;
frame = insertObjectAnnotation(img,'rectangle',bboxes,D);
step(videoPlayer,frame);
end
我现在在视频中看到相当一致的检测,但它们仍然没有被跟踪,并且似乎有一些错误的检测(一个,特别是在视频的右下角)。为了避免这些问题,我会做一些像这个演示所做的事情:
https://www.mathworks.com/help/vision/examples/track-face-raspberry-pi2.html
本质上,此演示仅在没有检测时使用面部检测,并在检测完成后切换到跟踪。这样,您的处理循环明显更快(跟踪的计算要求比检测要低),并且您可以(通常)具有比每帧中的独立检测更高的保真度跟踪。您还可以包含一些其他启发式方法,例如>中根本没有移动。 50帧意味着误报,等等。