In this Python tutorial, learn to write a Python program for face and eye detection using OpenCV. OpenCV supports algorithms that are related to machine learning and computer vision. In addition, OpenCV offers support to many programming languages such C++, Java, and of course, Python. Platforms that OpenCS is available on are Android, iOS, Linux, OS X, and Windows. For this tutorial, I will be implementing the on Windows operating system with PyCharm.

What is OpenCV-Python

OpenCV-Python is a Python library that is designed to solve computer vision and machine learning problems. Python is a general programming language is very popular because of it’s code readability and simplicity. When Python is compared to other languages such as C or C++, Python is slower.

The great part is that Python can be extended with C/C++. C/C++ is a computationally intensive code which can can be combined with Python wrappers, as modules. This is a win-win, C/C++ offers fast code and Python is a simple programming language to code.

Since numerical operations are needed in solving problems for computer vision and machine learning, OpenCV-Python works with Numpy. OpenCV utilizes NumPy to convert OpenCV array structures to and from NumPy arrays.

OpenCV-Python Cascade Classifier Detection

There are two stages in a cascade classifier; detection and training. In this tutorial, we will focus on detection and OpenCV offers pre-trained classifiers such as eyes, face, and smile. In order to detect, those classifiers, there are XML files associated to the classifiers that must be imported into your code.

Below is the list of XML files for Haar-Cascades and can be easily found on GitHub:

haarcascade_eye.xml

haarcascade_eye_tree_eyeglasses.xml

haarcascade_frontalcatface.xml

haarcascade_frontalcatface_extended.xml

haarcascade_frontalface_alt.xml

haarcascade_frontalface_alt2.xml

haarcascade_frontalface_alt_tree.xml

haarcascade_frontalface_default.xml

haarcascade_fullbody.xml

haarcascade_lefteye_2splits.xml

haarcascade_licence_plate_rus_16stages.xml

haarcascade_lowerbody.xml

haarcascade_mcs_mouth.xml

haarcascade_profileface.xml

haarcascade_righteye_2splits.xml

haarcascade_russian_plate_number.xml

haarcascade_smile.xml

haarcascade_smile1.xml

haarcascade_upperbody.xml

haarcascade_wallclock.xml

Implementing Facial Detection with Python cv2

In order to begin this facial detection, review make sure to download both of these xml files for this tutorial:

haarcascade_frontalface_default.xml

haarcascade_eye.xml

Import NumPy and cv2

There are two packages that will need to be imported and below are the pip commands to install for command prompt if needed. Make sure to install in the scripts directory where pip is installed.

pip install numpy

pip install opencv-python

1 2 import numpy as np import cv2

cv2.CascadeClassifier() for Face and Eyes

Now that you in have installed and imported the two modules, put the haarcascade_eye.xml & haarcascade_frontalface_default.xml files in the same folder as your script. If you prefer to save these two files in another location, make sure to add the full path. I have added the full path in the below example for reference.

1 2 face_cascade = cv2 . CascadeClassifier ( 'C://path//to//frontalfaceXMLhaarcascade_frontalface_default.xml' ) eye_cascade = cv2 . CascadeClassifier ( 'C://path//to//eyeXMLhaarcascade_eye.xml' )

cv2.imread() and cv2.cvtColor()

Nos is to create a variable for the image you wish to use facial detection with cv2.imread(). After this, create a gray scale image of this picture for use with cv2.cvtColor().

1 2 3 img = cv2 . imread ( 'F://FaceEyesDetectionHeadshot.jpg' ) gray = cv2 . cvtColor ( img , cv2 . COLOR_BGR2GRAY )

detectMultiScale() and rectangle()

The detectMultiScale() function will create be used to create the faces variable for all detections in the image. In order to visualize each detection, we must iterate over each detection and place rectangles over each face that is detected. Personally, this is where it becomes very cool to learn because this is the basics of furthering your learning and knowledge in facial recognition.

So, how do detections work? A detection works by detecting it’s top-left corner coordinates. In addition to width and height of the rectangle.

The rectangle() function draws over the images and the rectangle is placed. In order to do so, the pixel coordinates of the bottom-right corner and top-left corner must be known.

The rectangle() function has the following arguments:

Original image

Coordinates to detect the bottom-right point

Coordinates to detect the top-left point

Rectangle color

Rectangle line thickness

1 2 3 4 5 6 7 8 9 faces = face_cascade . detectMultiScale ( gray , 1.3 , 5 ) for ( x , y , w , h ) in faces : cv2 . rectangle ( img , ( x , y ) , ( x + w , y + h ) , ( 255 , 0 , 0 ) , 2 ) roi_gray = gray [ y : y + h , x : x + w ] roi_color = img [ y : y + h , x : x + w ] eyes = eye_cascade . detectMultiScale ( roi_gray ) for ( ex , ey , ew , eh ) in eyes : cv2 . rectangle ( roi_color , ( ex , ey ) , ( ex + ew , ey + eh ) , ( 0 , 255 , 0 ) , 2 )

imshow(),waitKey() and destroyAllWindows()

The function imshow() will display the image. The waitKey() is very important because it waits for a keystroke before closing the window. If we were not to use this function, imshow() would display the image, but close the window immediately. Lastly, destroyAllWindows() closes the window when a key in pressed.

Face and Eye Detection Single Person Example

Take the below code and copy into a single Python file and run it. Once you execute the code you will see a similar facial recognition detection on your image.

Single Person Picture Before:

Single Person Picture After:

Face and Eye Detection Group Person Example

Now let’s try a group of people for facial and eye recognition.

Group Picture Before:

Group Picture After:

As you can see, the facial and eye recognition was right on point!