人脸识别 毕业论文.doc_第1页
人脸识别 毕业论文.doc_第2页
人脸识别 毕业论文.doc_第3页
人脸识别 毕业论文.doc_第4页
人脸识别 毕业论文.doc_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 姓名:陈冠君 毕业设计(论文)题目:基于逐成分分析(PCA)的人脸识别门进软件开发 毕业设计(论文) 题目名称:基于主成分分析(PCA)的人脸识别门禁软件开发 -人脸识别 院系名称:计算机学院 班 级:计科092班 学 号:200900814214 学生姓名:陈冠君 指导教师:陆筱霞 2013 年 6 月II论文编号:200900814214基于主成分分析(PCA)的人脸识别门禁软件开发 -人脸识别Face recognition access control software development based on principal component analysis(PCA) -

2、Face Recognition院系名称:计算机学院班 级:计科092班学 号:200900814214学生姓名:陈冠君指导教师:陆筱霞 2013 年 6 月中文摘要 随着安全入口控制需求的快速增长,生物统计识别技术得到了新的重视。由于人脸的易采集、非接触等优点使得人脸特征作为人生物特征应用受到越来越多的关注,其中最主要就是人脸识别。本文主要介绍一个人脸识别门禁系统的核心功能模块。本文的设计是基于OpenCV库的,以VS2012软件作为开发工具,主要从需求分析,系统概要设计,关键技术、详细设计和实现几方面来介绍开发过程,最后进行运行测试。在人脸检测基础上,提取人脸进行识别。在人脸识别方法上,本

3、软件主要采用主成分分析法(PCA)。将大数据维度进行降维,投影到低维空间,利用欧氏距离计算置信度,达到阀值的训练数据作为判定识别标准。关键词:人脸检测;人脸识别;主成分分析法(PCA);Abstract With the rapid growth of security access control, biometric identification technology has been a new emphasis. Easy acquisition of the face, the non-contact, etc. makes facial feature as biometric a

4、pplications are more and more attention, of which the most important is face recognition. This paper describes a face recognition access control system is the core functional modules. This design is based on the OpenCV library to VS2012 software as a development tool, mainly from the needs analysis,

5、 outline design, key technologies, detailed design and implementation aspects to introduce the development process, and finally run the test. On the basis of face detection, the extraction of face identification. Face recognition methods, the software using principal component analysis (PCA). The di

6、mensions of the big data dimensionality reduction, projected to low-dimensional space using the Euclidean distance to calculate the confidence to reach the threshold of training data as the decision to identify standards.Key words: Face Detection;Face recognition; principal component analysis(PCA);目

7、录中文摘要3Abstract4目录I第一章 绪论11.1 前言11.2课题应用背景与研究意义11.3 人脸识别类软件的发展现状21.4 系统可行性研究21.4.1 为什么选用OpenCV21.4.2 开发环境的配置21.5 本毕业设计工作和论文结构安排31.5.1 本毕业设计工作31.5.2 论文结构安排4第二章 系统需求分析42.1 功能需求42.2非功能需求52.2.1系统的易用性52.2.2系统可靠性52.2.3 系统可扩展性5第三章 系统概要设计53.1 设计思想53.1.1 人脸数据获取方式53.1.2 人脸训练识别方式63.1.3 添加功能提示63.2 系统功能结构设计6第四章 系

8、统详细设计64.1 OpenCV主要函数介绍64.2 关键功能部分函数设计实现94.2.1摄像头操作:94.1.2人脸检测功能:94.1.3图像特征训练提取:104.1.4训练图像保存:104.1.5身份识别验证功能:10第五章 系统运行测试115.1 人脸识别系统模块测试115.2 运行效果图125.3 测试效率测评16第六章 小结18附 录19附录A:主要源程序19附录B: 软件使用说明书30附录C: 光盘31第一章 绪论1.1 前言 人类进入世纪,随着计算机和网络技术的日渐发达,信息安全的隐患日益突出,自之后,各国越来越重视社会公共安全,信息识别和检测显得前所未有的重要。现今社会中主要采

