2014-04-25 3 views
2

을 사용하여 비디오에서 얼굴을 감지하는 것이 매우 빠릅니다. 내 코드에서 얼굴 감지 용 matlab 코드를 작성했습니다. 첫 번째 100 프레임의 얼굴을 감지하고 각 프레임에서 얼굴을 자르고 데이터베이스 폴더에 저장합니다. 문제 iam facingvision.CascadeObjectDetector in matlab의

프레임별로 프레임을 감지하는 속도가 매우 느립니다. 4000 프레임에서 작업해야하므로 더 빨리 실행할 수있는 아이디어가 있습니까?

2. 내 데이터베이스 폴더에는 1 ~ 100 개의 얼굴 이미지가 표시되어야하지만 11 번째 및 12 번째 얼굴 이미지가 직접 표시되어 있지 않습니다. 10 번째 이미지 다음에 13 번째 이미지가 표시됩니다 .23 번째 얼굴 이미지가 blurr.Likewise 너무 많습니다. 누락 및 일부가 blurr.Last 이미지 번호는 216.But으로 총 106 얼굴 이미지가 데이터베이스 폴더에 있습니다. 그 12 이미지가 blurr.Remaining은 올바른 이미지입니다.

clc; 
clear all; 

obj=vision.VideoFileReader('basu.avi'); 

for k=0:99 

videoFrame  = step(obj); 
%using viola-jones algorithm 
     FaceDetect = vision.CascadeObjectDetector; 

    %FaceDetect 
     BB = step(FaceDetect,videoFrame); 
     %BB 
     figure(2),imshow(videoFrame); 

for i = 1:size(BB,1) 
     rectangle('Position',BB(i,:),'LineWidth',3,'LineStyle','-','EdgeColor','r'); 
end 

%crop faces and convert it to gray 
for i = 1:size(BB,1) 
J= imcrop(videoFrame,BB(i,:)); 
I=rgb2gray(imresize(J,[292,376])); 

%save cropped faces in database folder 
filename = ['G:\matlab_installed\bin\database\' num2str(i+k*(size(BB,1))) '.jpg']; 
    imwrite(I,filename); 
end 
end 
+0

'FaceDetect = vision.CascadeObjectDetector;'를 루프 밖에서 움직이면 약간 속도가 빨라질 수 있습니다. –

+0

For 루프는 프레임 수만큼 실행됩니다. 루프 외부에서 수행 할 수있는 방법. 비디오는 프레임 모음을 의미합니다. – prash2

+0

물론입니다. 내 제안을 잘못 이해 했으니 다시 읽어주십시오. 매번 얼굴 검출 개체를 만드는 것을 피하기 위해 ** 회선 밖에 ** ** 한 줄만 이동하도록 제안했습니다 (한 번만 만들어야 각 프레임에 사용할 수 있습니다). –

답변

2

것들을 몇 가지 당신이 시도 할 수 있습니다

  • 확실히 루프의 FaceDetect = vision.CascadeObjectDetector; 외부로 이동합니다. 한 번만 얼굴 검출기 개체를 만들어야합니다. 모든 프레임에 대해이를 다시 만드는 것은 성능 병목 현상입니다.

  • vision.VideoFileReader은 기본적으로 클래스 'single'의 프레임을 반환합니다. 출력 데이터 유형을 'uint8'으로 변경하면 얼굴 검출기의 속도가 빨라집니다. obj=vision.VideoFileReader('basu.avi', 'VideoOutputDataType', 'uint8');

  • vision.VideoFileReader도 회색 음영으로 변환 할 수 있습니다. obj=vision.VideoFileReader('basu.avi', 'VideoOutputDataType', 'uint8', 'ImageColorSpace', 'Intensity'); 사용 rgb2gray을 호출하는 것보다 빠를 수 있습니다.

  • 'MinSize''MaxSize' 옵션을 사용하여 감지되는 얼굴의 크기를 제한하고 옵션을 시도하거나 얼굴을 감지하기 전에 프레임을 다운 샘플링하십시오.

+0

dima 당신은 vision을위한 고정 된 크기를 설정하는 방법을 알고 있습니다 .CascadeObjectDetector? ('MinSize'/ 'MaxSize'를 호출하거나 호출하지 않고) – UZIERSKI

+0

은 vision.CascadeObjectDetector에 대해 한 번 정의한 정적 크기와 비슷하므로 bbox는이 고정 크기를 스냅 샷으로 저장합니까? – UZIERSKI