필터 지우기
필터 지우기

Detecting face very fast from video using vision.Cas​cadeObject​Detector in matlab code

조회 수: 1 (최근 30일)
I wrote matlab code for face detection.In my code it is detecting face for first 100 frames and it crop faces from each frame and saves it in database folder.Problems iam facing
1.Detecting frame by frame is very slow.Is there any idea to run faster since i have to work on 4000 frames.
2.In my database folder it has to show 1 to 100 face images but it is not showing 11th and 12th face images directly it showing 13th face image after 10th image.23rd face image is blurr.Likewise so many images are missing and some are blurr.Last image number it is showing as 216.But total 106 face images are there.12 images are blurr.
clc;
clear all;
obj=vision.VideoFileReader('basu.avi');
for k=0:99
videoFrame = step(obj);
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 folder
filename = ['G:\matlab_installed\bin\database\' num2str(i+k*(size(BB,1))) '.jpg'];
imwrite(I,filename);
end
end
  댓글 수: 3
prashanth
prashanth 2014년 4월 26일
Elapsed time is 130.401650 seconds.I used tic()and toc() for whole code
Aishwarya Hunashal
Aishwarya Hunashal 2018년 4월 3일
By using above code i am getting cropped frames without faces also how to solve this?please help me

댓글을 달려면 로그인하십시오.

답변 (1개)

Dima Lisin
Dima Lisin 2014년 5월 3일
There are a few of things you can try:
Definitely move FaceDetect = vision.CascadeObjectDetector; outside of the loop. You only need to create the face detector object once. Re-creating it for every frame is definitely your performance bottleneck.
vision.VideoFileReader returns a frame of class 'single' by default. If you change the output data type to 'uint8', that should speed up the face detector. Use obj=vision.VideoFileReader('basu.avi', 'VideoOutputDataType', 'uint8');
vision.VideoFileReader can also do the conversion to grayscale for you. Use obj=vision.VideoFileReader('basu.avi', 'VideoOutputDataType', 'uint8', 'ImageColorSpace', 'Intensity'); This may be faster than calling rgb2gray.
Try limiting the size of the faces being detected using 'MinSize' and 'MaxSize' options of vision.CascadeObjectDetector and/or try downsampling the frame before detecting faces.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by