9、用号码、磁卡和口令等识别方法,随着技术的发展,这些传统的身份识别方法已受到越来越多的挑战,存在的易丢失、易伪造、易遗忘等诸多问题,可靠性也大为降低,生物体征作为每个人独一无二的特征,进入人们眼界,成为新的信息识别和检测技术的载体,从而指纹、虹膜以及人脸等作为主要依据,得以发展。相对于其它的人体生物特征,人脸存在易采集、非接触、静态等优点,比较容易被接受。在科技发展的时代,得到很大程度的发展,应用也越来越广泛。尤其在国家安全、军事安全和公共安全领域发挥重要作用,典型代表就是智能门禁、海关身份验证、智能视频监控等应用。 近年来,随着计算机性能提高和算法的不断成熟,人脸识别技术得到很大发展,在证件验

10、证、出入口安全监控、信息安全、视频监控等许多应用都和人脸识别技术密切相关。1.2课题应用背景与研究意义 本课题根据学校要求,选用实际公司项目研究,在对人脸识别技术研究分析的基础上,选定该题目。人类进入21世纪,随着计算机和网络技术的日渐发达,信息安全的隐患日益突出,自911之后,各国越来越重视社会公共安全,信息识别和检测显得前所未有的重要。现今社会中主要采用号码、磁卡和口令等识别方法,随着技术的发展,这些传统的身份识别方法已受到越来越多的挑战,存在的易丢失、易伪造、易遗忘等诸多问题,可靠性也大为降低,生物体征作为每个人独一无二的特征,进入人们眼界,成为新的信息识别和检测技术的载体,从而指纹、虹

11、膜以及人脸等作为主要依据,得以发展。相对于其它的人体生物特征,人脸存在易采集、非接触、静态等优点,比较容易被接受。在科技发展的时代,得到很大程度的发展,应用也越来越广泛。本课题主要关注就是人脸识别,主要内容包括:图像获取及人脸检测提取,人脸特征提取,人脸识别。实现方面,可以使用C+实现相关算法,也可以利用现有的函数库。本课题主要是基于OpenCV开发的人脸识别门禁软件。1.3 人脸识别类软件的发展现状 人脸识别系统的研究开始于20世纪60年代。其优势在于其自然性和不被被测试个体察觉的特点。人脸识别就是通过观察比较人脸来区分和确定人的身份的。不被察觉的特点会使识别方法不令人反感,而且不容易引起人

12、注意故而不易被欺骗。相对指纹识别而言,人脸识别的非接触特点,使得其更加友好,自然,被人们接受。随着科技的发展和安全需求的增加,人脸识别技术应用已经受到重视。 在公安刑侦领域,人脸识别技术应用十分广泛,目前还逐渐向民用市场推广,离人们的生活越来越近。发展前景不可限量,随着数字化、信息化社会的到来,人们对人脸识别技术的了解和认识越来越多,人脸识别技术也越将越来越来成熟和完善。1.4 系统可行性研究 可行性研究是为了对问题进行研究,以最小代价在最短时间确定问题是否可解。经过对项目详细研究,初拟系统实现报告,对可能将要遇到的问题及解决方案进行设计和安排,明确开发风险和效益。1.4.1 为什么选用Ope

13、nCV近年来,大数据量,时势性图像处理广泛应用于各个领域。各种各样的图像处理软件包围图像分析和处理提供便利的同时也存在许多问题。英特尔公司提供的OpenCV类库在VC+环境下进行图像处理和计算机视觉编程的方法、和免费试用的优势,缩短相关程序开发周期,具有强大的实用价值,是指在相关软件包中占据领先,成为一种流行的图像处理软件。选用OpenCV主要因为里面封装的类库可以直接使用,非常方便。它不依赖与其它的外部库,拥有400多个免费的图像处理函数,涉及领域涵盖了机器视觉的大多应用。1.4.2 开发环境的配置 对于OpenCV的配置,可以使用CMake编译生成针对编辑器的工程,产生符合编译器的库。也可

