基于OpenCV的视频人脸识别系统的设计与实现

基于OpenCV的视频人脸识别系统的设计与实现
基于OpenCV的视频人脸识别系统的设计与实现

摘要

基于生物特征识别的身份认证方法和系统研究一直以来都是计算机图形学和模式识别领域研究的热点,其中,由于人脸的稳定性和可见性,针对人脸识别的算法研究和系统应用最为广泛,本文针对校园内实验室和宿舍安全管理需求,设计和实现了一套针对监控视频的基于OpenCV的人脸识别原型系统,开发语言选用C++,全文内容包括:

(1)构建了基于OpenCV的视频人脸识别的技术框架。针对实验室和宿舍安全管理需要,构建了基于OpenCV的视频人脸识别的技术框架,能够完成基于视频的实时人脸识别和身份认定;

(2)设计了基于OpenCV的视频人脸快速检测算法。人脸检测是人脸识别的前提,本文采用基于OpenCV的快速人脸检测算法实现视频图像中人脸的快速定位和提取;

(3)设计了基于AdaBoost算法的视频人脸识别方法。应用AdaBoost算法实现了针对视频流的快速人脸定位和身份识别,能够实现实时身份认定。

系统基于.NET平台设计,使用C++语言进行实现,完成了基于视频的实时人脸身份认定。

关键词:人脸检测; OpenCV;人脸识别; C++;

1

Abstract

Based on the research of identity authentication method and system of biometric recognition has been a hot research field of computer graphics, pattern recognition and the stability and visibility, the face, the algorithm research and system applications of face recognition is the most widely, according to the laboratory and dormitory safety management needs of the campus, designed and implemented. A face recognition system based on OpenCV in surveillance video, development language is C++, the main content of this thesis includes: (1)Constructed the technical framework for video based face recognition based on OpenCV. According to the laboratory and the dormitory safety management needs, establishes a framework for video based face recognition based on OpenCV, which can complete real-time face recognition and identity based on video identification;

(2)Design of a fast face detection algorithm in video based on OpenCV. Face detection is the precondition of face recognition, this paper uses OpenCV fast face detection algorithm to locate face in video image and extraction based on;The design use application of OpenCV to provide strong support, based https://www.360docs.net/doc/6313981374.html, platform design.

(3)Design of video based face recognition method based on AdaBoost algorithm. Application of AdaBoost algorithm for fast face location and recognition of video stream, which can realize real-time identification.

System based https://www.360docs.net/doc/6313981374.html, platform design, implementation is carried out using C++ language, completed the real-time face identity recognition based on video Key word:Face detection;OpenCV;Face recognition;C++;

目录

摘要 (1)

Abstract (2)

目录 (3)

1. 序言 (5)

1.1. 人脸识别的背景介绍 (5)

1.2. 人脸识别国内外发展状况 (5)

1.3. 人脸识别研究的意义 (7)

1.4. 人脸识别的技术应用 (7)

1.5. 主要章节内容和章节结构 (8)

1.6. 本章小结 (8)

2. 人脸识别系统的技术框架和功能模块 (9)

2.1. OpenCV简介 (9)

2.2. 人脸识别的功能模块 (9)

2.3. 人脸识别的技术框架 (10)

2.4. 本章小结 (12)

3. 人脸识别的方法 (13)

3.1. 人脸识别算法原理 (13)

3.2. 常用人脸识别方法 (13)

3.3. 基于神经网络的人脸识别方法 (13)

3.4. 本章小结 (15)

4. 人脸检测核心算法 (15)

4.1. 人脸检测算法在人脸识别中的作用 (15)

4.2. 人脸检测算法 (16)

4.3. AdaBoost算法 (16)

4.4. 本章小结 (19)

5. 原型系统实现 (20)

3

5.1. 系统模块划分 (20)

5.2. 模块实现 (20)

4.2.1.系统运行流程图 (20)

4.2.2.系统的功能界面 (21)

4.2.3实验结果及分析 (22)

5.3. 本章小结 (23)

总结与展望 (24)

参考文献 (25)

1.序言

1.1. 人脸识别的背景介绍

近几年来,已开发应用了声音识别、签字识别、指纹识别、掌形识别、眼虹膜识别等人体生物特征识别技术,与上述识别技术相比较,而最近开发的人脸识别技术则具有简便、准确、经济及可扩展性良好等众多优势,因此可广泛应用于出入口控制、安全验证、安防监控与搜寻罪犯等有关方面。人体生物特征识别技术是依靠人体的生物特征来进行人的身份验证的一种高科技识别技术。而人脸识别技术具有比其他生物特征识别技术更直观、简便、准确、可靠及可扩展性良好等众多优势,因而应用广泛。随着安全入口控制和金融贸易方面应用需要的快速增长,生物统计识别技术得到了新的重视。目前,微电子和视觉系统方面取得的新进展,使该领域中高性能自动识别技术的实现代价降低到了可以接受的程度。而人脸识别是所有的生物识别方法中应用最广泛的技术之一[1],人脸识别技术是一项近年来兴起的,但不大为人所知的新技术。人们更多的是在电影中看到这种技术的神奇应用:警察将偷拍到的嫌疑犯的脸部照片,输入到电脑中,与警方数据库中的资料进行比对,并找出该嫌犯的详细资料和犯罪记录。这并非虚构的情节。在国外,人脸识别技术早已被大量使用在国家重要部门以及军警等安防部门。在国内,对于人脸识别技术的研究始于上世纪90年代,目前主要应用在公安、金融、网络安全、物业管理以及考勤等领域。

1.2. 人脸识别国内外发展状况

人脸识别技术从应用层面上主要可分为:人脸检测、人脸识别查询、人脸识别身份认证,目前,我国从事人脸识别技术研究的单位有很多,使得生物特征识别技术形成缩小了与国外的差距[2]。2008年,以清华大学和中科院自动化研究所为代表的北京奥运会实名制票证系统的实施将生物特征识别技术又推到了一个新的水平,为我国生物识别技术在安防领域的应用打下了坚实的基础。

人脸识别检测研究,主要包括人脸检测技术和人脸识别技术的研究[3]。人

5

脸识别检测是指对于任意一幅给定的图像,采用一定的策略对其进行搜索以确定其中是否含有人脸,如果是,则返回人脸的位置、大小和姿态,接着对人脸进行识别。它是一个复杂的具有挑战性的模式检测问题。同时,人脸检测要走向实际应用,精度和速度是亟需解决的两个关健问题[4],自20世纪90年代以来,人脸检测的精度得到了大幅度的提高,但是速度却一直达不到应用系统用户满意的程度,为此研究者们付出艰辛的努力,直到21世纪Viola基于AdaBoost 算法的人脸检测器的发表[8],人脸检测的速度才得到了实质性的提高,该算法的发表也促进了人脸检测研究的进一步蓬勃发展。按照人脸识别的自动化程度,人脸识别的发展经历了以下三个阶段:

第一阶段是机械式识别阶段:早期的人脸识别,是在已经得到一个正面人脸图像的基础上进行的,以Bertillon、Allen、Parke为代表,主要研究人脸识别所需要的面部特征[10]。在Ber-tillon的系统中,用一个简单的语句与数据库中的某一张脸相联系,同时与指纹分析相结合,提供了一个较强的识别系统。为了提高脸部识别率,Allen为待识别脸设计了一种有效且逼真的摹写。Parke 则用计算机实现了这一想法,并产生了较高质量的人脸灰度图模型。但是,这一阶段的人脸识别过程全部依赖于操作人员,没有实现系统的自动识别功能。

