Face Detection: 1.1 Haar Classifier
Face Detection: 1.1 Haar Classifier
Face Detection: 1.1 Haar Classifier
Face Detection
A computer program that decides whether an image is a positive image (face image) or
negative image (non-face image) is called a classifier. A classifier is trained on hundreds
of thousands of face and non-face images to learn how to classify a new image correctly.
OpenCV provides us with two pre-trained and ready to be used for face detection clas-
sifiers:
i Haar Classifier
ii LBP Classifier
The Haar Classifier is a machine learning based approach, an algorithm created by Paul
Viola and Michael Jones; which are trained from many many positive images (with faces)
and negatives images (without faces).
It starts by extracting Haar features from each image as shown by the windows below:
1
Chapter 1 Face Detection 2
Each window is placed on the picture to calculate a single feature. This feature is a
single value obtained by subtracting the sum of pixels under the white part of the win-
dow from the sum of the pixels under the black part of the window.Now, all possible
sizes of each window are placed on all possible locations of each image to calculate plenty
of features.
For example, in above image,two features can be extracted. The first one focuses on the
property that the region of the eyes is often darker than the area of the nose and cheeks.
The second feature relies on the property that the eyes are darker than the bridge of
the nose.
But among all these features calculated, most of them are irrelevant. For example,
when used on the cheek, the windows become irrelevant because none of these areas are
darker or lighter than other regions on the cheeks, all sectors here are the same.
So to discard irrelevant features and keep only those relevant with a fancy technique
called Adaboost. AdaBoost is a training process for face detection, which selects only
those features known to improve the classification (face/non-face) accuracy of our clas-
sifier.
In the end, the algorithm considers the fact that generally: most of the region in an
image is a non-face region. Considering this, its a better idea to have a simple method
to check if a window is a non-face region, and if it’s not, discard it right away and dont
process it again. So we can focus mostly on the area where a face is.
Chapter 1 Face Detection 3
The Local Binary Patterns needs to be trained on hundreds of images. LBP is a visu-
al/texture descriptor, faces are also composed of micro visual patterns.So, LBP features
are extracted to form a feature vector that classifies a face from a non-face.
Each training image is divided into some blocks as shown in the picture below.
For each block, LBP looks at 9 pixels (33 window) at a time, and with a particular
interest in the pixel located in the center of the window.
Then, it compares the central pixel value with every neighbor’s pixel value under the 33
window. For each neighbor pixel that is greater than or equal to the center pixel, it sets
its value to 1, and for the others, it sets them to 0.
After that, it reads the updated pixel values (which can be either 0 or 1) in a clockwise
order and forms a binary number. Next, it converts the binary number into a decimal
number, and that decimal number is the new value of the center pixel. We do this for
every pixel in a block.
Chapter 1 Face Detection 4
Then, it converts each block values into a histogram, one histogram for each block in an
image:
Finally, it concatenates these block histograms to form a one feature vector for one
image, which contains all the features.
Each OpenCV face detection classifier has its pros and cons, but the major differences
are in accuracy and speed.