14、以直接使用源码中本身带有的编译好的库。在这里我们使用自带的库文件 。1) 安装OpenCV :将获取的安装文件安装到D:opencv2.4.4opencv,并将对应使用的bin目录D:opencv2.4.4opencvbuildx86vc11bin添加到环境变量PATH中;2) 配置VS2012 “项目”-“属性”-“VC+目录”中配置 包含目录:添加D:opencv2.4.4opencvbuildinclude 库目录:添加D:opencv2.4.4opencvbuildx86vc11lib 对于依赖项配置有两种方法,一种在项目属性页中“链接器”-“输入” 中附加依赖项中添加需要用到的.li

15、b文件。第二种方法是在程序中加载,也就是本系统中使用的方法。#ifdef WIN32#ifdef _DEBUG#pragma comment(lib,opencv_highgui244d.lib)#pragma comment(lib,opencv_core244d.lib)#pragma comment(lib,opencv_imgproc244d.lib)#pragma comment(lib,opencv_video244d.lib)#pragma comment(lib,opencv_calib3d244d.lib)#pragma comment(lib,opencv_objdetec

16、t244d.lib)#pragma comment(lib,opencv_legacy244d.lib)#else#pragma comment(lib,opencv_highgui244.lib)#pragma comment(lib,opencv_core244.lib)#pragma comment(lib,opencv_imgproc244.lib)#pragma comment(lib,opencv_video244.lib)#pragma comment(lib,opencv_calib3d244.lib)#pragma comment(lib,opencv_objdetect24

17、4.lib)#pragma comment(lib,opencv_legacy244.lib)#endif#endif系统主要实现三大功能,人脸检测,特征提取和人脸识别,辅助一些功能。具有开发可行性,因此可以开发该系统。1.5 本毕业设计工作和论文结构安排1.5.1 本毕业设计工作 本次毕业设计课题主要工作是在VS2012环境下通过OpenCV库完成人脸检测和人脸识别功能设计。 第一阶段,搜索需求技术知识,配置系统开发环及功能这一阶段主要是准备工作。主要是搜集图像处理人脸识别的相关资料,了解OpenCV库的相关知识,详细了解了相关函数,制定开发框架。系统在PC上搭建开发平台。这里我们开发平台选

18、择Win7操作系统平台,在VS2012环境下配置使用OpenCV库。第二阶段,实现各个功能在开发期间,主要实现一下功能:1) 从摄像头获取图像并对图像进行一定预处理;2) 从获取图像中检测提取人脸区域;3) 提取人脸图像并保存,同时写入文件;4) 读取文件,读取图像进行训练得到特征信息;5) 保存的得到的特征信息至xml文件;6) 读取xml文件,得到特征信息;7) 识别人脸,并计算置信度。8) 辅助功能实现,包扩添加用户,重置数据,输出特征图像、平均图像等。9) 从人脸数据库中子集读取人脸数据进行训练,提取特征,并选取另一子 集人脸图像进行识别测试。10) 查看生成的平均人脸图像和特征人脸。

19、 最后完成开发测试,测试运行良好。1.5.2 论文结构安排 第一章:绪论:包括前言、应用背景与研究意义、人脸检测定位及跟踪发展现状、系统可行性研究以及本文主要内容; 第二章:系统需求分析:包括功能需求、性能需求、运行需求; 第三章:系统概要设计:包括设计思想、系统功能结构图; 第四章:系统详细设计:功能模块设计、各模块的主要函数功能; 第二章 系统需求分析 随着安全要求的不断提高,人脸识别技术逐渐应用于各种场合,如门禁系统,人脸签到,人脸密码等等,因此设计一个人脸识别软件对于门禁系统可以扩展人脸识别技术的应用。对于人脸识别门禁系统,有如下目标:1、操作简单;2、识别精确度。 考虑到软件应用场合

20、及主要功能,设计出操作简单快捷的软件,使得软件简单实用,符合大众需求。2.1 功能需求 系统主要实现人身份识别,功能包括以下几个方面:摄像头操作:包括摄像头打开与关闭,从摄像头读取图像并显示到界面上。检测操作:从摄像头画面中检测提取人脸。图像保存功能:提取的人脸图像保存为pgm图片。文件读写功能:读写txt文件,保存提取人脸图像信息;读写xml文件,保存读取人脸特征等信息。添加用户重训练功能:添加用户,重新训练得到特征脸和人脸特征,并保存。人脸识别功能:识别显示当前人脸身份。重置数据功能:清除原有训练数据,便于重新训练。2.2非功能需求2.2.1系统的易用性由于此系统是面向非专业操作人员的实用