第二阶段是人机交互式识别阶段:这一阶段所采用的主要技术方案是基于人脸几何结构特征(Geometric feature based)的研究方法,此方法的思想是首先检测出眼、鼻、嘴等脸部主要部件的位置和大小,然后利用这些部件的总体几何分布关系以及相互之间的参数比例来识别人脸,忽略了局部细微特征,更适合于粗分类。代表性工作有Goldstion、Harmon和Lesk等人用几何特征参数来表示人脸正面图像。他们采用21维特征矢量表示人脸面部特征,并设计了基于这一特征表示法的识别系统。Kaya和Kobayashi则采用了统计识别的方法[11],用欧氏距离来表示人脸特征如嘴唇与鼻子之间的距离,嘴唇的高度等。更进一步地,T.Kanad设计了一个高速且有一定知识导引的半自动回溯识别系统,创造性地运用积分投影法从单幅图像上计算出一组脸部特征参数,再利用模式分类技术与标准人脸相匹配。Kanad的系统实现了快速、实时的处理,促进了人脸识别系统走向实际应用领域。不足的是,此类方法仍需要利用操作员的某些先验知识,仍然摆脱不了人的干预。

第三阶段是真正的机器自动识别阶段:20世纪90年代以来,人脸识别技术发展非常迅速,所提出的算法在较理想图像采集条件、用户配合、中小规模正面人脸数据库上达到了非常好的性能,也因此出现了若干知名的人脸识别商业公司,人脸识别的商业系统得到了进一步发展。从技术角度上看,2D人脸图像线性子空间判别分析、统计表观模型、统计模式识别方法是这一阶段内的主流技术。但是,主流的人脸识别技术在非约束环境下(多姿态、遮挡等多种变化因素),识别率下降非常快,不能满足实际应用。总体而言,目前建立一个鲁棒的人脸识别系统仍然是一个很困难的问题。非理想成像条件下(尤其是光照和姿态)、用户不配合、大规模人脸数据库上的人脸识别问题逐渐成为研究的热点问题。

1.3. 人脸识别研究的意义

人脸识别是机器视觉和模式识别领域最富有挑战性的课题之一,同时也具有较为广泛的应用意义。人脸识别技术是一个非常活跃的研究领域,它覆盖了数字图像处理、模式识别、计算机视觉、神经网络、心理学、生理学、数学等诸多学科的内容。如今,虽然在这方面的研究已取得了一些可喜的成果,但是FRT 在实际应用中仍面临着很严峻的问题,因为人脸五官的分布是非常相似的,而且人脸本身又是一个柔性物体,表情、姿态或发型、化妆的千变万化都给正确识别带来了相当大的麻烦。如何能正确识别大量的人脸并满足实时性要求是迫切需要解决的问题。

1.4. 人脸识别的技术应用

随着技术的进一步成熟和社会认同度的提高,人脸识别技术将应用在更多的领域。

1.电子护照及身份证。这或许是未来规模最大的应用,国际民航组织(ICAO)已确定,从2010年起,其118个成员国家和地区,必须使用机读护照,人脸识别技术是首推识别模式[6],该规定已经成为国际标准。中国的电子护照计划公安部一所正在加紧规划和实施。

2.公安、司法和刑侦。如利用人脸识别系统和网络,在全国范围内搜捕逃犯。

7

3.自助服务。如银行的自动提款机,如果用户卡片和密码被盗,就会被他人冒取现金。如果同时应用人脸识别就会避免这种情况的发生。

4.信息安全。如计算机登录、电子政务和电子商务。在电子商务中交易全部在网上完成,电子政务中的很多审批流程也都搬到了网上。而当前,交易或者审批的授权都是靠密码来实现,如果密码被盗,就无法保证安全。但是使用生物特征,就可以做到当事人在网上的数字身份和真实身份统一,从而大大增加电子商务和电子政务系统的可靠性[7]。

新增加的技术简而言之,首先是人脸检测并提取出特征表达,随后再据此进行数据库对比,最后按照相似度排序返回结果。其实,人脸检测并不是新技术,相关研究已有三十年历史,然而直到去年底,百度才决定推动这一技术付诸实施。全球60亿人口,人脸相关技术应用前景不可限量!

1.5. 主要章节内容和章节结构

全文共分为五章,其具体内容如下:

第一章:序言。主要介绍人脸识别的背景、国内外发展状况、研究的意义和应用前景。

第二章:概述人脸识别的技术框架和功能模块。

第三章:概述了人脸识别相关算法,介绍了本文基于OpenCV的视频人脸识别算法的设计。

第四章:概述了人脸检测相关算法,介绍了本文基于AdaBoost算法的人脸检测算法。

第五章:人脸识别系统原型的设计实现。介绍了本文设计的基于OpenCV的人脸识别原型系统的实现

1.6. 本章小结

本章概括性的介绍了人脸表情识别的背景、发展现状、应用需求。人脸识别在身份认证、信息安全、媒体娱乐、图像搜索方面的重要应用。人脸检测是人脸信息处理领域中的一个重要课题,具有很高的学术价值和应用潜力;同时人脸检测又是一个极具挑战性的问题。本文研究其中最具普遍性,也是最困难的

复杂背景下静止灰度图像中的人脸检测、以及在得到人脸区域后进行识别的问题。

2.人脸识别系统的技术框架和功能模块

2.1. OpenCV简介

OpenCV的全称是(Open Source Computer Vision Library ),OpenCV于1999年由Intel建立,如今由Willow Garage提供支持。OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法,它不依赖于其它的外部库,但可以使用某些外部库。OpenCV 为Intel? Integrated Performance Primitives (IPP) 提供了透明接口。这意味着如果有为特定处理器优化的的 IPP 库,OpenCV 将在运行时自动加载这些库。OpenCV有几个显著的特点:

1.免费、开源

2.速度快、代码优化

3.方便灵活的用户接口

4.跨平台:windows Linux Mas OS

5.强大的图像和矩阵运算功能

6.统一的结构和功能定义

本次设计所用的开发工具是Microsoft Visual C++ 6.0。Visual C++ 6.0是Microsoft公司推出的一种可视化编程工具。它支持多平台和交叉平台的开发,将各种编程工具如编辑器、连接器、调试器等巧妙的结合在一起,构成一个完美的可视化开发环境。用户无需通过繁杂的编程操作,即可完成Windows 下应用程序的编辑、编译、测试和细化等工作。

2.2. 人脸识别的功能模块

人脸捕获与跟踪功能:

9

人脸捕获是指在一幅图像或视频流的一帧中检测出人像并将人像从背景中分离出来,并自动地将其保存。人像跟踪是指利用人像捕获技术,当指定的人像在摄像头拍摄的范围内移动时自动地对其进行跟踪。

人脸识别比对功能:

人脸识别分核实式和搜索式二种比对模式。核实式是对指将捕获得到的人像或是指定的人像与数据库中已登记的某一对像作比对核实确定其是否为同一人。搜索式的比对是指,从数据库中已登记的所有人像中搜索查找是否有指定的人像存在。

