Tuesday, August 13, 2013

OpenCv face detection procedure and Explanation

Hi all, Hope you all are doing all. Today I will explain the face detection procedure used in opencv.


Procedure :


Step1: create cascaded classifier using the training algorithm provided by opencv and get the .xml file.

Step2: load the pre-made .xml file.

Step3: input frame from camera/ input image and convert it to grey scale image.

Step4: use opencv’s ‘CascadeClassifier:: detectMultiScale()’ function to detect faces of different sizes in the input image.


Explanation of CascadeClassifier::detectMultiScale() –


Parameters:



i. image - Matrix of the type CV_8U containing an image where objects are detected.
ii. objects – Vector of rectangles where each rectangle contains the detected object.
iii. scaleFactor – Parameter specifying how much the image size is reduced at each image scale.
iv. minNeighbors – Parameter specifying how many neighbour's each candidate rectangle should have to retain it.
v. minSize – Minimum possible object size. Objects smaller than that are ignored.
vi. maxSize – Maximum possible object size. Objects larger than that are ignored.

       Basically what CascadeClassifier:: detectMultiScale()’ does is it takes the original image and creates an image pyramid from it, using the resize factor and searches for faces/objects in it. Image pyramid is a multi-scale representation of an image, such that the face detection can be scale-invariant, i.e., detecting large and small faces using the same detection window.

       This gives the ability of detecting faces/objects at a single model scale, throughout different images scales, meaning that if a detection happens at a specific layer, the  bounding box will be rescaled the same amount as the original image was to reach that pyramid layer.
       Using this technique you can detect multiple people scales at only a single model scale, which is computationally less expensive than training a model for each possible scale and running those over the single image.
       To make a good detector you need to train the cascade properly with a good number of sample images. Here is an example-








1 comment: