OBJECT DETECTION : FACE DETECTION USING HAAR CASCADE CLASSFIERS

Following code strems video from a web cam and detects face and eyes:

import numpy as np
import cv2
from matplotlib import pyplot as plt

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

cap=cv2.VideoCapture(1)
while True:
   ret, img =cap.read()
   gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
   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)
    cv2.imshow('img',img)
    k=cv2.waitKey(30) & 0xff
    if k=27:
       break
cap.release()
cv2.destroyAllWindows()

Before running this code we are required to download haarcascade_frontalface_default.xml and haarcascade_eye.xml you can find it on haarcascade's  github page or you can import it from OpenCV

OpenCV already contains many pre-trained classifiers for face, eyes, smile etc. Those XML files are stored in opencv/data/haarcascades/ :

~/OpenCV/opencv/data/haarcascades$ ls

haarcascade_eye_tree_eyeglasses.xml   haarcascade_mcs_leftear.xml
haarcascade_eye.xml                   haarcascade_mcs_lefteye.xml
haarcascade_frontalface_alt2.xml      haarcascade_mcs_mouth.xml
haarcascade_frontalface_alt_tree.xml  haarcascade_mcs_nose.xml
haarcascade_frontalface_alt.xml       haarcascade_mcs_rightear.xml
haarcascade_frontalface_default.xml   haarcascade_mcs_righteye.xml
haarcascade_fullbody.xml              haarcascade_mcs_upperbody.xml
haarcascade_lefteye_2splits.xml       haarcascade_profileface.xml
haarcascade_lowerbody.xml             haarcascade_righteye_2splits.xml
haarcascade_mcs_eyepair_big.xml       haarcascade_smile.xml
haarcascade_mcs_eyepair_small.xml     haarcascade_upperbody.xml
  • ret, img =cap.read() reads webcam input
  • cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) we convert color image to black and white to reduce unecessory computation 
  • cv2.rectangle(img, (x+y), (x+w,y+h), (255,0,0) ,2) creating a rectangle around the face and next two lines specify face boundaries
  • cv2.imshow('img',img) is used to output the processed image with rectangles around face and eyes
Posted on by