Trying to do some simple face detection using opencv + python using Haar Cascade Classifier.
Below code perfectly detects faces in image1, image2 but fails to detect in image3
Kindly help me understand what are the reasons for non-detection of face in image3
import numpy as np
import cv2
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
img = cv2.imread('/home/swiftguy/computer-vision/image3.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 3)
for (x,y,w,h) in faces:
img2 = 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)
cv2.waitKey(0)
cv2.destroyAllWindows()
This is mainly due to the high brightness of the face, and the lack of sharp features on kids' faces (mainly around the nose bridge). Histogram equalisation before face detection can improve detection accuracy for images like this.
If your detector needs to work well on such images, one possibility is to train the classifier with a set of similar images.