<< Chapter < Page Chapter >> Page >

Application of classsifier to facial recognition

The final output of the cascade classifier training is a classifier XML file that contains the results of the training.OpenCV then provides an easy module to apply that XML file to real time face detection. We just need to import the file, pre-process our images (or frames from real-time videostream), and then run the OpenCV object detection functions.

Fig. 22. cascade training framework

Cascade training framework

We load the trained classifier, load our image, and then the object detect functions returns the position of any foundfaces as a Rectangle with identifiers (x, y, width, height). With the returned positions, we can draw a basic rectangle of thedetected facial regions or even perhaps take it a step further and apply Daft Punk masks to any detected faces.

Fig. 23. sample input image to the classification

Sample input image to the classification

Fig. 24. detected faces from the image of figure 23 using the trained frontal face haar classifier

Detected faces from the image of Figure 23 using the trained Frontal Face HAAR classifier

Fig. 25. sample application of facial recognition: scale-invariant daft punk masks applied to detected facial regions in real-time

Sample application of facial recognition: scale-invariant Daft Punk masks applied to detected facial regions in real-time

Gpu parallelization and cuda implementation

The CUDA implementation in OpenCV’s object detection framework takes advantage of the inherent parallelizationavailable in pre-processing the images and traversing all of the image sub-windows.

Unlike previously with the edge detection and motion detection, where there is no singularly accepted CUDA implementationof the aforementioned algorithms, with facial recognition, OpenCV’s library has been heavily optimized over the yearsto provide that functionality

It would an interesting case study then to abstract the functionalities of their object detection libraries, and comparethe speedups attained from using a heavily optimized 3rd party library against the speedups which we obtained from programswritten by us from scratch.

OpenCV’s CUDA implementation is similar to its serialCPU implementation, except that the cascade classifier is loaded in a CUDA optimized format, and the images are loadedand processed in CUDA-optimized matrices formats created by OpenCV.

High-level python implementation

We again provide sample Python code to demonstrate how the facial recognition algorithm would be implemented ona high level, with the details of implementation abstracted out. The Python OpenCV library exposes an API for facialrecognition via a cascade classifier, as shown in Listing 10.

Listing 10. python implementation of facial recognition with opencv

import cv2 IMAGE = 'richb.jpg'CASCADE_DATA = 'haarcascade_frontalface_default.xml' face_cascade = cv2.CascadeClassifier(CASCADE_DATA)faces = face_cascade.detectMultiScale( cv2.imread(IMAGE, cv2.IMREAD_GRAYSCALE),scaleFactor=1.1, minNeighbors=5,minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE,) # faces now contains tuples indicating the location and size of each detected face in the image

Gpu speedup results

Our code for separable convolution, computation of the image’s gradient magnitude and angle, non-maximum suppressionand selective thresholding, and computation of the thresholded difference and spatial difference density matriceshas both serial CPU and parallel CUDA implementations. Both the CPU and GPU implementations of the entire facialrecognition algorithm are encapsulated in an OpenCV library internally implemented with CUDA. Here, we present speedupresults for each of these procedures on various image sizes obtained on a system with the following hardware:

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Elec 301 projects fall 2015. OpenStax CNX. Jan 04, 2016 Download for free at https://legacy.cnx.org/content/col11950/1.1
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Elec 301 projects fall 2015' conversation and receive update notifications?

Ask