基于机器视觉技术的人脸在线识别系统设计
本设计研究人脸检测与识别技术,在基于机器视觉技术上,构建了一套人脸在线检测识别系统,系统将由以下几个部分构成:计算机图像预处理、数据收集和预处理、
人脸图像定位检测、人脸识别模型训练、人脸识别。经过实验,确定该系统可对本人的人脸进行快速并准确的检测与识别。
关键词: 机器视觉; 图像处理; 人脸检测;人脸识别;OpenCV;人脸模型训练
一、设计目标
- 掌握人脸识别步骤;
- 熟悉条人脸识别的相关算法;
- 熟悉机器视觉系统设计的一般流程;
- 掌握常用图像处理技术与OpenCV的使用方法;
设计内容与要求
1.完成基于机器视觉技术的人脸在线识别系统算法设计;
2.完成基于机器视觉技术的人脸在线识别系统上位机设计;
3.人脸识别误差率≤2%;
二、图片——人脸检测()
2.1、主要步骤
- 加载 Opencv 自带的人脸检测
haarcascade_frontalface.xml
分类器。 - 图像预处理
cvtColor(灰度化)
。 - 使用
detectMultiScale
函数进行识别。 - 使用
rectangle
函数绘制找到的目标矩形框。 - 在原图像上
ROI
截取彩色的人脸保存。
2.2、detectMultiScale函数介绍
cvHaarDetectObjects是opencv1中的函数,opencv2中人脸检测使用的是 detectMultiScale函数。它可以检测出图片中所有的人脸,
并将人脸用vector保存各个人脸的坐标、大小(用矩形表示),函数由分类器对象调用:
1. void detectMultiScale(
2. const Mat& image,
3. CV_OUT vector<Rect>& objects,
4. double scaleFactor = 1.1,
5. int minNeighbors = 3,
6. int flags = 0,
7. Size minSize = Size(),
8. Size maxSize = Size()
9. );
参数1:image--待检测图片,一般为灰度图像加快检测速度;
参数2:objects--被检测物体的矩形框向量组;
参数3:scaleFactor--表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%;
参数4:minNeighbors--表示构成检测目标的相邻矩形的最小个数(默认为3个)。
如果组成检测目标的小矩形的个数和小于 min_neighbors - 1 都会被排除。
如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,
这种设定值一般用在用户自定义对检测结果的组合程序上;
参数5:flags--要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为
CV_HAAR_DO_CANNY_PRUNING,那么函数将会使用Canny边缘检测来排除边缘过多或过少的区域,
因此这些区域通常不会是人脸所在区域;
参数6、7:minSize和maxSize用来限制得到的目标区域的范围。
2.3、检测结果
三、视频——人脸检测()
3.1、主要步骤
1.加载分类器,将人脸检测分类器和笑脸检测分类器放在项目目录中去
2.调用detecMutiScale()函数检测,对函数中相关的参数进行修改调整,
是检测的结果更加精确
3.打开摄像头或者视频文件,把检测到的人脸用矩形画出来
3.2、’检测结果
四、制作自己的人脸数据集()
4.1、主要步骤
1、加载人脸检测器
2、打开电脑摄像头,载入视频流,抽取帧,进行灰度化处理
3、识别人脸,采集20张保存到文件中
4.2、制作结果
4.3、参考数据集
五、生成csv文件()
利用pyhton脚本生成csv文件,为训练自己的人脸识别模型做数据准备
5.1、主要步骤
1、载入对应路径
2、提取每一张图片对应的位置与同一个人脸对应的标签
3、写入存储文件夹data.txt
5.2、生成结果
六、训练模型()
6.1、主要步骤
1.创建了一个特征脸模型用于人脸识别
2.通过CSV文件face.txt读取的图像和标签训练它
3.创建一个PCA人脸分类器,T这里是一个完整的PCA变换
4.调用其中的成员函数train()来完成分类器的训练
6.2、训练结果
生成了MyFaceModel.xml文件,可以直接使用进行人脸识别
七、人脸识别()
resize
cvtColor
八、代码见个人GitHub
https://github.com/hhhvvvddd/face_recognition