21、性程序,因此要求此系统具有易用性。2.2.2系统可靠性要求系统发生错误时,通知用户错误信息,以保证系统可靠性。2.2.3 系统可扩展性软件可扩展性是评价软件性能一个重要指标。为了是系统具有一定可扩展性,设计过程中尽量使各个模块相对独立,为扩展留余地。第三章 系统概要设计 在人脸识别门禁软件需求分析阶段中,已经将系统需求做了详细阐述,本阶段在此需求分析基础上,对其做概要设计,意在解决实现该系统需求的模块设计问题。3.1 设计思想3.1.1 人脸数据获取方式 考虑到要进行人脸识别,首先要获取人脸图像数据,要测试识别算法,需要大量数据,因此我们采用公开的人脸图像库进行静态图像测试,再进而使用摄像头获

22、取人脸实现系统功能,故人脸数据获取方式有两种,一种是直接从人脸数据库中获取,另一种从摄像头数据中检测提取得到。3.1.2 人脸训练识别方式 为保障可以添加用户,实现多用户使用识别,需要添加用户功能,这样就需要动态训练人脸数据,识别确认。训练识别方法采用PCA算法处理,添加新用户时重新对新的建立的数据库进行训练得到训练数据。3.1.3 添加功能提示 为了使模块功能清晰表现,便于用户操作,添加功能提示信息引导。3.2 系统功能结构设计本软件设计实现主要两部分:静态人脸数据库测试验证部分和实时摄像头中提取数据实际功能实现部分。第四章 系统详细设计 此章节对人脸识别门禁系统实现功能实现进行详细分析和设

23、计。4.1 OpenCV主要函数介绍 1) cvLoadImage 从文件中读取图像 IplImage* cvLoadImage(const char* filename,int flags=CV_LOAD_IMAGE_COLOR ); 函数cvLoadImage从指定文件读入图像,返回读入图像的指针。 其中filename是要被读入的文件的文件名;flags指定读入图像的颜色和深度。 2)cvSaveImage 保存图像到文件 int cvSaveImage( const char* filename, const CvArr* image ); 函数cvSaveImage保存图像到指定文件

24、。其中filename保存文件名。image要保存的图像。 图像格式的的选择依赖于filename的扩展名,只有8位单通道或者3通道(通道顺序为BGR )可以使用这个函数保存。3)cvQueryFrame从摄像头或者文件中抓取并返回一帧 IplImage* cvQueryFrame( CvCapture* capture );函数cvQueryFrame从摄像头或者文件中抓取一帧,然后解压并返回这一帧。这个函数仅仅是函数cvGrabFrame和函数cvRetrieveFrame在一起调用的组合。返回的图像不可以被用户释放或者修改。其中capture视频获取结构。4)cvCaptureFromC

