<< Chapter < Page | Chapter >> Page > |
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.
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.
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.
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
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:
Notification Switch
Would you like to follow the 'Elec 301 projects fall 2015' conversation and receive update notifications?