目录
1.环境
1.python: 3.6.6 [64bit]
2.python packages:
1). opencv-python==3.4.1.15
2). opencv-contrib-python==4.4.0.42
3.python包下载安装出错,可以尝试一下方式:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn <+python包>
4.探测器 Haar级联文件下载:
https://github.com/opencv/opencv/tree/master/data
2.代码
import cv2
class HaarTesting:
def __init__(self, x_scaling_factor=0.8, y_scaling_factor=0.8):
# 加载脸部,眼睛,鼻子级联文件
self.x_scaling_factor = x_scaling_factor
self.y_scaling_factor = y_scaling_factor
self.face_cascade = cv2.CascadeClassifier('haarcascade\\haarcascade_frontalface_alt.xml')
self.eye_cascade = cv2.CascadeClassifier('haarcascade\\haarcascade_eye.xml')
self.nose_cascade = cv2.CascadeClassifier('haarcascade\\haarcascade_mcs_nose.xml')
def testing(self):
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
frame = cv2.resize(frame, dsize=None, fx=self.x_scaling_factor, fy=self.y_scaling_factor,
interpolation=cv2.INTER_AREA)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = self.face_cascade.detectMultiScale(gray)
for (x, y, w, h) in faces:
roi_gray = gray[y:y + h, x:x + w]
roi_color = frame[y:y + h, x:x + w]
eye_rects = self.eye_cascade.detectMultiScale(roi_gray)
nose_rects = self.nose_cascade.detectMultiScale(roi_gray)
for (x_eye, y_eye, w_eye, h_eye) in eye_rects:
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)
for (x_nose, y_nose, w_nose, h_nose) in nose_rects:
cv2.rectangle(roi_color, (x_nose, y_nose),
(x_nose + w_nose, y_nose + h_nose), (0, 0, 255), 3)
# break
cv2.imshow('Eye and nose detector', frame)
c = cv2.waitKey(1)
if c == 27:
break
cap.release()
cv2.destroyAllWindows()
3.效果图
(测试图为网上下载,若侵权则删)