Face Detection using Cascade Classifier using OpenCV – Python
Face detection is a important task in computer vision and Haar Cascade classifiers play an important role in making this process fast and efficient. Haar Cascades are used for detecting faces and other objects by training a classifier on positive and negative images.
- Positive Images: These images contain the objects that the classifier is trained to detect.
- Negative Images: These images contain everything else which do not contain the object we want to detect.
In this article, we will learn how to perform face detection using Haar Cascades classifier for detecting faces and eyes using OpenCV.
Face Detection using Cascade Classifier Implementation
We will go through the step-by-step procedure to implement object detection using Haar Cascades.
1. Importing required Libraries
Here, we will use Numpy, OpenCV and Matplotlib.
import cv2
import numpy as np
import matplotlib.pyplot as plt
2. Loading Haar Cascade Classifiers
Next we will load the pre-trained Haar Cascade classifiers for detecting faces and eyes. You can download these classifier from this link.
face_cascade = cv2.CascadeClassifier("/content/haarcascade_frontalface_default.xml")
eye_cascade = cv2.CascadeClassifier('/content/haarcascade_eye.xml')
3. Creating Function to Detect Faces
Now we’ll create a function adjusted_detect_face
()
to detect faces in an image. This function uses the face cascade classifier to identify face rectangles and draws rectangles around the detected faces.
def adjusted_detect_face(img):
face_img = img.copy()
face_rect = face_cascade.detectMultiScale(face_img, scaleFactor=1.2, minNeighbors=5)
for (x, y, w, h) in face_rect:
cv2.rectangle(face_img, (x, y), (x + w, y + h), (255, 255, 255), 10)
return face_img
4. Creating Function to Detect Eyes
Similarly we create a function detect_eyes
()
to detect eyes using the eye cascade classifier.
def detect_eyes(img):
eye_img = img.copy()
eye_rect = eye_cascade.detectMultiScale(eye_img, scaleFactor=1.2, minNeighbors=5)
for (x, y, w, h) in eye_rect:
cv2.rectangle(eye_img, (x, y), (x + w, y + h), (255, 255, 255), 10)
return eye_img
5. Loading a Image
Now let’s load an image and apply both face and eye detection on it. The image which we are using can be downloaded from this link.
img = cv2.imread('/content/andrew.jpg')
img_copy1 = img.copy()
img_copy2 = img.copy()
img_copy3 = img.copy()
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
Output:

sample image
6. Detecting Faces and Eyes
After running the code you will see three images Face Detection, Eyes Detection and Face and Eyes Detection. These images will also be saved as face.jpg
, eyes.jpg
and face+eyes.jpg
respectively.
Face Detection:
face = adjusted_detect_face(img_copy1)
plt.imshow(cv2.cvtColor(face, cv2.COLOR_BGR2RGB))
plt.show()
cv2.imwrite('face.jpg', face)
Output:

face detection
Eyes Detection:
eyes = detect_eyes(img_copy2)
plt.imshow(cv2.cvtColor(eyes, cv2.COLOR_BGR2RGB))
plt.show()
cv2.imwrite('eyes.jpg', eyes)
Output:

eyes detection
Face and Eyes Detection:
eyes_face = adjusted_detect_face(img_copy3)
plt.imshow(cv2.cvtColor(eyes_face, cv2.COLOR_BGR2RGB))
plt.show()
cv2.imwrite('face+eyes.jpg', eyes_face)
Output:

face and eyes detection
In this article we explored Haar Cascades classifier for face detection by using pre-trained XML file. We can create custom XML files tailored to detect specific objects and can be used for wide range of computer vision applications.