1、环境
Vs2013+opencv3.0+win10
- 步骤
- 收集数据、预处理
- 训练模型
- 人脸识别
- 收据收集
参考https://blog.csdn.net/xingchenbingbuyu/article/details/51386949
-
- 使用opencv中的数据集测试
-
- 做自己的数据集(每个同学做30-100张照片)
- 拍照程序,打开电脑摄像头,按键保存当前帧图像在文件夹
- 代码
- 做自己的数据集(每个同学做30-100张照片)
while (1)
{
char key = waitKey(100);
cap >> frame;
imshow("frame", frame);
string filename = format("D:\\pic\\pic%d.jpg", i);
switch (key)
{
case'space':
i++;
imwrite(filename, frame);
imshow("photo", frame);
waitKey(500);
destroyWindow("photo");
break;
default:
break;
}
}
-
- 预处理
- 人脸检测(调用opencv自带的检测函数检测人脸人眼)
- 加载分类器
- 调用检测函数
- 把检测到的人脸用矩形标记
- 人脸检测(调用opencv自带的检测函数检测人脸人眼)
- 预处理
参考https://blog.csdn.net/xingchenbingbuyu/article/details/51105159
- 模型训练
参考https://blog.csdn.net/xingchenbingbuyu/article/details/51407336
-
- Csv文件(带标记文本文件)生成
方便找到文件位置
用.py脚本进行批处理生成
import sys
import os.path
# This is a tiny script to help you creating a CSV file from a face
if __name__ == "__main__":
#if len(sys.argv) != 2:
# print "usage: create_csv <base_path>"
# sys.exit(1)
#BASE_PATH=sys.argv[1]
BASE_PATH="C:/Users/bingbuyu/Downloads/att_faces"
SEPARATOR=";"
fh = open("../etc/at.txt",'w')
label = 0
for dirname, dirnames, filenames in os.walk(BASE_PATH):
for subdirname in dirnames:
subject_path = os.path.join(dirname, subdirname)
for filename in os.listdir(subject_path):
abs_path = "%s/%s" % (subject_path, filename)
print "%s%s%d" % (abs_path, SEPARATOR, label)
fh.write(abs_path)
fh.write(SEPARATOR)
fh.write(str(label))
fh.write("\n")
label = label + 1
fh.close()
-
- 训练模型
- 使用Opencv中的Facerecognizer类
- 提取图片标签,csv文件中
- 将每组图片用该函数进行训练,得到人脸特征数值。这里可以考虑使用深度学习神经网络来进行处理。
- 训练模型
- 人脸识别
参考https://blog.csdn.net/xingchenbingbuyu/article/details/51472330
-
- 打开摄像头
- 加载人脸检测器、加载人脸模型
- 人脸检测
- 对比检测到的人脸、从模型中找到相似度最高的
- 显示名字
- Opencv中人脸识别算法原理https://blog.csdn.net/wanghz999/article/details/78817265
- 改进
- 训练模型过程中可以使用cnn、dnn等深度学习来进行建模
- 将该程序集成为.exe可执行文件