调用 opencv 自带的训练集进行识别。
入门级别很简单,没什么好说的,注释齐全可以看懂
直接上代码
import cv2
import numpy as np
face_cascade = cv2.CascadeClassifier(r'C:\python\Lib\site-packages\cv2\data\haarcascade_frontalface_alt.xml')
eye_cascade = cv2.CascadeClassifier(r'C:\python\Lib\site-packages\cv2\data\haarcascade_eye.xml')
smile_cascade = cv2.CascadeClassifier(r'C:\python\Lib\site-packages\cv2\data\haarcascade_smile.xml')
#调用训练集
#注意不要忘了最后加上 xml 文件类型!!!
cap = cv2.VideoCapture(0) #打开摄像头
while True:
ret, frame = cap.read()
img = frame
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #灰度转换
faces = face_cascade.detectMultiScale(gray, 1.3, 2) #识别
for (x, y, w, h) in faces:
cv2.rectangle(img,(x,y), (x+w,y+h), (255,0,0), 3 ) #在人脸画矩形
face_area = gray[x:x+w, y:y+h] # 裁剪人脸区域,提高检索效率。注意是中括号不是小括号
eyes = eye_cascade.detectMultiScale(face_area, 1.3, 1) #人眼检测
for (ex, ey ,ew, eh) in eyes:
cv2.rectangle(face_area, (ex,ey), (ex+ew,ey+eh), (255,0,0), 3)
smile = smile_cascade.detectMultiScale(face_area, scaleFactor=1.16, minNeighbors=65, minSize=(25,25), flags=cv2.CASCADE_SCALE_IMAGE)
for (ex,ey,ew,eh) in smile: #微笑检测
cv2.rectangle(face_area, (ex,ey), (ex+ew,ey+eh), (255,0,0), 3)
cv2.putText(img, 'Smile', (x,y-7), 3, 1.2, (0,0,255), 2, cv2.LINE_AA)
cv2.imshow('frame', img) #输出检测到的每一帧,组成视频
if cv2.waitKey(5) & 0xff==ord('q'): #每5ms读取一帧,按 q 关闭摄像头
break;
cap.release() #释放摄像头
cv2.destroyAllWindows() #摧毁所有窗口