天天看点

使用Harr级联分类器检测人脸(包括眼睛)

运行环境 python3.6

opencv-python 3.31+contrib

代码如下:

import cv2

def detect():
    face_cascade = cv2.CascadeClassifier('./cascades/haarcascade_frontalface_default.xml')
    eye_cascade = cv2.CascadeClassifier('./cascades/haarcascade_eye.xml')
    camera = cv2.VideoCapture(0)
    while True:
        ret,frame = camera.read()
        gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
        faces = face_cascade.detectMultiScale(gray,1.3,5) 
        #检测人脸,注意要转换成灰度图  1.3表示压缩率 5表示保留近邻数目的最小值
        for (x,y,w,h) in faces:
            cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
            roi_gray = gray[x:x+w,y:y+h]
            clor = frame[x:x+w,y:y+h]
            eyes = eye_cascade.detectMultiScale(roi_gray,1.03,5,0,(40,40)) 
            #在上检测的人脸中检测眼睛  40*40限制对眼睛搜索的的最小尺寸
            for (ex,ey,ew,eh) in eyes:
                cv2.rectangle(clor,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
                cv2.imshow("camera",frame)
                cv2.waitKey(500)
if  __name__ == '__main__':
   detect()