参考博客:(人脸识别2-2)——利用opencv内置分类器检测人脸
在cv2的源码文件夹下,可看到存放了很多的已经训练好的分类器,我们可进行替换来尝试。
注意代码中的路径为从cv2的路径。
# -*-coding:utf-8 -*-
import cv2
def facedetect(windowname, camera_id):
# 命名和打开摄像头,详情见上一篇
cv2.namedWindow(windowname)
cap = cv2.VideoCapture(camera_id) # 获取摄像头
# cap = cv2.VideoCapture('H:/video.m4s') #通过本地的视频进行测试
classfier = cv2.CascadeClassifier(
'G:/annconda/Lib/site-packages/cv2/data/haarcascade_frontalface_alt2.xml') # 加载分类器,分类器位置可以自行更改
color = (0, 0, 255) # 人脸框的颜色,采用rgb模型,这里表示g取255,为绿色框
while cap.isOpened():
ok, frame = cap.read()
if not ok:
break
grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 图像灰度化
faceRects = classfier.detectMultiScale(grey, scaleFactor=1.15, minNeighbors=5,
minSize=(5, 5)) # 利用分类器检测灰度图像中的人脸矩阵数,1.15和5分别为图片缩放比例和需要检测的有效点数
if len(faceRects) > 0: # 大于0则检测到人脸
for faceRect in faceRects: # 单独框出每一张人脸
x, y, w, h = faceRect # 获取框的左上的坐标,框的长宽
cv2.rectangle(frame, (x, y), (x + w, y + h), color, 3) # 用矩形框框出人脸
cv2.imshow(windowname, frame) # 显示图像
c = cv2.waitKey(1) # 每10ms一帧
if c & 0xFF == ord('q'): # 退出条件
break
cap.release() # 释放摄像头并销毁所有窗口
cv2.destroyAllWindows()
if __name__ == '__main__': # 主程序
print('face detecting... ')
facedetect('facedetect', 0)