人脸的建模与检索:

可以将登记入库的人像数据进行建模提取人脸的特征,并将其生成人脸模板(人脸特征文件)保存到数据库中[9]。在进行人脸搜索时(搜索式),将指定的人像进行建模,再将其与数据库中的所有人的模板相比对识别,最终将根据所比对的相似值列出最相似的人员列表。

真人鉴别功能:

系统可以识别得出摄像头前的人是一个真正的人还是一幅照片。以此杜绝使用者用照片作假。此项技术需要使用者作脸部表情的配合动作。

图像质量检测:

图像质量的好坏直接影响到识别的效果,图像质量的检测功能能对即将进行比对的照片进行图像质量评估,并给出相应的建议值来辅助识别。

2.3. 人脸识别的技术框架

本文的人脸识别系统的功能有人脸图像采集、人脸图像预处理、人脸图像训练、人脸图像识别、增加人脸图像、删除人脸图像和修改人脸图像信心等。按照人脸识别的功能,本文的人脸识别系统框架可以用图2.1来表示。

11

图2.1 人脸识别系统框架

1.采集人脸图像。使用摄像机对进入重要场所的合法人员进行人脸图像的采集,采集图像时保持拍摄环境的一致性,同时拍摄的图像要保持人脸信息的完成性。

2.预处理人脸图像。对采集到的人脸图像进行统一的处理,将其处理为大小统一,存储格式一致的灰度图像。

3.训练人脸图像。对预处理的人脸图像进行人脸特征的提取,通过多次的人脸特征的选择,最终用选中的人脸特征作为识别时的依据。

4.识别人脸图像。识别阶段的前期处理和训练阶段是一样的,也需要首先采集需要识别的人脸图像,通过相同的预处理和人脸特征选择方法,提取和选择人脸的特征,然后将这些特征和数据库中已经存在的人脸特征进行对比匹配,然后输出确定该人员是否是合法的人员。

5.增加、删除、修改人脸图像。即对数据库中的人脸图像进行增加、删除、和修改等操作。

人脸识别系统训练完成后,对人脸识别时的基本过程如图2.2所示。

图2.2 人脸识别基本过程

人脸识别系统在对人脸图像进行识别之前必须首先对需要进行识别的合法人员的人脸图像进行训练,训练后的系统才可以用来完成识别的功能。其中识

别时训练过的人员的人脸图像是系统默认合法的人员,因此可以以此来限制进入重要场所的人员。在实际的应用过程中,人脸识别系统的应用框架如图 2.3所示。

图2.3 应用技术框架图

人脸识别不管是训练阶段还是识别阶段都首先需要采集人脸图像,然后对人脸图像进行预处理、特征提取、然后再进行训练和识别,最后形成训练结果或识别结果,其中训练阶段和识别阶段使用的数据不同。

2.4. 本章小结

本章介绍了人脸识别系统的技术框架和功能模块,人脸检测具有简单、方便、成本低、识别速度快等优点。人脸识别包括三个方面的内容:人脸检测、人脸对比和人脸跟踪。其识别过程分为三步:首先建立人脸的面像档案,其次获取当前的人体面像,最后用当前的面纹编码与档案库存的比对。

3.人脸识别的方法

3.1. 人脸识别算法原理

人脸识别算法的原理:系统输入一般是一张或者一系列含有未确定身份的人脸图像,以及人脸数据库中的若干已知身份的人脸图象或者相应的编码,而其输出则是一系列相似度得分,表明待识别的人脸的身份。

3.2. 常用人脸识别方法

人脸识别包括两个方面:一是人脸检测和定位,二是人脸识别。人脸识别系统包括图像摄取、人脸定位、图像预处理、以及人脸识别。人脸识别的方法有很多。一是基于特征点的人脸识别方法,该方法是基于K-L变换的人脸识别方法,这种方法需要较多的训练样本,而且完全是基于图像灰度的统计特性。二是弹性图匹配的人脸识别方法,这种方法在二维的空间中定义了一种对于通常的人脸变形具有一定的不变性的距离,并采用属性拓扑图来代表人脸,拓扑图的任意顶点均包含一特征向量,用来记录人脸在顶点位置附近的信息。三是基于神经网络的人脸识别方法,该方法模拟人类大脑神经网络的结构和工作机理,构建一种类似人脑的计算模型。本文主要用基于神经网络的方法进行人脸识别,下一节将详细介绍这一方法。其次还有线段Hausdor距离(LHD)的人脸识别方法和支持向量机的人脸识别方法。

3.3. 基于神经网络的人脸识别方法

人工神经网络是通过模拟人类大脑神经网络的结构和工作机理,构建一种类似人脑的计算模型。人工神经网络的识别方法在人脸识别中的应用有很长的历史,它有其特殊的适合于人脸识别的优势。它不像其他的方法那样要用一套由人来确定的规则,同时也避免了复杂的特征提取工作,他能根据有代表性的样本进行学习。神经网络以并行方式处理信息,如果能用硬件实现,就能显著提高速度。神经网络在人脸识别、性别识别中都有广泛的应用。

人工神经网络进行人脸识别主要有两种结构。第一,为所有已知人脸建立一个神经网络:可对所有已知人脸进行分类和识别。这种结构要求用所有人脸的

13

特征对网络进行训练,训练好的网络连接权值是所有人脸特征的隐含表示,这种形式只需一个神经网络,但网络规模很大,权系数要求较多,存储量要求也较大,训练时间较长。由于系统每增加一个人,都要对网络经行重新训练,因此这种系统性能不佳。第二,对每一个人建立一种神经网络:这种神经网络的目的是区分每一对人,因此只需对着一对人进行训练,网络的权系数隐含区分这一对人脸的个性特征,固网络的规模小,权系数少,存储量和训练时间也少。同时,对每一对人的训练只需这一对人的特征,与其他人无关,固系统具有良好的模块化结构,可扩展性能好。本节介绍基于多层感知器神经网络的人脸识别方法。

多层感知器是一个多层前馈神经网络,由输入层、一个或多个隐层以及一个输出层组成,其学习算法采用BP算法。多层感知器在训练的过程中,第一层权值决定了超平面在空间的取向,网络的不断训练,标志着由超平面所形成的超空间在不断的变化。在隐层数足够多的情况下,由超平面所形成的线性区域将无穷多,其第一隐层可以在模式空间实现各种超平面分割;第二隐层实现第一隐层的逻辑“与”运算,即将其分割的模式超平面空间按类别进行空间划分;而输出层由第二隐层的输出值进行逻辑“或”运算,即将进行逻辑“与”运算的属于同一类的超平面进行归类。

BP神经网络分三层,即输入层、隐层、输出层。记输入层神经元数为I,隐含层神经元数为H,输出层神经元数为J。对于人脸识别数为P的人脸识别问题来说,网络输出层的神经元数J就取为人脸类别数P,对于任意一个人脸测试图像,可根据网络输出层输出矢量的最大分量分类。人脸图像矢量的维数N通常比较大,而训练样本数K通常比较小,所以设计用于人脸识别的BP神经网络分类器比较困难。为了实现具有推广能力强的BP分类器,可以从特征压缩着手,压缩输入矢量的维数,并适当的选择隐层的神经元数。为了加快网络训练的收敛速度,可对输入矢量做标准化处理,并给个连接权适当的赋予初值。

