《基于 OpenCV的人脸识别系统》

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

西安电子科技大学

人工智能学院暑期夏令营科研实践《基于OpenCV的人脸识别系统》

实践报告

姓名:XXX

学校:XXXX

院系班级:XXXXXXXXX

联系方式:XXXX

目录

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)

如何创造一个安全的、数字现代化的、智能化的宿舍门禁系统有着十分重要的意义。然而,在日常管理中我们经常会碰到这样的问题:外来人员混入宿舍带来的安全隐患、夏天未带校园卡而在公寓楼前苦等、宿舍出入口必须有人盯守、晚归被困公寓楼外等等。

在当今计算机普及与急剧增长的状况下,应该实施一些高效率的系统,不仅省钱,省事,而且便捷,针对以上情况,十分有必要建立一个全面、高效、人性化、智能的高校宿舍出入管理系统。

因此,做一个人脸识别系统就非常地有必要!

2 项目目标

本项目拟完成人脸采集、人脸训练和人脸检测与识别的功能。

人脸采集程序主要完成以下功能:

1. 建立新的文件夹:用户根据提示输入自己姓名的简称,程序会在工程目录下建立该用户的文件夹,用以存放拍摄的照片;

2. 打开摄像头和写入图像:调用笔记本摄像头,当P键按下时,显示当前帧的图像,经处理后,保存图像;当q键按下时,立即退出采集程序

3. 人脸检测与裁剪:在当前帧识别出人脸后将其裁剪至ORL人脸数据

库大小即92x112。

人脸训练程序主要完成以下功能:

1. CSV文件读取:CSV文件对应的图像数据和对应的标签;

2. 样本训练:包括ORL人脸数据库的样本和自己的样本。

人脸训练样本取自ORL人脸数据库,共40个人,每人10张照片。照片在不同时间、不同表情(睁眼闭眼、笑或者不笑)、不同人脸细节(戴眼镜或者不戴眼镜)下采集,所有的图像都在一个黑暗均匀的背景下采集的,正面竖直人脸(有些有轻微旋转)。此外,增加自己的样本,并以相同尺寸拍摄20张左右图像。

人脸识别与检测程序主要完成以下功能:

1. 人脸检测:识别出当前帧是否有人脸;

2. 人脸预测:根据训练结果判断当前帧中人脸是否属于样本集;

3. 姓名显示:若属于样本集则显示姓名缩写,否则,显示“0”。

本项目一共分为三个步骤,故程序共有三个,分别是:人脸采集程序、人脸训练程序和人脸检测与识别程序。

3.1 人脸采集

人脸采集程序包含三个模块:建立文件夹模块、打开摄像头和写入图像模块、人脸检测与裁剪模块。图1是人脸采集程序的流程图。

图1 人脸采集程序流程图

建立文件夹模块:采用mkdir()函数为每位用户提供单独文件夹保存拍摄的

照片,不允许有重复文件夹,若名字相同,只能删除原文件夹或者更改名字简称。

打开摄像头和写入图像模块:拍摄照片时调用笔记本电脑摄像头,使用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()把从输入流读入的字

相关文档
最新文档