25、AM 初始化摄像头CvCapture* cvCaptureFromCAM( int index );函数cvCaptureFromCAM给从摄像头的视频流分配和初始化CvCapture结构。其中index要使用的摄像头索引。如果只有一个摄像头或者用哪个摄像头也无所谓,那使用参数-1应该便可以。5)cvHaarDetectObjects 用来检测图像中的人脸区域CVAPI(CvSeq*) cvHaarDetectObjects( const CvArr* image, CvHaarClassifierCascade* cascade, CvMemStorage* storage, double

26、scale_factor CV_DEFAULT(1.1), int min_neighbors CV_DEFAULT(3), int flags CV_DEFAULT(0), CvSize min_size CV_DEFAULT(cvSize(0,0), CvSize max_size CV_DEFAULT(cvSize(0,0);用于快速检测人脸区域 ,便于提取得到人脸数据。其中image 为被检图像,cascade为 haar分类器级联的内部标识形式,storage 为用来存储检测到的一序列候选目标矩形框的内存区域,scale_factor 在前后两次相继的扫描中,搜索窗口的比例系数,例如

27、1.1指将搜索窗口依次扩大10%,min_neighbors 为构成检测目标的相邻矩形的最小个数(缺省1),flags 为操作方式,min_size 为检测窗口的最小尺寸。缺省的情况下被设为分类器训练时采用的样本尺寸(人脸检测中缺省大小是2020)。6)cvRectangle 绘制矩形 CVAPI(void) cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color, int thickness CV_DEFAULT(1), int line_type CV_DEFAULT(8), int shift CV_DEFAUL

28、T(0);绘制出检测到人脸区域并显示,便于使用者观看是否检测出人脸,。其中img 为图像,pt1 - 矩形的一个顶点,pt2 - 矩形对角线上的另一个顶点,color - 线条颜色 (RGB) 或亮度(灰度图像 )(grayscale image),thickness - 组成矩形的线条的粗细程度,取负值时(如 CV_FILLED)函数绘制填充了色彩的矩形,line_type - 线条的类型。见cvLine的描述,shift - 坐标点的小数点位数。7)cvResize 重置图像大小CVAPI(void) cvResize( const CvArr* src, CvArr* dst, int

29、interpolation CV_DEFAULT( CV_INTER_LINEAR );重置图像大小,使图像归一到同样大小。interpolation 插值方式:选择用线性插值(CV_INTER_LINEAR)和区域插值(CV_INTER_AREA)。8)cvOpenFileStorage 打开存在或创建新的文件CVAPI(CvFileStorage*) cvOpenFileStorage( const char* filename, CvMemStorage* memstorage, int flags, const char* encoding CV_DEFAULT(NULL) );把训练

30、数据保存至xml文件,通过此函数打开文件便于进行读写。flag有10种,这里用到其中读和写二种:CV_STORAGE_READ (打开文件读数据)和 CV_STORAGE_WRITE(打开文件写数据)。文件打开后 有写操作和读操作函数:cvWrite();cvWriteInt();cvReadByName();cvReadIntByName()。9)cvCalcEigenObjects 计算引入矩阵的eigen vector(特征向量)、eigen value(特征根)、image average(影像平均值) 。 CVAPI(void) cvCalcEigenObjects( int nOb

31、jects, void* input, void* output,int ioFlags, int ioBufSize, void* userData, CvTermCriteria* calcLimit, IplImage* avg,float* eigVals );OpenCV 已经实现PCA关键算法之一,计算出传入图像阵列的特征值、特征向量和平均值。其中nObjects为样本个数,input 为输入的影响矩阵,output 为特征矩阵,calcLimit为回调结束条件,avg 为平均值,eigVals 特征根。10)cvEigenDecomposite 透过eigen vector和原始

32、影像集来解析每张图片降维后对应的系数coefficients。CVAPI(void) cvEigenDecomposite( IplImage* obj, int nEigObjs, void* eigInput, int ioFlags, void* userData, IplImage* avg, float* coeffs );OpenCV 已经实现PCA关键算法之一,对输入图像投影到子空间,计算投影各维度系数,以此表示图像。其中obj为输入目标图像,nEigObjs为选取的特征维数,eigInput为向量组成的变换矩阵,数据结构属于IplImage队列,或者根据ioFlag参数值变化的

33、回调函数,avg为平均值,coeffs 为输入图像对应的投影。11)cvConvertScale 使用线性变换转换数组,得到可以保存显示的图像CVAPI(void) cvConvertScale( const CvArr* src,CvArr* dst, double scale CV_DEFAULT(1), double shift CV_DEFAULT(0) );OpenCV要保存显示图像,图像数据必须是uchar格式,因此对于非uchar数据需要转换。其中src 为输入数组,dst 为输出数组 ,scale 为比例因子,shift 为该加数被加到输入数组元素按比例缩放后得到的元素上,采用

34、公式dst(I)=src(I)*scale + (shift,shift,.) 进行转换。4.2 关键功能部分函数设计实现 4.2.1摄像头操作:要实现系统功能,首要先从摄像头中读取数据,为此,需要保证摄像头开启,为保证获取画面统一便于管理,通过cvSetCaptureProperty()函数设置摄像头分辨率为常用值(320*240),读取摄像头数据,返回 IplImage图像数据,该部分需要实现的是打开摄像头、设置摄像头分辨率属性、读取摄像头图像,还有使用完后释放摄像头资源操作。软件启动后若选择不从文件中读取信息,自动启动摄像头获取图片。按“ESC”键退出系统时自动回收资源,关闭摄像头,释放

