我需要检测脸部在视频中出现的帧数。我使用MathWorks站点(http://www.mathworks.in/help/vision/examples/face-detection-and-tracking-using-camshift.html)中提供的CAMShift算法查看了示例代码。有没有办法知道脸部是否出现在特定的框架中?
我是MatLab的新手。我假设如果没有检测到面部,步骤函数将返回假值(条件失败 - 类似于C)。有可能的解决方案吗?我认为使用MinSize也是一种可能的解决方案。
我并不担心计算负担 - 尽管可以采用更快的方法。我目前的代码如下:
clc;
clear all;
videoFileReader = vision.VideoFileReader('Teapot.mp4', 'VideoOutputDataType', 'uint8', 'ImageColorSpace', 'Intensity');
video = VideoReader('Teapot.mp4');
numOfFrames = video.NumberOfFrames;
faceDetector = vision.CascadeObjectDetector();
opFolder = fullfile(cd, 'Face Detected Frames');
frameCount = 0;
shotCount = 0;
while ~isDone(videoFileReader)
videoFrame = step(videoFileReader);
bbox = step(faceDetector, videoFrame);
framCount = frameCount + 1;
for i = 1:size(bbox,1)
shotCount = shotCount + 1;
rectangle('Position',bbox(i,:),'LineWidth', 2, 'EdgeColor', [1 1 0]);
videoOut = insertObjectAnnotation(videoFrame,'rectangle',bbox,'Face');
progIndication = sprintf('Face has been detected in frame %d of %d frames', shotCount, numOfFrames);
figure, imshow(videoOut), title(progIndication);
end
end
release(videoFileReader);
答案 0 :(得分:1)
您可以使用vision.CascadeObjectDetector
对象检测任何特定帧中的面部。如果它未检测到任何面,则其step
方法将返回一个空数组。问题是人脸检测算法并不完美。有时它会检测到误报,i。即检测没有的面孔。您可以尝试减轻我设置MinSize
和MaxSize
属性的速度,假设您知道您希望找到的尺寸。