1、加載xml(兩個(gè)xml文件,一個(gè)描述的是人臉,一個(gè)描述的是眼睛);2、加載待識(shí)別的圖片;3、轉(zhuǎn)換為灰度圖,計(jì)算haar特征(計(jì)算haart特征由opencv來完成);4檢測出當(dāng)前的haar特征,以及人臉上的眼睛;5、對檢測結(jié)果進(jìn)行遍歷,并繪制出人臉和眼睛
# 1 load xml 2 load jpg 3 haar gray 4 detect 5 draw
import cv2
import numpy as np
# load xml 1 file name
face_xml = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_xml = cv2.CascadeClassifier('haarcascade_eye.xml')
# load jpg
img = cv2.imread('face.jpg')
cv2.imshow('src',img)
# haar gray
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# detect faces(檢測圖片中的人臉) (灰度圖的數(shù)據(jù),縮放系數(shù),目標(biāo)大小<人臉最少不能小于5個(gè)像素>)
faces = face_xml.detectMultiScale(gray,1.3,5)
print('face=',len(faces)) #獲取當(dāng)前人臉的個(gè)數(shù)
# draw,框出當(dāng)前的每一個(gè)人臉
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) #畫方框
roi_face = gray[y:y+h,x:x+w] #灰度數(shù)據(jù)
roi_color = img[y:y+h,x:x+w] #彩色數(shù)據(jù)
# 1 gray 獲取眼睛
eyes = eye_xml.detectMultiScale(roi_face)
print('eye=',len(eyes)) #獲取當(dāng)前眼睛的個(gè)數(shù)
#框出所有眼睛
#for (e_x,e_y,e_w,e_h) in eyes:
#cv2.rectangle(roi_color,(e_x,e_y),(e_x+e_w,e_y+e_h),(0,255,0),2)
cv2.imshow('dst',img)
cv2.waitKey(0)

image.png

image.png