【OpenCV】 在Pycharm + anaconda环境下使用摄像头进行人脸识别检测(训练识别出多个人脸) - 附完整Python代码
Notes
- 步骤:
样本收集 —-> 训练 —-> 摄像头预测检验 - 准备模块:OpenCV , Numpy
1. 准备环境
将 Pycharm 接上 Anaconda 环境的解释器
( 我这里是使用了 Anaconda 环境下 自建的 tensorflow 虚拟环境 )
注:记得在 Anaconda Prompt (Anaconda3) 里 提前安装好 opencv 和 opencv-contrib 模块
2.样本收集
使用电脑摄像头进行样本采集
我这里分别采集2个人的样本 (各1000张)
注:
- 我这里是将样本数据采集到 “. ./03_DataSet/01_Grocery” 目录下,你可以根据需要自行更改路径
- 样本名称我这里统一使用了 image + 序号 .jpg 进行命名,方便后续训练时候进行遍历操作
第一个人:
1 | import cv2 |
第二个人:
1 | import cv2 |
3.训练
简述步骤:
- 载入OpenCV自带的 haarcascade_frontalface_default.xml 分类器方便检测出 人脸区域
- samples_and_labels()函数:用于获取图像的像素数据 以及 给他们分别附上标签 方便后续进行监督学习(这里说明一下:1.path是根据上述的样本所在路径设立的,如果样本在别处,请在这里修改成你自己的路径;)
- 使用opencv相关库中的 face模块的 LBPH算法进行训练
Notes:
- samples_and_labels()函数实现包含了:读取图片 —> 灰度转换 —> 用face_xml分类器框出人脸区域 —> 在之中收集 图片像素数据 并分别附上 人名标签(1是一个人的图片数据,2是另一个人的图片数据。。。如此类推)—> 返回人脸数据
- 我在1
1000 附上了 标签1 10012000 附上标签2 ( 2个人 ) - train函数: 参数1 为人脸像素数据 参数2 为对应人脸标签
- 将数据保存到本目录下的 jackData_trainner.yml 文件内
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33import cv2
import numpy as np
face_xml = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
def samples_and_labels():
faceData = []
ids = []
for i in range(1, 2000):
path = "../03_DataSet/01_Grocery/image" + str(i) + ".jpg"
img = cv2.imread(path)
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_xml.detectMultiScale(imgGray)
for (x, y, w, h) in faces:
if i <= 1000:
ids.append(1)
else:
ids.append(2)
faceData.append(imgGray[y:y+h, x:x+w])
return faceData, ids
(faces, ids) = samples_and_labels()
print(faces, ids)
print("Training...")
jackData = cv2.face.LBPHFaceRecognizer_create() # 创建LBPH
jackData.train(faces, np.array(ids)) # 参数1 为人脸像素数据 参数2 为对应人脸标签
jackData.save("jackData_trainner.yml")
print("Finish")
4.摄像头人脸检测
说明一下:
- names收集的人名 对应着 训练模型中 ids-1
- confidence变量的 数值越大 则置信度越低(就是越不像)
- if ord(“q”) == cv2.waitKey(1):
这个代码 功能为 按下q 键 退出摄像头检测break
1 | import cv2 |
最后附上效果图片:
附:完整Python代码下载 https://download.csdn.net/download/Panzer_Jack/85609567
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Panzer_Jack の 博客!
评论