西安电子科技大学 人工智能学院暑期夏令营科研实践
《基于OpenCV的人脸识别系统》 实践报告
姓 名: XXX 学 校: XXXX 院系班级: XXXXXXXXX 联系方式: XXXX
需要完整工程的程序请联系本人!百度ID:雄风静谧。目录 1 项目背景 ................................................................................................. 1 2 项目目标 ................................................................................................. 1 3 项目方案 ................................................................................................. 2 3.1 人脸采集 ....................................................................................... 2 3.2 人脸训练 ....................................................................................... 3 3.3 人脸识别 ....................................................................................... 4 4 项目调试 ................................................................................................. 6 4.1 采集调试 ....................................................................................... 6 4.2 训练调试 ....................................................................................... 6 4.3 识别调试 ....................................................................................... 7 5 实践总结 ............................................................................................... 8
需要完整工程的程序请联系本人!百度ID:雄风静谧。1
1 项目背景 如何创造一个安全的、数字现代化的、智能化的宿舍门禁系统有着十分重要的意义。然而,在日常管理中我们经常会碰到这样的问题:外来人员混入宿舍带来的安全隐患、夏天未带校园卡而在公寓楼前苦等、宿舍出入口必须有人盯守、晚归被困公寓楼外等等。 在当今计算机普及与急剧增长的状况下,应该实施一些高效率的系统,不仅省钱,省事,而且便捷,针对以上情况,十分有必要建立一个全面、高效、人性化、智能的高校宿舍出入管理系统。 因此,做一个人脸识别系统就非常地有必要! 2 项目目标 本项目拟完成人脸采集、人脸训练和人脸检测与识别的功能。 人脸采集程序主要完成以下功能: 1. 建立新的文件夹:用户根据提示输入自己姓名的简称,程序会在工程目录下建立该用户的文件夹,用以存放拍摄的照片; 2. 打开摄像头和写入图像:调用笔记本摄像头,当P键按下时,显示当前帧的图像,经处理后,保存图像;当q键按下时,立即退出采集程序 3. 人脸检测与裁剪:在当前帧识别出人脸后将其裁剪至ORL人脸数据库大小即92x112。 人脸训练程序主要完成以下功能: 1. CSV文件读取:CSV文件对应的图像数据和对应的标签; 2. 样本训练:包括ORL人脸数据库的样本和自己的样本。 人脸训练样本取自ORL人脸数据库,共40个人,每人10张照片。照片在不同时间、不同表情(睁眼闭眼、笑或者不笑)、不同人脸细节(戴眼镜或者不戴眼镜)下采集,所有的图像都在一个黑暗均匀的背景下采集的,正面竖直人脸(有些有轻微旋转)。此外,增加自己的样本,并以相同尺寸拍摄20张左右图像。 人脸识别与检测程序主要完成以下功能: 1. 人脸检测:识别出当前帧是否有人脸; 2. 人脸预测:根据训练结果判断当前帧中人脸是否属于样本集; 3. 姓名显示:若属于样本集则显示姓名缩写,否则,显示“0”。
需要完整工程的程序请联系本人!百度ID:雄风静谧。2
3 项目方案 本项目一共分为三个步骤,故程序共有三个,分别是:人脸采集程序、人脸训练程序和人脸检测与识别程序。 3.1 人脸采集 人脸采集程序包含三个模块:建立文件夹模块、打开摄像头和写入图像模块、人脸检测与裁剪模块。图1是人脸采集程序的流程图。
开始
成功载入分类器
输入名字简称用户是否存在
截取摄像头当前帧检测人脸尺寸修改
检测按键
YNYN
退出 p q 其他
图1 人脸采集程序流程图 建立文件夹模块:采用mkdir()函数为每位用户提供单独文件夹保存拍摄的
需要完整工程的程序请联系本人!百度ID:雄风静谧。3
照片,不允许有重复文件夹,若名字相同,只能删除原文件夹或者更改名字简称。 打开摄像头和写入图像模块:拍摄照片时调用笔记本电脑摄像头,使用OpenCV的VideoCapture类,即可打开摄像头,使用imwrite()函数即可写图像。 人脸检测与裁剪模块:检测并分割出人脸,并改变图像法的大小与下载的数据图片大小一致。人脸采集使用OpenCV内部描述脸部Haar特征的分类器:haarcascade_frontalface_default。而人脸检测使用detectMultiScale函数,该函数原型为: void detectMultiScale ( const Mat& image, CV_OUT vector& objects, double scaleFactor = 1.1, int minNeighbors = 3, int flags = 0, Size minSize = Size(), Size maxSize = Size() ); 参数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用来限制得到的目标区域的范围。
3.2 人脸训练
人脸训练程序包含三个模块:创建CSV文件模块、读取CSV文件和人脸训练模块。 创建CSV文件模块:CSV文件采用Python3 编写,使用opencv教程里提供的自动生成csv文件的脚本。包含图片的路径和标签。 读取CSV文件模块:stringstream最大的特点就是可以实现各种数据类型的转换,不需要像C语言那样麻烦,而且非常安全;getline()把从输入流读入的字
需要完整工程的程序请联系本人!百度ID:雄风静谧。4
符串存放入新字符串中。其函数原型是: istream& getline ( istream &is , string &str , char delim ); 其中:istream &is表示一个输入流,譬如cin; string&str表示把从输入流读入的字符串存放在这个字符串中; char delim表示遇到这个字符停止读入,在不设置的情况下系统默认该字符为'\n',(遇到回车停止读入)。 脸训练模块:采用face.hpp头文件里的LBPHFaceRecognizer类,继承自FaceRecognizer。创建分类器、样本训练和保存训练结果的程序如下: Ptr model = createLBPHFaceRecognizer(); model->train(images, labels); model->save("MyFaceLBPHModel.xml"); 图2是人脸训练程序流程图。此外,程序会对样本数量过少和样本尺寸不一致报错。
开始
读取CSV文件载入分分类器
载入样本和标签样本训练结束 图2 人脸训练程序流程图 3.3 人脸识别
人脸识别程序包含两个模块:人脸检测模块和人脸预测模块,其中人脸检测
需要完整工程的程序请联系本人!百度ID:雄风静谧。