35、摄像头资源。4.1.2人脸检测功能: 要实现人脸识别,首要先检测出人脸。实现该功能,接收摄像头中获取的图像数据,进行灰度化等操作,利用Haar特征,使用强级联分类器,搜索检测人脸区域,提取出可能的最大脸,为防止误检,进一步在提取出的区域再次对人眼进行检测,过滤掉检测不到人眼的区域,从而有效地降低了人脸区域误检率,获取真正需要的人脸区域。人脸区域获取后,进一步提取出人脸图像,为了训练需要,还须对提取的图像进行大小归一化,使得得到的图像大小统一,为了进一步提高后续识别效率,对图像进行直方图均衡化,最后得到所需图像用于训练和识别。4.1.3图像特征训练提取:利用主成分分析法(PCA)算法对收集到的用

36、户图像进行降维训练,提取人脸特征值。主成分分析法实现主要分为几步完成: 1、去均值 2、计算协方差矩阵及其特征值和特征向量 3、计算协方差矩阵的特征值大于阈值的个数 4、降序排列特征值 5、去掉较小的特征值 6、去掉较大的特征值(可有可无) 7、合并选择的特征值 8、选择相应的特征值和特征向量 9、计算白化矩阵 10、提取主分量。读取人脸训练集,利用PCA算法得到特征人脸和平均人脸,在此基础上把每张训练人脸投影到特征脸空间中得到投影数据作为每幅人脸的特征脸。满足系统要求,可能需要能够识别多人身份,因此需要能够添加用户。系统启动后,识别过程中,设置按下n键,进入添加用户模式,输入用户名开始自动采

37、集用户脸部图像,开始训练提取特征数据。4.1.4训练图像保存: PCA算法过程中会计算出人脸的平均脸信息,和特征脸信息,但得到的这些信息是无法直接显示到屏幕上的,想要看到这些图像,就需要把其加以转换,得到可以直接显示的格式。在这一阶段,计算出其最大值和最小值,对于超出数值范围和非数值的值进行过滤修改,然后利用cvConvertScale函数将float类型的值转化为需要的uchar类型,然后调用cvshowImage进行保存。训练数据保存与加载:对于利用PCA得到的训练数据要在识别时使用,所以首先需要保存起来,在识别时读取并当前数据匹配。这个阶段主要涉及到文件的操作,包括文件的打开、关闭,写数

38、据和读数据。4.1.5身份识别验证功能: 整个系统中最关键重要的就是身份识别功能,之前实现人脸检测提取出当前用户的脸部信息,PCA数据训练得到平均人脸和人脸子空间等数据提供了基础,在此基础上,将当前用户脸部图像投影到人脸子空间中,然后找出与投影脸欧式距离最近的训练人脸,计算距离与可信相似度,并与设置的阀值比较,当大于阀值时可以认为确认身份成功。当阀值设置过大时会使识别很困难,效率降低;而若阀值设置过小,容易把人脸识别错误,使得系统实用性降低,因此,选择一个合适的阀值非常重要,而阀值的选取有没有一个科学的准确依据,因此使得确定合适阀值比较困难。 第五章 系统运行测试 一个软件系统的功能实现,首先

39、要设计好功能流程布局,然后根据软件系统的要求编写代码,然后就是调试程序,最后完善总结。 其中最重要的也最关键的就是中间这两部分。编写代码按部就班,照着流程走,一步步完善,最难的部分其实就是调试了,软件编写过程中, 尤其是比较大的软件系统中,一次性编写无误,不需调试是不可能的。在此次毕业设计中印象最深的就是调试了。在调试过程中曾遇到了不少的问题,不过经过查资料,不断分析可能的情况,一点点找到出问题的地方,进而找到解决方法。整个系统开发调试测试结果如下:5.1 人脸识别系统模块测试 表1: 摄像头操作功能操作步骤操作描述期望结果实际结果测 试状 态1启动,进入视频识别模式摄像头被打开,窗口显示画面

