1

동영상에 얼굴이 나타나는 프레임 수를 감지해야합니다. MathWorks 사이트 (http://www.mathworks.in/help/vision/examples/face-detection-and-tracking-using-camshift.html)에 제공된 CAMShift 알고리즘을 사용하여 샘플 코드를 조사했습니다. 얼굴이 특정 프레임에 등장했는지 여부를 알 수있는 방법이 있습니까?동영상에 얼굴이 나타나는 프레임 감지하기

저는 MatLab을 처음 사용합니다. 나는 얼굴이 탐지되지 않으면 step 함수가 false 값을 리턴한다고 가정한다. (조건은 실패하고 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

이와 같은 경우에는 아무것도 발견되지 않으면'bbox'가 빈 반환을 기대합니다. (당신이 알고있는 이미지에 그것에 얼굴이 없는지보십시오!). – nkjt

+0

그것이 작동하는 방법이라고 생각하지 않습니다. 캐스케이드 오브젝트는 비디오에서 얼굴을 확실히 감지하고 시도합니다. 그것은 bbox의 가능한 가장 작은 크기를 반환 할 수 있습니다. 나는 얼굴이없는 비디오를 보았습니다. 그게 뭐하는 것 같아요 ... –

+0

정말요? 방금 작업 영역에서 무작위로 선택한 이미지로 시도했기 때문에 공백이 반환됩니다. (당신의 프로그램에서 이것을 체크하기 위해서'isempty'를 사용할 수 있습니다). – nkjt

답변

1

vision.CascadeObjectDetector 개체를 사용하면 특정 프레임의 얼굴을 감지 할 수 있습니다. 얼굴을 감지하지 못하면 step 메서드는 빈 배열을 반환합니다. 문제는 얼굴 검출 알고리즘이 완벽하지 않다는 것입니다. 때로는 오 탐지 (false positive)를 감지합니다. 이자형. 존재하지 않는 얼굴을 감지합니다. 어떤 크기의 얼굴을 원한다고 가정 할 경우 MinSizeMaxSize 속성을 설정하는 것을 완화 할 수 있습니다.