网络的隐层可以认为是输入层和隐层之间的连接权值的“自组织化”对输入模式进行特征抽取,并将抽取出的特征传递给输出层,关于隐层的神经元数H 的选取尚无理论上的指导。一般地,隐层的神经元数H大,网络的冗余性大,增加了网络一次训练的训练时间,尽管使网络收敛的训练次数会减少,但会降

低分类器的推广能力。为了保证分类器的稳定性,显然网络未知连接权值的个数不宜超过训练样本值的个数,所以隐层的神经元数H应该满足一下要求:

(I+1)H+(H+1)

人脸识别网络输出层的神经元数J取为人脸类别数P,而通过特征压缩网络输入层的神经元数I也是取为人脸类别数P,这样可按下式选取隐层的神经元数H。

H≈K/2

即网络隐层的神经元数是取为训练样本数的一半。由于BP常采用的Sigmoid激励函数的曲线两端平坦,中间部分变化剧烈,为了提高网络的收敛速度对网络输入矢量的每个分量化为均值为0,方差为1的标准形式。一般认为连接权值初值可在区间[-0.5,0.5]内随机选取。对人脸校准图像用类间相关矩阵作为K-L变换的产生矩阵,可抽取出P维的识别特征,将P维的识别特征矢量做为网络的输入矢量,每训练一个样本,修正一次连接权值。训练好网络后,就可用它对新输入的人脸进行识别。

3.4. 本章小结

本章主要介绍了人脸识别的一些方法以及人脸识别和生物特征识别的区别,主要的人脸识别方法有:几何特征的人脸识别、基于特征脸的人脸识别方法、神经网络的的人脸识别、弹性匹配的人脸识别方法、线段Hausdor距离(LHD)的人脸识别方法和支持向量机的人脸识别方法。本文主要用基于神经网络的人脸识别方法进行人脸识别。

4.人脸检测核心算法

4.1. 人脸检测算法在人脸识别中的作用

人脸检测是人脸识别中的一项关键技术,人脸检测是指判定任意给定一幅图像或者一组图像序列中是否存在人脸。如果存在,则返回其位置和各个人脸所占的区域。在输入图像中确定所有的人脸存在的位置,大小,位姿的过程。是自动人脸识别系统的一个关键环节。

15

人脸检测最初是随着人脸识别的研究而提出的,但随着计算机视觉技术的发展,人脸检测受到越来越高的重视而作为一个独立的课题提出。人脸检测长期以来受检测的精度和检测的速度困扰,直到上世纪90年代,由Viola提出的基于AdaBoost算法极大地提高了人脸检测地速度的和精度, 使人脸检测技术真正走向实用。人脸识别技术是基于人的脸部特征,对输入的人脸图象或者视频流进行检测,首先判断其是否存在人脸 , 如果存在人脸,则进一步的给出每个脸的位置、大小和各个主要面部器官的位置信息。并依据这些信息,进一步提取每个人脸中所蕴涵的身份特征,并将其与已知的人脸进行对比,从而识别每个人脸的身份。

4.2. 人脸检测算法

人脸检测的算法有很多。一是基于模版匹配的算法,其核心思想是利用人的脸部特征规律建立一个立体可调的模型框架,在定位出人的脸部位置后用模型框架定位和调整人的脸部特征定位,解决人脸识别过程中的观察角度、遮挡和表情变化等影响因素。二是主成份分析,它具有描述性强、计算代价小、易实现等特点。三是主成份分析法,该方法随着样本的增加需要不断的舍弃一些PC 以维持子空间维数不变,因而该方法精度稍差。四是AdaBoost算法,该算法是目前检测最为成功的算法之一,检测速度快。下一节将详细介绍这一算法。4.3. AdaBoost算法

Paul Viola和Michael Jones于2001年将AdaBoost算法应用于人脸检测中,其基本思想是针对不同的训练集训练同一个分类器(弱分类器),然后把这些不同训练集上的得到的分类器联合起来,构成一个最终的强分类器。AdaBoost 算法中不同的训练集是通过调整每个样本对应的权重来实现的。开始时,每个样本对应的权重是相同的,对于h1 分类错误的样本,加大其对应的权重;而对于分类正确的样本,降低其权重,这样分错的样本就被突出出来,从而得到一个新的样本分布 U2 。在新的样本分布下,再次对弱分类器进行训练,得到弱分类器 h2 。依次类推,经过 T 次循环,得到 T 个弱分类器,把这 T 个弱分类器按一定的权重叠加(boost)起来,得到最终想要的强分类器。

每个Haar特征对应看一个弱分类器,但并不是任何一个Haar特征都能较好的描述人脸灰度分布的某一特点,如何从大量的Haar特征中挑选出最优的Haar 特征并制作成分类器用于人脸检测,这是AdaBoost算法训练过程所要解决的关键问题。

训练系统总体框架,由“ 训练部分”和“ 补充部分”构成。依据系统框架,如图4.1,本文的训练系统可分为以下几个模块:

(1)以样本集为输入,在给定的矩形特征原型下,计算并获得矩形特征集;

(2)以特征集为输入,根据给定的弱学习算法,确定闽值,将特征与弱分类器一一对应,获得弱分类器集;

(3)以弱分类器集为输入,在训练检出率和误判率限制下,使用AdaBoost 算法,挑选最优的弱分类器构成强分类器;

(4)以强分类器集为输入,将其组合为级联分类器;

(5)以非人脸图片集为输入,组合强分类器为临时的级联分类器,筛选并补充非人脸样本。

17

图4.1 训练系统框架

训练过程分为3个步骤:首先需要提取Haar 特征;然后将Haar 特征转化成对应的弱分类器;最后从大量的弱分类器中迭代选择出最优弱分类器。

1.提取haar 特征

训 练 部 分 补充部分

图4.2 常用的四中haar特征

常用的Haar特征有4种,如图4.2所示。当然也可以在这4种特征的基础上设计出更多、更复杂的特征,上述4种特征的总个数超过了160000个。这样庞大的数字给后续的迭代训练工作带来了庞大的计算量,直接导致AdaBoost算法训练过程极为费时,这恰恰是算法需要改进的关键问题之一。

2.生成弱分类器

每一个Haar特征都对应着一个弱分类器,每一个弱分类器都是根据它所对应的Haar特征的参数来定义的。利用上述Haar特征的位置信息,对训练样本进行统计就可以得到对应的特征参数。AdaBoost算法中所训练的弱分类器是任何分类器,包括决策树,神经网络,隐马尔科夫模型,如果弱分类器是线性神经网络,那么AdaBoost算法每次将构造多层感知器的一个节点。

3.采用AdaBoost算法选取优化的弱分类器。AdaBoost算法训练过程就是挑选最优弱分类器,并赋予权重的过程。

4.4. 本章小结

本章主要讲了人脸识别常见算法以及人脸识别算法的原理,有二维人脸识别算法和三维人脸识别算法。二维人脸识别算法有基于模版匹配的方法、基于奇异值特征方法、子空间分析法、主成分分析法(PCA)、积分图像特征法(AdaBoost)。AdaBoost算法应用于人脸检测中,其基本思想是针对不同的训练集训练同一个分类器,然后把这些不同训练集上的得到的分类器联合起来,构成一个最终的强分类器。

