OpenCV-Python系列·检测&跟踪人眼
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()