40、摄像头被打开,视频显示到窗口界面中通过2ESC系统退出摄像头被关闭摄像头被关闭通过结论:摄像头操作功能运行正确。 表2: 基于人脸数据库文件识别操作功能操作步骤操作描述期望结果实际结果测 试状 态1输入“train”进入测试训练模式从人脸数据库中读取人脸提取特征,保存平均脸,特征脸,和投影脸等信息根据文件中提供的文件路径读取图像训练,得到并保存了平均脸,特征脸,和投影脸等信息通过2输入“test”进入测试识别模式读取测试人脸图像,进行投影识别,并计算相似置信值,输出结果根据文件中提供的路径读取测试人脸图像,进行投影识别,并计算相似置信值,输出了结果通过结论:基于人脸数据库文件识别操作功能运行正

41、确。 表3: 基于摄像头人脸识别部分操作功能操作步骤操作描述期望结果实际结果测 试状 态1进入视频识别模式检测并标出摄像头捕获画面中的人脸区域,识别用户身份,输出识别出的身份及置信度可以检测并标出摄像头捕获画面中的人脸区域,识别用户身份,输出识别出的身份及置信度通过2按f键,调整修改阀值在线调整修改阀值,控制识别结果阀值得到修改,识别结果同时得到控制通过3ESC系统退出窗口关闭,系统退出窗口关闭,系统退出通过结论:基于摄像头人脸识别部分操作功能运行正确。 表4: 其它操作部分功能操作步骤操作描述期望结果实际结果测 试状 态1保存图像训练过程自动保存平均脸和特征脸图像平均脸和特征脸图像得到保存通

42、过2按n键 ,添加用户输入用户名,采集用户脸部信息,重新在线训练数据并保存输入用户名后,采集了用户脸部信息,并重新在线训练数据和保存所需数据通过4按e键,重置数据清除训练数据,便于重新设置数据清除了以前训练的数据 通过 结论:测试运行正确。5.2 运行效果图 1、基于人脸数据库文件识别操作功能 按y键进入人脸图像库识别模式,在此模式下有train和test两种操作: A):train 操作,读取文件进行训练,得到训练数据,并显示平均脸和特征脸图像。测试通过,结果如下图: 图5-1:读取图片集训练数据 图5-2:显示平均人脸图像图5-3:显示特征脸图像,此为部分截图 B):test操作,读取测试

43、人脸集,识别身份,计算置信度。测试通过。结果如下图5-4。 图5-4 读取测试人脸集,显示识别信息2、 基于人脸数据库文件识别操作功能 按n键进入摄像头识别模式,显示操作功能键介绍,自动打开摄像头,如图5-5图5-5 摄像头识别模式 在此模式下,n键添加用户重新在线训练数据,测试通过,结果如图5-6 图5-6 添加用户重训练 图5-7 人脸身份识别f键,修改调整阀值,输入新的阀值,开始重新识别,测试通过,结果如图5-8和图5-9。 图5-8 重新设置新阀值 图5-9 新阀值下身份识别结果 5.3 测试效率测评 对于系统可靠性测试,测试其算法效率,采用从人脸图像数据库一个子集中读取数据并从另一个

44、子集中身份识别,结果评定可以看出对同样的测试数据,每个人选5张图片进行训练时,虽训练集的扩大,测试结果正确率越高,还可以看出对于已训练的人测试时识别率是比较高的,达70%以上。通过增加每个人的人脸图片数,每人选10张图片时,测试效率进一步提高。为了提高效率,在 摄像头识别过程中,添加用户时,每个人采集20张图片进行训练,并设置阀值,进一步过滤可能识别错误的结果。使得识别准确性得到较大提高,但同时影响识别速度,造成识别速度有所减慢,如果人脸正面至于摄像头前,在1到2秒可以识别,还在可接受范围内。图5-10 4个人的每人5张脸训练,测试结果图5-11 6个人的每人5张脸训练,测试结果图5-12 8

