Tip:先确定脸部的位置,然后再确定眼睛的位置。
# -*- coding: utf-8 -*-
"""
Created on Wed Aug 29 21:48:21 2018
@author: Miracle
"""
import cv2
def detectFace():
#加载人脸检测的配置文件
face_cascade = cv2.CascadeClassifier('../data/haarcascades/haarcascade_frontalface_alt.xml')
eye_cascade = cv2.CascadeClassifier('../data/haarcascades/haarcascade_eye.xml')
#判断是否可行
if eye_cascade.empty() and face_cascade.empty():
raise IOError('Cannot load cascade classifier xml files!')
#打开摄像头
cap = cv2.VideoCapture(0)
scaling_factor = 1.15
if not cap.isOpened:
raise IOError('Cannot open webcam!')
while True:
ret,frame = cap.read()
if not ret:
break
frame = cv2.resize(frame,None,
fx = scaling_factor,
fy = scaling_factor,
interpolation = cv2.INTER_LINEAR)
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
#获取脸部位置
face_rects = face_cascade.detectMultiScale(gray)
#获取脸部地址
for (x,y,w,h) in face_rects:
roi_gray = gray[y:y+h,x:x+h]
roi_color = frame[y:y+h,x:x+h]
eyes = eye_cascade.detectMultiScale(roi_gray)
for (x_eye,y_eye,w_eye,h_eye) in eyes:
center = (int(x_eye+0.5*w_eye),int(y_eye+0.5*h_eye))
radius = int(0.3*(w_eye+h_eye))
color = (0,255,0)
thickness = 3
cv2.circle(roi_color,center,radius,color,thickness)
cv2.imshow('detecting eye',frame)
if cv2.waitKey(1) == 27:
break
cap.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
detectFace()