19

5. 原型系统实现

5.1. 系统模块划分

该系统共分为六个功能模块:

(1)图像获取模块。该模块主要是从摄像头捕捉到的或者用户设定的路径获取图片,随后能够在用户的软件的界面当中显示出来。

(2)图像预处理模块。图像预处理就是对获取的图像进行适当的处理,使得无用信息被剔除,有用信息被保存并增强效果。

(3)人脸区域获取。该模块主要是从获得的图像中检测发现是否有人脸的存在并将人脸区域用绿色圆圈圈出来。

(4)人脸定位模块。人脸定位是将描述人脸特征的关键点(如两眼中点、鼻尖、嘴角等等)标记出来。利用眼睛的对称性以及五官之间的相对关系可以迅速的定位各器官。

(5)特征提取模块。再找到眼睛嘴巴的中心以及鼻尖位置之后,要计算出两眼之间的距离以及眼睛的倾斜度。接着用矩形标出每一个特征。随后用特定算法来标定特定值并存入后台数据库。

(6)识别模块。将后台数据库中的特定值与人脸数据库中的数据进行比对,确定与该特征值最接近的参数,如果该参数在允许误差范围内就可以认为其与人脸数据库中的某个信息相匹配。接着从人脸库中提取出该人的相关信息,并显示出来。如果不在误差范围内,那么就认为是新的人脸,并会提示是否存入新的人脸库。

5.2. 模块实现

4.2.1. 系统运行流程图:

图5.1 系统运行流程图

基于opencv的人脸识别程序-代码详解

#include "cv.h" #include "highgui.h" #include #ifdef _EiC #define WIN32 #endif static CvMemStorage* storage = 0; static CvHaarClassifierCascade* cascade = 0; void detect_and_draw( IplImage* image ); const char* cascade_name = "haarcascade_frontalface_alt.xml";//人脸检测分类器 int main( int argc, char** argv ) { CvCapture* capture = 0; IplImage *frame, *frame_copy = 0; int optlen = strlen("--cascade="); const char* input_name; if( argc > 1 && strncmp( argv[1], "--cascade=", optlen ) == 0 ) { cascade_name = argv[1] + optlen; input_name = argc > 2 ? argv[2] : 0; } else { cascade_name = "E:\毕业设计\智能机器人动态人脸识别系统\陈建州程序.xml";//分类器路径 input_name = argc > 1 ? argv[1] : 0; } cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 ); if( !cascade )//如果没有找到分类器,输出以下 { fprintf( stderr, "ERROR: Could not load classifier cascade\n" ); fprintf( stderr, "Usage: facedetect --cascade=\"\" [filename|camera_index]\n" ); return -1;

[作业]OPENCV人脸识别

摘要 人脸检测主要是基于计算机识别的一项数字化技术,用以准确获取人的脸部大小和位置信息,在进行人脸检测时,突出主要的脸部特征,淡化次要的环境、衣着等因素。对于某些情况下,人脸检测也可以计算出人脸,如眼睛,鼻子和嘴等精确的微妙特征。由于在安全检测系统,医学,档案管理,视频会议和人机交互等领域人脸检测系统都有光明的应用前景,因此人脸检测逐渐成为了两个跨学科领域研究的热门话题:人工智能和当前模式识别。本文基于OpenCV视觉库具体的设计并开发了对数字图像中的人脸检测的程序,所采用的人脸检测的原理主要是分类器训练模式(Adaboost算法)提取Haar特征的方法。它在整个软件极其重要的作用,图像中人脸的准确定位和识别都受图像处理好坏的直接影响。本次所设计的软件在图像处理部分所采用的方法是基于Adaboost算法进行Haar特征的提取,在此之上加以通过积分图方法来获取完整的级联分类器结构,进行人脸检测时,OpenCV级联分类器通过Adaboost人脸检测算法进行训练,此后采用不同情况下的实验样本完成精确定位以及检测试验。经过代码的设计和调试,在最后的测试中针对数字图像进行的人脸检测和定位达到了较好的效果,提高了定位和识别的正确率。 关键词:人脸检测,AdaBoost,分类器,OpenCV

Abstract Face detection is mainly based on computer recognition of a digital technology,face size and location information to accurately obtain the person,during face detection, highlight the main facial features,dilute the secondary environment,clothing,and other factors.For some cases,face detection can also calculate a person's face,such as eyes, nose and mouth,and other subtle features accurate.Because in the field of human security detection systems,medical records management,video conferencing,and human-computer interaction face detection system has bright prospects,and therefore face detection is becoming a two interdisciplinary research fields hot topic:artificial intelligence and The current pattern recognition.This article is based.penCV vision library designed and developed specifically for digital image face detection process,the principles used face detection methods are mainly classifier training mode(Adaboost algorithm)to extract Haar features.It is in the vital role of the software,the image of the human face accurately locate and identify all that is good or bad a direct impact on the image processing.This software is designed image processing method used in part based Haar Adaboost algorithm to extract features,on top of this to be to get the full cascade classifier structure by integrating the diagram method for face detection,OpenCV cascade classifier is trained by Adaboost face detection algorithm,then the use of the experimental sample under different circumstances for accurate positioning and testing.Through design and debugging code,face detection and location in the final test for digital images to achieve better results and improve the accuracy of positioning and recognition. Keywords:face detection;AdaBoost;classifier;openCV

基于Opencv的人脸检测源程序(附详细使用说明)

基于Opencv的人脸检测程序 我的电脑上是用visual studio 2015,配置opencv2.4.9,visuanl studio加载opencv的方法百度上可以找到很多,按照要求配置好后以后进行一下操作: 第一步:新建win32应用程序的工程,在该工程以下程序复杂被覆盖win32的几行程序, #include"stdafx.h" #include"opencv2/objdetect.hpp" #include"opencv2/videoio.hpp" #include"opencv2/highgui.hpp" #include"opencv2/imgproc.hpp" #include #include using namespace std; using namespace cv; /** Function Headers */ void detectAndDisplay(Mat frame); /** Global variables */ String face_cascade_name = "haarcascade_frontalface_alt.xml"; String eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml"; CascadeClassifier face_cascade; CascadeClassifier eyes_cascade; String window_name = "Capture - Face detection"; /** @function main */ int main(void) { VideoCapture capture; Mat frame; //-- 1. Load the cascades if (!face_cascade.load(face_cascade_name)) { printf("--(!)Error loading face cascade\n"); return -1; }; if (!eyes_cascade.load(eyes_cascade_name)) { printf("--(!)Error loading eyes cascade\n"); return -1; }; //-- 2. Read the video stream capture.open(-1); if (!capture.isOpened()) { printf("--(!)Error opening video capture\n"); return -1; }

基于Opencv的视频人脸检测程序源代码(可运行)