45、个人的每人5张脸训练,测试结果图5-13 10个人的每人5张脸训练,测试结果图5-14 6个人的每人10张脸训练,测试结果第六章 小结在这个学期的毕业设计中,学到了很多。学会了利用网络、书籍询问等各种方法查找获取所需的信息,深刻体会到了课堂所学知识的不足,明白了学习是没有止境的,自己的接触面可得以再次扩宽,学到了很多新知识,并将这些知识应用到实际项目工作中来,理论和实践相结合,学以致用。在整个毕业设计期间也曾遇到不少问题,不过在老师指导下和查找资料还是完成了工作,同时也学到了很多的新知识。在此人脸识别系统设计完成过程中,不仅熟练了学到的知识,而且学到了很多新知识,接触到了opencv计算机视觉

46、这个相对全新的领域,更重要的是学会和强化了解决问题的能力,起初通过查找资料自己思考解决一部分问题,发现一些问题还是解决不了,然后学会了问老师,问同学,然后再思考测试验证,问题一个个解决。通过此,明白了做事不能仅仅靠自己,虽然有时自己一个人单打也可以解决问题,但可能会浪费很多时间,相对效率会低很多,有些时间是完全没有必要浪费的,学会与人合作,提高自己团队意识和团队协作能力,这个社会如今没有团队意识,只知一味单干是没有出路的;当然,也不能完全依赖他人,这样自己是得不到提高,一样会被社会淘汰的。 致谢 在毕业设计这个过程中,遇到了很多困难,最大的困难就是新技术的学习和运用。在学习opencv和PCA

47、算法时候,通过网上查找相关文献资料,论坛中寻找具体解析、去图书馆查阅资料,还有就是向他人求助,最终熟悉了它的使用,顺利地完成了毕设设计的开发。在此,我对帮助过我的同学表示深深的感谢。 我非常感谢我的指导老师陆筱霞,还有另一位对我影响帮助很大的老师王璐,感觉他们对我的教导指导和帮助。王老师带着我接触了程序设计竞赛,学习数据结构和算法设计,并抽时间给我们讲算法,奠定了算法基础。陆老师在毕业设计期间,严格要求我们,及时提出在项目开发中的不足和问题,使我少走了很多弯路,保证项目按时完成。 参考文献:【1】 田印中, 董志学, 黄建伟, 基于PCA 的人脸识别算法研究及实现. 2010.03.【2】李华

48、胜, 杨桦,袁保宗. 人脸识别系统中的特征提取. 2001,06.【3】 张翠平, 苏光大.人脸识别技术综述. 2000, 05.【4】 M.A. Turk and A.P. Pentland, “运用本征脸的人脸识别”, IEEE Conf. on Computer Vision【5】何东风,凌捷人脸识别技术综述J微机发展,2003 【6】谢永林 PCA算法及其在人脸识别中的应用 2009 第6期【7】刘艳丽,赵跃龙人脸识别技术研究进展 J计算机工程,2005【8】何国辉 甘俊英 PCA类内平均脸法在人脸识别中的应用研究 2006 第3期【9】尹飞 冯大政 计算机技术与发展 基于PCA算法的

49、人脸识别 2008 第10期附 录附录A:主要源程序摄像头人脸识别实现void recognizeFromCam(void)int i;CvMat * trainPersonNumMat; / the person numbers during trainingfloat * projectedTestFace;double timeFaceRecognizeStart;double tallyFaceRecognizeTime;CvHaarClassifierCascade* faceCascade;CvHaarClassifierCascade* eyeCascade;char cstr2

50、56;BOOL saveNextFaces = FALSE;char newPersonName256;int newPersonFaces;trainPersonNumMat = 0; / the person numbers during trainingprojectedTestFace = 0;saveNextFaces = FALSE;newPersonFaces = 0;printf(Recognizing person in the camera .n);/ Load the previously saved training dataif( loadTrainingData(

51、&trainPersonNumMat ) ) faceWidth = pAvgTrainImg-width;faceHeight = pAvgTrainImg-height;else printf(Couldnt load the training data,please first hit nto add the person.n);/ Project the test images onto the PCA subspaceprojectedTestFace = (float *)cvAlloc( nEigens*sizeof(float) );/ Create a window for the user to see the camera image./cvNamedWindow(FaceReconize, CV_WINDOW_AUTOSIZE);/ Make sure there is a data folder, for storing the new person.mkdir(data);/ Load the HaarCascade classifier for face detection.faceCascade = (CvHaarClassifierCascade*)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论