6. Face recognition

6.1. Face Recognition

The most basic task of face recognition is "face detection". You must first "capture" a face in order to recognize it when comparing it with a new face in the future. We only provide the face detection method here. Interested students can build their own classifiers and their own face datasets for name recognition. The most common way to detect faces is to use "Haar cascade classifiers". Object detection using cascade classifiers based on Haar features is an efficient object detection method proposed by Paul Viola and Michael Jones in the paper "Rapid Object Detection using a Boosted Cascade of Simple Features" in 2001. This machine learning method is based on training cascade functions with a large number of positive and negative images, which are then used to detect objects in other images. Here, we will use it for face recognition. Initially, the algorithm requires a large number of positive images (face images) and negative images (images without faces) to train the classifier. Then we need to extract features from them. The good news is that OpenCV has trainers and detectors. If you want to train your own object classifier, such as cars, airplanes, etc., you can create one using OpenCV. Here we use a pre-trained classifier. In OpenCV, static images and real-time video face detection have similar operations. In layman's terms, video face detection is just reading each frame of the image from the camera and then detecting it using the static image detection method. Face detection first requires a classifier:

@ Face detector (default): haarcascade_frontalface_default.xml

@ Face detector (fast Harr): haarcascade_frontalface_alt2.xml

@ Face detector (side view): haarcascade_profileface.xml

@ Eye detector (left eye): haarcascade_lefteye_2splits.xml

@ Eye detector (right eye): haarcascade_righteye_2splits.xml

@ Mouth detector: haarcascade_mcs_mouth.xml

@ Nose detector: haarcascade_mcs_nose.xml

@ Body detector: haarcascade_fullbody.xml

@ Face detector (fast LBP): lbpcascade_frontalface.xml

@ Only open eyes can be detected:

@ haarcascade_eye.xml

@ haarcascade_eye_tree_eyeglasses.xml [Only when the person being tested is wearing glasses]

@ https://github.com/opencv/opencv/tree/master/data Download classifier file location

@ Note that the following return values are all four: coordinate X, coordinate Y, width W, height H

haarcascade_profileface.xml is Haar cascade data, which can be obtained from data/haarcascades in the OpenCV3 source code. Next, actual face detection is performed through face_cascade.detectMultiScale(). We cannot directly pass each frame of the image obtained by the camera into .detectMultiScale(), but should first convert the image into a grayscale image, because face detection requires such a color space.

(Note: Be sure to enter the correct location of haarcascade_profileface.xml.)

6.2. OpenCV detection API function:

detectMultiScale(const Mat& image, vector& objects, double scaleFactor=1.1,int minNeighbors, int flag,cvSize)

image: the input grayscale image

objects: the rectangular box vector group of the detected object

scaleFactor: the scale parameter in each image scale, the default value is 1.1. The scale_factor parameter can determine how big the jump is between two window scans of different sizes. If this parameter is set large, the calculation will be faster, but if the window misses a face of a certain size, the object may be lost.

minNeighbors: The parameter is the number of neighbors that each cascade rectangle should retain, the default is 3.

minNeighbors controls false detections, and the default value of 3 indicates that there are at least 3 overlapping detections before we think that the face really exists.

minSize: minimum size of the target

maxSize: maximum size of the target

6.3. Code implementation

Source code path:

/home/pi/project_demo/07.AI_Visual_Recognition/06.Face_recognition/06_Face_recognition.ipynb