1.打开Microsoft Visual Studio 2008,新建一个Win32控制台项目; 2.配置好项目的包含文件和库文件; 3.将……\OpenCV\data\haarcascades中的haarcascade_frontalface_alt.xml拷贝到所建项目的文件夹中; 4.然后添加代码: #include"stdafx.h" #include"cv.h" #include"highgui.h" #include int_tmain(int argc, _TCHAR* argv[]) { CvCapture* capture=0; /*初始化一个视频捕获操作。告诉底层的捕获api我想从Capture1.avi中捕获图片,底层api将检测并选择相应的解码器并做好准备工作*/ capture = cvCaptureFromFile( "F:\\1.avi"); //设置要读的视频(avi格式) static CvMemStorage* storage = 0; static CvHaarClassifierCascade* cascade = 0; cascade = (CvHaarClassifierCascade*)cvLoad("haarcascade_frontalface_alt.xml",0,0,0); if( !cascade || !capture ) return -1; storage = cvCreateMemStorage(0); /*创建一个窗口,用“Video”作为窗口的标识符*/ cvNamedWindow( "Video",1); /*如果初始化失败,那么capture为空指针,程序停止,否则进入捕获循环*/ if( capture ) { for(;;) { IplImage* frame = cvQueryFrame( capture ); IplImage* img = NULL; CvSeq* faces; if( !frame ) break; img = cvCloneImage(frame);

基于OpenCV的视频人脸识别系统的设计与实现

摘要 基于生物特征识别的身份认证方法和系统研究一直以来都是计算机图形学和模式识别领域研究的热点,其中,由于人脸的稳定性和可见性,针对人脸识别的算法研究和系统应用最为广泛,本文针对校园内实验室和宿舍安全管理需求,设计和实现了一套针对监控视频的基于OpenCV的人脸识别原型系统,开发语言选用C++,全文内容包括: (1)构建了基于OpenCV的视频人脸识别的技术框架。针对实验室和宿舍安全管理需要,构建了基于OpenCV的视频人脸识别的技术框架,能够完成基于视频的实时人脸识别和身份认定; (2)设计了基于OpenCV的视频人脸快速检测算法。人脸检测是人脸识别的前提,本文采用基于OpenCV的快速人脸检测算法实现视频图像中人脸的快速定位和提取; (3)设计了基于AdaBoost算法的视频人脸识别方法。应用AdaBoost算法实现了针对视频流的快速人脸定位和身份识别,能够实现实时身份认定。 系统基于.NET平台设计,使用C++语言进行实现,完成了基于视频的实时人脸身份认定。 关键词:人脸检测; OpenCV;人脸识别; C++; 1

Abstract Based on the research of identity authentication method and system of biometric recognition has been a hot research field of computer graphics, pattern recognition and the stability and visibility, the face, the algorithm research and system applications of face recognition is the most widely, according to the laboratory and dormitory safety management needs of the campus, designed and implemented. A face recognition system based on OpenCV in surveillance video, development language is C++, the main content of this thesis includes: (1)Constructed the technical framework for video based face recognition based on OpenCV. According to the laboratory and the dormitory safety management needs, establishes a framework for video based face recognition based on OpenCV, which can complete real-time face recognition and identity based on video identification; (2)Design of a fast face detection algorithm in video based on OpenCV. Face detection is the precondition of face recognition, this paper uses OpenCV fast face detection algorithm to locate face in video image and extraction based on;The design use application of OpenCV to provide strong support, based https://www.360docs.net/doc/6313981374.html, platform design. (3)Design of video based face recognition method based on AdaBoost algorithm. Application of AdaBoost algorithm for fast face location and recognition of video stream, which can realize real-time identification. System based https://www.360docs.net/doc/6313981374.html, platform design, implementation is carried out using C++ language, completed the real-time face identity recognition based on video Key word:Face detection;OpenCV;Face recognition;C++;

基于opencv的人脸检测界面开发

摘要 人脸检测(Face Detection)是一种在任意数字图像中找到人脸的位置和大小的计算机技术。它可以检测出面部特征,并忽略诸如建筑物、身体和其他任何东西。人脸检测技术不仅仅是人脸跟踪、人脸识别、表情识别等技术的重要条件,同时在人机交互、模式识别、视频检索、智能监控等领域也引起了广泛的重视。 在通过对人脸检测相关知识进行学习的基础上,本文首先对国内外的人脸检测发展进行了相关分析,阐述了本课题的研究背景及意义;第二章介绍基于Opencv实现人脸检测的相关方法和检测原理;第三章指出了基于QT平台,人脸检测界面如何开发,需要用到的相关技术知识和操作流程。第四章设计了基于opencv的人脸检测程序,采用了QT开发工具并结合opencv技术对程序界面进行设计实现。 关键词:人脸检测;QT开发;Opencv;

Abstract Face detection is a computer technology that identifies human faces in digital images. It can detect facial features and ignore something like buildings,bodies and any other things.Face detection technology is not just an important condition for face recognition, also attracting wide attention in the human-computer interaction, pattern recognition, video retrieval, intelligent monitoring and other fields. Firstly in this paper, through the study of relevant technology of face detection recognition, and face detection to identify relevant experience in the domestic and abroad are analyzed,indicating the background and the significance of the topic.Based on opencv,the second chapter introduces how to realize the design.Then the third chapter points out how to develop face detection’s interface based on the QT platform; The fourth chapter based on opencv face detection procedures, using opencv, the QT development tools,achieve the design. Key Words:Face detection; QT development; Opencv;

基于OpenCV的人脸检测算法研究

第8卷第3期 2009年8月  淮阴师范学院学报(自然科学版)JOURNA L OF HUAIYIN TE ACHERS CO LLEGE (NAT URA L SCIE NCE E DITION ) V ol 18N o 13Aug.2009 基于OpenCV 的人脸检测算法研究 齐金山 (淮阴师范学院计算机科学与技术学院,江苏淮安 223300) 摘 要:介绍了一种开放源代码的计算机视觉类库OpenCv ,阐述了该软件的特点及结构,并对 其在Visual C ++2005开发环境下的配置作了详细的说明.然后提出了一个基于OpenCv 的人 脸检测算法.实验结果表明,该算法具有识别效果、实时性好,检测速度快的特点. 关键词:OpenC V ;人脸检测;I pIImage 中图分类号:TP391.41 文献标识码:A 文章编号:167126876(2009)0320216205  收稿日期:2009205222  作者简介:齐金山(19772),男,湖南株洲人,讲师,硕士,研究方向为数字图像处理. 0 引言 人脸的检测是一类具有很大挑战性的问题[1] ,其主要难点在于:人脸是一类高度非刚性的目标,存在相貌、表情、肤色等差异;人脸上可能会存在一些附属物如眼镜、胡须等;人脸的姿态变化万化,并且可能存在遮挡物;待检测图像性质的差异,比如:待检图像的分辨率、摄录器材的质量等.针对以上难点,各国的科研人员作了很多的研究,每年在国际国内的相关期刊和会议上都有大量的关于人脸检测的论文, 如Chellappa 、Zhao 等人分别于1995和2003年发表的两篇人脸识别的综述论文[2,3].人脸检测的算法也 很多,Boosting 算法[4]是其中的一种,但Boosting 算法十分复杂.本文提出了基于OpenC V 进行人脸检测 将比较容易实现,实验结果表明该算法具有识别效果好、实时性好、检测速度快的特点.1 OpenCv 简介 OpenC V (Open S ource C om puter Vision Library )是指Intel 计算机视觉库[5].它由一系列C 函数和少量 C ++类构成,实现了图像处理和计算机视觉方面的很多通用算法.OpenC V 主要用于对图像进行一些高级处理,比如说特征检测与跟踪、运动分析、目标分割与识别以及3 D 重建等.由于OpenCv 的源代码是完全开放的,而且源代码的编写简洁而高效,特别是其中大部分的函数都已经通过汇编最优化,以使之能高效而充分地利用英特尔系列处理芯片的设计体系,对于Pentium M MX 、Pentium 、Pentium HI 及Pentium 4这些处理器而言,OpenCv 的代码执行效率是非常高的,所以近年来在国外的图像处理相关领域中被广泛地使用,成为一种流行的图像处理软件. 111 OpenCv 的特点 相对于MAT LAB 等其它常用的图像处理软件来说,OpenCv 有其显著的不可比拟的优点,主要体现在如下几个方面: 1)OpenCv 是一个包含了超过300个C 函数的应用编程接口,它不依赖于外部库,既可以独立运行,也可在运行时使用其它外部库. 2)高性能:OpenCv 中所有的算法都是基于封装于IP L 的具有很高灵活性的动态数据结构,而且其中有一半以上的函数在设计及汇编时被Intel 公司针对其所生产的处理器优化. 3)提供了一些与诸如E iC 、Ch 、MAT LAB 等其它语言或环境的接口,这些接口在其安装完之后位于安装目录opener/interfaces 下. 4)开放性:不管对于商业的还是非商业的用途,OpenCv 都是完全免费的,其源代码完全开放,开发

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

