检测脸部出现在视频中的帧

时间:2014-06-12 08:33:41

标签: matlab image-processing computer-vision face-detection matlab-cvst

我需要检测脸部在视频中出现的帧数。我使用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);

1 个答案:

答案 0 :(得分:1)

您可以使用vision.CascadeObjectDetector对象检测任何特定帧中的面部。如果它未检测到任何面,则其step方法将返回一个空数组。问题是人脸检测算法并不完美。有时它会检测到误报,i。即检测没有的面孔。您可以尝试减轻我设置MinSizeMaxSize属性的速度,假设您知道您希望找到的尺寸。