西安电子科技大学 人工智能学院暑期夏令营科研实践《基于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”。

基于OpenCV的人脸识别设计方案

基于OpenCV的人脸识别设计方案 导读: 本文提出了一种在Linux 平台下开发脸识别系统的方案,通过QT 来开发用户界面,调用OpenCV 图像处理库对相机进行采集和处理采集图像, 从而实现了人脸检测、身份识别、简单表情识别的功能。 人脸识别的研究可以追溯到上个世纪六、七十年代,经过几十年的曲折发展 已日趋成熟,构建人脸识别系统需要用到一系列相关技术,包括人脸图像采集、人脸定位、人脸识别预处理、身份确认以及身份查找等。而人脸识别在基于 内容的检索、数字视频处理、视频检测等方面有着重要的应用价值,可广泛应 用于各类监控场合,因此具有广泛的应用前景。OpenCV 是Intel 公司支持的开 源计算机视觉库。它轻量级而且高效--由一系列 C 函数和少量C++ 类构成, 实现了图像处理和计算机视觉方面的很多通用算法,作为一个基本的计算机视觉、图像处理和模式识别的开源项目,OpenCV 可以直接应用于很多领域,其 中就包括很多可以应用于人脸识别的算法实现,是作为第二次开发的理想工具。 1 系统组成 本文的人脸识别系统在Linux 操作系统下利用QT 库来开发图形界面,以OpenCV 图像处理库为基础,利用库中提供的相关功能函数进行各种处理:通 过相机对图像数据进行采集,人脸检测主要是调用已训练好的Haar 分类器来 对采集的图像进行模式匹配,检测结果利用PCA 算法可进行人脸图像训练与 身份识别,而人脸表情识别则利用了Camshift 跟踪算法和Lucas–Kanade 光流算法。 2 搭建开发环境 采用德国Basler acA640-100gc 相机,PC 机上的操作系统是Fedora 10,并

基于OpenCV的人脸识别算法研究

基于OpenCV的人脸识别算法研究 摘要:通过对基于Adaboost人脸检测算法的研究,利用该算法与计算机视觉类库openCV进行人脸检测系统的设计,实现了对出现在视频或图像中的人脸检测。此外,在VC++6.0环境下实现了对一个简单的人脸检测系统软件的界面开发,该系统对人脸检测的速度较快,检测结果较为准确,可以作为其他人脸检测或人脸模式识别的系统的开发基础。 关键词:人脸检测;openCV;Adaboost;系统 Face detection system design based on openCV Abstract: According to the research of Adaboost algorithm of Face Detection,people made use of the algorithms and computer vision class library openCV for the design of face detection system and achieved the target of detecting faces showing up in videos and pictures. What’s more,in the environment of VC++6.0,it achieved the development of simple Face Detection. The speed of Face Detection is very fast and the test results are accurate. It can be used as the development foundation of other face detection or face pattern recognition system. Key words: face detection;openCV;Adaboost;system 1.引言 随着计算机与数字信号处理技术的高速发展,人脸检测技术在众多领域得到广泛应用。人脸检测技术是指在视频或图像中检测出现人脸位置、大小的过程。作为人脸信息处理中的一项关键技术,人脸检测技术已经超出了其它人脸识别模式的应用范畴,在视频处理、图像处理、身份验证、安全监测等方面有着重要的应用价值。随着计算机语言算法的发展,近年来出现了大量的人脸检测的算法,其中能够较好的解决人脸的检测速度与检测效果的算法,是在2001年由Paul Viola和Michael Jones首先提出的Adaboost算法。openCV是由Intel 提供的一系列包括C与C++的提供计算机视觉和图像处理的开源软件包,它为视频或图像处理搭建了很好的软件平台。本系统就是基于openCV利用Adaboost算法设计的一个简单的人脸检测系统#该系统能够快速&准确的检测到图像或视频中的人脸。 2.AdaBoost人脸检测算法 对人脸检测的研究最初可以追溯到20世纪70年代,早期的研究方向与现在的研究方向与方法不同。目前在实际中应用的人脸检测方法较为普遍的是基于Adaboost算法的方法。 Viola的人脸检测方法是一种基于积分图、级联分类检测器和Adaboost算法的方法,方法框架可以分为以下3大步骤: 1)使用Haar-like特征表示人脸,使用“积分图”实现特征数值的快速计算; 2)使用Adaboost算法挑选出一些最能代表人脸的矩形特征(弱分类器),按照加权投票的方式将弱分类器构造为一个强分类器; 3)将得到的若干强分类器串联组成一个级联结构的层叠分类器,训练得到的强级联结构能有效地提高分类器的检测速度。

怎样使用OpenCV进行人脸识别

怎样使用OpenCV进行人脸识别 本文大部分来自OpenCV官网上的Face Reconition with OpenCV这节内容 (https://www.360docs.net/doc/6313981374.html,/modules/contrib/doc/facerec/facerec_tutorial.html),小弟我尝试翻译一些重要内容。这部分内容是Philipp Wagner写的,他的github:https://https://www.360docs.net/doc/6313981374.html,/bytefish,他的网站http://www.bytefish.de/,应该是个德国人。下面应该是他的照片。 友情提示,要看懂代码前,你得先知道OpenCV的安装和配置,会用C++,用过一些OpenCV函数。基本的图像处理和矩阵知识也是需要的。[gm:我是箫鸣的注释]由于我仅仅是翻译,对于六级才过的我,肯定有一些翻译错的或者不当的地方,所以请大家纠错。 1.1.介绍Introduction 从OpenCV2.4开始,加入了新的类FaceRecognizer,我们可以使用它便捷地进行人脸识别实验。本文既介绍代码使用,又介绍算法原理。(他写的源代码,我们可以在OpenCV的 opencv\modules\contrib\doc\facerec\src下找到,当然也可以在他的github中找到,如果你想研究源码,自然可以去看看,不复杂) 目前支持的算法有 Eigenfaces特征脸createEigenFaceRecognizer() Fisherfaces createFisherFaceRecognizer() Local Binary Patterns Histograms局部二值直方图createLBPHFaceRecognizer() 下面所有的例子中的代码在OpenCV安装目录下的samples/cpp下面都能找到,所有的代码商用或者学习都是免费的。

毕业设计:基于OpenCV的人脸识别算法(终稿)-精品

安徽工业大工商学院 毕业学士论文 基于OpenCV的人脸识别算法 姓名:陈滔 申请学位级别:学士专业:测控技术与仪器 指导教师:方挺

摘要 人脸在社会交往中扮演着十分重要的角色,是人类在确定一个人身份时所采用的最普通的生物特征,研究人脸跟踪识别及其相关技术具有十分重要的理论价值和应用价值。彩色图像序列的人脸检测、跟踪与识别技术是随着计算机技术的高速发展和视频监控等应用的需要在近几年才逐渐成为一个研究热点。本文着重构建一套人脸跟踪识别系统,致力于精确实时地对彩色视频中的人脸图像检测跟踪,并可以将跟踪到的人脸图片传输到识别端进行身份识别。系统分为客户端和服务器两部分。针对传统Camshifl跟踪算法进行形态学处理、分配多个跟踪器等改进后的算法应用于客户端进行多人脸的跟踪。服务器端首先将人脸图像按其主要特征进行分块,再对分块图执行Eigenface算法实现人脸身份的识别。这套系统完成了对多人脸的跟踪效果,可广泛的应用于各种安防系统之中如:ATM机监控系统,门禁系统等。

Abstract Human face is 0111"primary focus of attention in social intercourse playingamajor rolei conveying dentity and emotion.Researchonthe face tracking,recognition technology has great theoreticaland practical value.This paper focusesOilbuildingasetofhumanface recognition and trackingsystem tocommitted toaccurate and real-timecolorvideoimages,andcalltransmit the tracked human face image to the recognition part to identify the person’S status.Thesystem is divided into client and server parts.Thetracking algorithm whichcarrieson morphology processing after traditional track algorithm Camshifl and assignments severaltrackingdevices is applied to the client for duplex facetracking.Theserver—side first divides the person face image into blocksaccording to its chief feature,then the blocksuses the Eigenfacealgorithm separately to realize the person’S status recognition.The system implementation for multiple face trackingcallbe widelyused among the various security systems,suchas:ATM machine monitoring system,accesscontrol system.Keywords:Face DetectionFace TrackingFace Recognition Eigenface Camshift

基于OPENCV的人脸识别程序 代码详解

#include"cv.h" #include"highgui.h" #include #ifdef_EiC #define WIN32 #endif static CvMemStorage*storage=0; static CvHaarClassifierCascade*cascade=0; void detect_and_draw(IplImage*image); const char*cascade_name= "haarcascade_frontalface_alt.xml";//人脸检测分类器 int main(int argc,char**argv) { CvCapture*capture=0; IplImage*frame,*frame_copy=0; int optlen=strlen("--cascade="); const char*input_name; if(argc>1&&strncmp(argv[1],"--cascade=",optlen)==0) { cascade_name=argv[1]+optlen; input_name=argc>2?argv[2]:0; } else { cascade_name="E:\毕业设计\智能机器人动态人脸识别系统\陈建州程序.xml";//分类器路径 input_name=argc>1?argv[1]:0; } cascade=(CvHaarClassifierCascade*)cvLoad(cascade_name,0,0,0); if(!cascade)//如果没有找到分类器,输出以下 { fprintf(stderr,"ERROR:Could not load classifier cascade\n"); fprintf(stderr, "Usage:facedetect--cascade=\"\"[filename|camera_index]\n"); return-1;

OpenCV利用摄像头人脸识别

?Introduction 网上存在很多人脸识别的文章,这篇文章是我的一个作业,重在通过摄像头实时采集人脸信息,进行人脸检测和人脸识别,并将识别结果显示在左上角。 利用OpenCV 实现一个实时的人脸识别系统,人脸库采用ORL FaceDatabase (网上下载) ,另外在数据库中增加了作业中自带的20张照片和自己利用摄像头采集到的10张照片,系统利用摄像头实时的采集到场景图像,从中检测出人脸用方框标出,并利用提供的数据库进行人脸识别,并在图像左上角显示相匹配的数据库图片。 ?Method 算法流程分两步,分别是人脸检测和人脸识别。人脸检测使用的是ViolaJones 人脸检测方法,利用样本的Haar-like 特征进行分类器训练,得到级联boosted 分类器,加载训练好的人脸分类器,利用分类器在视频帧中查找人脸区域;人脸识别利用了局部二进制模式直方图。 ?Haar-like 特征 Haar-like 特征如下图所示 图1 Haar-like 特征 ?LBPH 人脸识别常用的方法有三种,Eigenfaces、Fisherfaces 和LBPH;对于高维的图像空间,我们首先应该进行降维操作。LBP 不把图像看做高维的矢量,而是通过物体的局部特征来描述。 将每个像素和其相邻像素对比形成局部的结构,把该像素看做中心,并以该值对邻接像素做阈值处理,如果临界像素的亮度大于该像素则为 1 否则为0,这样每个像素点都可以用一个二进制数来表示,比如一个使用3*3 临界点的LBP 操作如下图所示: 图2 LBP

?Implementation ?识别训练 利用准备好的数据库进行识别训练:首先我们利用Opencv安装文件中的python脚本 create_csv.py建立CSV文件,文件中每条记录如:orl/s13/2.pgm;12,分号之前是图片所存路径,而分号之后是图片的标签号,每一组图片对应着唯一的标签号;之后利用代码中的train_data和read_csv函数对数据集进行训练。使用到的OpenCV 类和函数有: FaceRecognizer,createLBPHFaceRecognizer ?人脸检测 运用Opencv安装文件中的haarcascade_frontalface_alt.xml文件,使用分类器在视频帧中查找人脸区域,并用绿色方框标出。用到的OpenCV 类和函数有: CascadeClassifier,detectMultiScale。 ?人脸识别 读取训练好的yaml文件,对每个监测到的区域的图像分类,并在视频帧人脸区域上方显示分类结果(分类结果显示为标签和可信度),在左上角显示缩略图。用到的OpenCV 函数主要有:predict. ?Code 1/*头文件:*/ 2 #include "opencv2/core/core.hpp" 3 #include "opencv2/contrib/contrib.hpp" 4 #include "opencv2/highgui/highgui.hpp" 5 #include "opencv2/imgproc/imgproc.hpp" 6 #include "opencv2/objdetect/objdetect.hpp" 7 8 #include 9 #include 10 #include 11 #include 12 13char *FACES_TXT_PATH = "face.txt"; 14char *HARR_XML_PATH = "haarcascade_frontalface_alt.xml"; 15char *FACES_MODEL = "face.yaml"; 16char *POTRAITS ="potraits.jpg"; 17int DEVICE_ID = 0; 18 19/*主文件*/ 20 #include "config.h" 21

相关文档
最新文档