搜档网
当前位置:搜档网 › [作业]OpenCV人脸识别

[作业]OpenCV人脸识别

[作业]OpenCV人脸识别
[作业]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

目录

摘要 (1)

Abstract (2)

第1章人脸检测概述 (1)

1.1 背景 (1)

1.2 目前的研究状况 (1)

1.3 研究意义 (2)

第2章人脸图像处理技术 (3)

2.1 OpenCV概述 (3)

2.1.1 OpenCV简介 (3)

2.1.2 应用领域 (3)

2.1.3 OpenCV的基本结构 (4)

2.1.4 OpenCV的特征 (4)

2.2 图像预处理 (5)

2.2.1 灰度图像转换 (5)

2.2.2 图像噪声消除 (6)

2.2.2 图像边缘检测 (6)

第3章人脸检测原理与算法 (7)

3.1 人脸识别原理 (7)

3.2 人脸检测方法 (7)

3.3 改进型双重人脸检测 (9)

3.4 双眼定位算法 (10)

3.5 双重检测算法的实现 (11)

第4章人脸识别算法与实现 (13)

4.1 设计思想 (13)

4.2 程序设计流程 (13)

4.3 代码编写 (14)

4.3.1 载入图片阶段 (14)

4.3.2 图片预处理阶段 (14)

4.3.3 加载分类器并进行检测 (14)

4.3.4 打印检测结果 (15)

参考文献 (16)

附录一人脸检测源程序 (17)

第1章人脸检测概述

1.1 背景

近年来,随着信号处理理论和计算机的出现及其发展,人们开始用摄像机获取环境图像并将其转换成数字信号,用计算机实现对视觉信息的处理,这就形成了计算机视觉。计算机视觉是当前计算机科学中的一个非常活跃的领域,其基本假设是:可以用计算的方式来模拟人类的视觉机制。

人脸的自动识别是一种重要的生物特征识别技术,与其它身份识别方法相比,人脸识别具有直接、方便、友好等特点,因而人脸自动识别问题的研究不仅具有重要的应用价值,而且具有重要的理论意义。现在,随着科学技术和电子商务的发展,人脸检测的应用背景已经远远超出了人脸识别系统的范畴,在基于内容的检索、数字视频处理、计算机视觉、人机交互等方面都有着重要的应用价值。

人脸识别通过计算机提取人脸的特征,并根据这些特征进行身份验证。人脸与人体的其他生物特征(指纹、虹膜等)一样与生俱来不可改变,它们所具有的唯一性和不易被复制的良好特性为身份鉴别提供了必要的前提,同其他生物特征识别技术相比,人脸识别技术具有操作简单、结果直观、隐蔽性好的优越性。

1.2 目前的研究状况

目前,许多人脸识别系统能够在特定条件(光照、背景、人脸正对摄像头等)下

很好地实现人脸识别,识别效率高。但是在实际运用中,各种条件不可能都满足,特

别是针对户外监控识别系统,环境变化比较大,现有系统识别效率明显下降。

目前的人脸识别系统所需要解决的问题主要有以下几点:

(1)人脸具有很复杂的细节变化,不同的外貌特征如脸形、肤色等,不同的表情

如眼、嘴的开与闭等;

(2)其他物体对人脸的遮挡,如眼镜、头发和头部饰物以及其他外部物体等;另外

一方面由于外在条件变化所引起:

(3)成像角度的不同也能造成人脸的多姿态,如平面内旋转、深度旋转以及上下旋转,其中深度旋转影响较大;

(4)光照的影响,如图像中的亮度、对比度的变化和阴影等;

(5)图像的成像条件,如摄像设备的焦距、成像距离,图像获得的途径等等。

这些困难都为解决人脸问题造成了难度。如果能找到一些相关的算法并使其能在应用过程中达到实时,将为成功构造出具有实际应用价值的人脸检测系统提供保证。

1.3 研究意义

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

第2章人脸图像处理技术

2.1 OpenCV概述

2.1.1 OpenCV简介

OpenCV是Intel公司支持的开源计算机视觉库。它轻量级而且高效——由一系列C函数和少量C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法。1999年在俄罗斯设立的软件开发中心“Software Developmellt Cellter¨开发的。

OpenCV采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上。OpenCV还提供了Python、Ruby、MATLAB以及其他语言的接口。OpenCV的设计目标是执行速度尽量快,主要关注实时应用。它采用优化的C代码编写,能够充分利用多核处理器的优势。如果是希望在Intel平台上得到更快的处理速度,可以购买Intel的高性能多媒体函数库IPP(Integrated Performance Primitives)。IPP库包含许多从底层优化的函数,这些函数涵盖多个应用领域。如果系统已经安装了IPP库,OpenCV会在运行时自动使用相应的IPP库。

OpenCV的一个目标是构建一个简单易用的计算机视觉框架,以帮助开发人员更便捷地设计更复杂的计算机视觉相关应用程序。OpenCV包含的函数有500多个,覆盖了计算机视觉的许多应用领域,如工厂产品检测、医学成像、信息安全、用户界面、摄像机标定、立体视觉和机器人等。因为计算机视觉和机器学习密切相关,所以OpenCV 还提供了MLL(Machine Learning Library)机器学习库。该机器学习库侧重于统计方面的模式识别和聚类。MLL除了用在视觉相关的任务中,还可以方便地应用于其他的机器学习场合。

2.1.2 应用领域

自从OpenCV在1999年1月发布alpha版本开始,它就被广泛用在许多应用领域、产品和研究成果中。相关应用包括卫星地图和电子地图的拼接,扫描图像的对齐,医学图像去噪(消噪或滤波),图像中的物体分析,安全和入侵检测系统,自动监视和安全系

统,制造业中的产品质量检测系统,摄像机标定,军事应用,无人飞行器,无人汽车和无人水下机器人。将视觉识别技术用在声谱图上,OpenCV 可以进行声音和音乐识别。

2.1.3 OpenCV 的基本结构

OpenCV 主体分为五个模块,其中四个模块如图2-1所示。OpenCV 的CV 模块包含基本的图像处理函数和高级的计算机视觉算法。ML 是机器学习库,包含一些基于统计的分类和聚类工具。HighGUI 包含图像和视频输入/输出的函数。CXCore 包含OpenCV 的一些基本数据结构和相关函数。

图2-1 OpenCV 的基本结构

图2-1中并没有包含CvAux 模块,该模块中一般存放一些即将被淘汰的算法和函数(如基于嵌入式隐马尔可夫模型的人脸识别算法),同时还有一些新出现的实验性的算法和函数(如背景和前景的分割)。

2.1.4 OpenCV 的特征

OpenCV 的主要特征有以下几个方面:

(1)图像数据的操作(分配、释放、复制、设置和转换)。

(2)图像是视频的输入输出I/O (文件与摄像头的输入、图像和视频文件输出)。 MLL 统计分类器

CV

图像处理和视觉算法 HighGUI GUI 图像和视频输入/输出

CXCORE

基本结构和算法、XML 支持、绘图函数

(3)矩阵和向量的操作以及线性代数的算法程序(矩阵积、解方程、特征值以及奇异值等)。

(4)各种动态数据结构(列表、队列、集合、树、图等)。

(5)基本的数字图像处理(滤波、边缘检测、角点检测、采样与差值、色彩转换、形态操作、直方图、图像金字塔等)。

(6)结构分析(连接部件、轮廓处理、距离变换、各自距计算、模板匹配、Hough变换、多边形逼近、直线拟合、椭圆拟合、Delaunay 三角划分等)。

(7)摄像头定标(发现与跟踪定标模式、定标、基本矩阵估计、齐次矩阵估计、立体对应)。

(8)运动分析(光流、运动分割、跟踪)。

(9)目标识别(特征法、隐马尔可夫模型:HMM)。

(10)基本的GUI (图像与视频显示、键盘和鼠标事件处理、滚动条)。

(11)图像标注(线、二次曲线、多边形、画文字)。

2.2 图像预处理

由于一些外界条件的不同,例如用干采集图像的设备的性能好坏、现场光照明暗程度不同等,图像通常会存在噪声、清晰度低等缺陷。此外,图像中人脸的绝对坐标及区域大小会随着人离摄像头的远近而改变。要想保证提取到的人脸特征不会受到上述这些因素的影响,则需要在提取特征人脸之前,对图像进行预处理。

2.2.1 灰度图像转换

由于对彩色图像数据的分析比黑白图像要难得多,所以将彩色图像转换成灰度图是图像预处理的第一步。对图像进行灰度化处理是智能识别的基础,一般采集的图像都是三原色(R, G. B三个分量)。为了提高检测运动目标的速度,需要在特征提取之前将人脸图像进行灰度化,这样就只需要对像素点的灰度值进行处理。

本文采用OpenCV视觉库的接口进行灰度化处理,具体实现是通过使用cvCvtColor()函数,使用RGB2GRAY参数,将RGB彩色图转换为灰度图。

2.2.2 图像噪声消除

通常视频可以理解为连续的图像序列,在采集、保存、传输视频图像数据的过程中常会出现噪声干扰现象,噪声会使图像失真,使图像不像原木那样均匀连续地变化,进而会对图像的后续处理产生影响。因此,对视频图像进行检测分析之前,应对输入的图像进行噪声消除,尽最地消除图像中的噪声干扰,有助于准确快速地获取图像的特征,从而也能更好地进行模式识别等复杂处理,同时也能够减少目标检测的计算量。

按影响图像质量的噪声源可将图像噪声分为三类:第一类,阻性元件内部电子自由热运动产生的电子噪声,常用零均值高斯白噪声模型来近似。第二类,由于光电转换引起的泊松噪声(椒盐噪声)。第三类,在感光过程中产生的颗粒噪声。根据噪声与信号之间的关系,噪声也可分为加性噪声和乘性噪声。加性噪声的来源主要有人为噪声、自然噪声、内部噪声,主要表现形式有脉冲噪声和高斯噪声。乘性噪声往往具有随机性,是图像中最普通的噪声,其中一个典型代表是光照变化。

OpenCV消除图像噪声的常用方法有:均值滤波、中值滤波和高斯滤波。均值滤波对高斯噪声有较好的抑制作用,中值滤波适用于处理椒盐噪声。下面简单介绍下这三种去噪方法。

2.2.2 图像边缘检测

在对图像进行目标检测时,图像边缘是重要的提取信息。根据人眼的直观感受,目标图像的边缘信息是最明显的,图像边缘在整个图像中变化差异最大。提取图像边缘的主要依据是目标边缘处像素点的灰度值变化比较剧烈。图像边缘往往处于前景物体与背景图像的交界处,所以一般采用高通滤波器,保留高频信号。

常用的边缘检测方法有:梯度边缘检测、差分边缘检测、Sobel边缘检测算子、Laplace 边缘检测算子等。OpenCV中常用于边缘检的函数有:cvSobel(), cvLaplace(),cvCanny()。

第3章人脸检测原理与算法

3.1 人脸识别原理

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

此方法是把人脸面部器官之间关系编码并准则化的人脸检测方法。这是一种自顶而下的方法,根据人脸面部器官的对称性、灰度差异等先验知识,制定一系列的准则。当图像中的待测区域符合准则,即被检测为人脸。

人脸及器官具有典型的边沿和形状特征,通常人们利用采用Laplacian,Sobel和Canny等算子来提取边沿特征,将这些特征用于人脸的定位。边沿和形状对于光照条件的变化具有很好的鲁棒性,灰度特征对光照比较敏感。

3.2 人脸检测方法

现有的人脸检测方法,人致分为三类:基于人脸几何特征的方法、基于人脸肤色的方法和基于人脸统计理论的方法。

(1)基于人脸几何特征的方法

人脸的几何特征即人脸的而部特征(如眼睛、鼻户、嘴巴、耳朵、肤色等),主要判别标准是人脸轮廓五官的对称性以及各个特征之间相对的位置。典型的基于人脸几何特征的方法有:基于先验知识的人脸检测方法和基于模板的人脸检侧方法.

基于先验知识的检测方法,首先需要确定人脸区域,然后通过前辈总结的先验知识来检验是否存在人脸,例如人脸面部五官的对称性、灰度值的不同等.人脸五官存在一些基本的规律,例如眼睛的形状及对称性,眼睛、鼻子、眉毛和嘴巴处的像素灰度值要大于人脸其他部位,鼻和嘴巴的中心点的连线与两只眼睛的连线是垂直的等.可以将这些特征信息作为一个判别准则.若图像符合这些准则,则确定存在人脸。该算法的优点为人脸特征比较直观、检测容易实现、计算量小。然而,该算法也存在不容忽视的缺点,检测准确率不高。如果人脸表发生变化或人脸偏向的角度不同,则人脸特征的判别准则

也会产生很大的变化。这种情况下,若只采用固定准则去定义人脸.则会产生人睑的误检漏检,检测准确率不高。

基于模板的人脸检测方法,就是预先将包含人脸局部特征的标准脸部模型参数化。利用算法计算出图像待检测区域的特征与标准脸部模板的相似度,如果相似度的大小符合制定的准则(大干某个阈值),就可以判断检测区域存在人脸。该方法虽然实现容易,但标准模板的设定固定单一,不能有效地解决人睑姿态、大小以及形状变化等问题。为了提高该方法的鲁棒性,人们又提出了基干弹性模板的人脸检测方法。在该方法所建立的模型中,对应面部器官(人眼、鼻子等)的尺寸、位置、角度等信息的参数被设置为可变参数,这样在检测时能够根据被测图像的具体情况动态地调整标准模板的参数,利用修正后的标准模板再进行检测,检测的准确度会提高很多,而且能够减少外界环境(光线、人脸表情变化等)对检测结果的影响。该算法缺点是耗时较长,不利于实时性检测。

(2)基于人脸肤色的方法

肤色是人面部的重要特征,不依赖于面部其他器官的细节特征,相对稳定性较强。人脸表情变化、人脸偏向角度变化等情况对确定肤色区域不会产生影响,并且其色彩信息能够区别于大多数背景物体的颜色,从而可以很好地对人脸区域进行分割。因此,基于肤色的人脸检测方法实用性较强。但是由于外界环境的变化,光照强度、光源颜色的变化,对利用肤色特征进行人脸分割会产生很大的影响。因此,需要结合几何形状、运动分析算法,才能很好地在视频中对人脸进行定位。

面部肤色特征一般通过建立肤色模型来描述,Gauss模型、混合Gauss模型以及直方图模型都是常用的肤色模型。检测时根据被测图像像素与肤色模型的相似度,然后结合空间相关性将可能的人脸区域从背景中分割出来,再对分害」出的区域进行几何特征分析,确定其与人脸特征的相关值,从而排除非“人脸”的似肤色区域。

(3)基于人脸统计理论的方法

基于统计理论进行人脸检测的方法是目前人脸检测领域的研究重心。其主要思想是将人脸检测的问题转化为统计学上模式识别的问题,即通过采用统计分析以及机器学习的方法,对人脸样本以及非人脸样本进行训练,得到其各自的特征,从而构建一个人脸分类器。利用该分类器可以完成对人脸的检测,同时可以得到人脸的绝对坐标和大小。现有的主要方法包括有:基于特征空间的方法、摹于人工神经网络的方法、基于支持向量机的方法、基于隐马尔可夫模型的方法以及Boosting方法。

3.3 改进型双重人脸检测

总结3.2节多个人脸检测算法的特点可以发现:基于几何特征的方法虽然容易实现,但易出现人脸的误检漏检,检测效果较差;基于人脸肤色的方法容易受到外界光线强度变化的影响,鲁棒性差,检测正确性低:相比较而言,基于人脸统计理论的方法检测正确率较高,应用比较广泛。其中AdaBoost方法算法计算复杂度低,运算速度快,本系统采用该方法作为人脸检侧的主要手段,并结合双眼定位对原始检测算法进行改进,得到一个双重检测方法,来实现人脸检测功能。

传统的AdaBoost方法是基于统计理论的方法。基于AdaBoost的实时人脸检测算法是将人脸图像用Harr-like特征表示,并引入了“积分图”对图像进行表达,减少了计算特征值所耗费的时间。利用AdaBoost思想,选择若干最能代表人脸的弱特征,从而构造成一个强分类器。基于"Cascade "策略,将训练所得的强分类器按照串联方式连接起来,形成一个级联分类器。通过加载该级联分类器.可以对待检测图像的分类,从而实现人脸检测。该算法能够提高检测人脸的速度,实时性好,检测性能也较好。

Harr-like特征是一种简单的矩阵特征,人脸图像的局部特征主要由相邻矩形区域灰度值的变化来反映。Haar-like特征可以分类为:边缘特征、线性特征、中心特征,其具体的表现形式如图3-1所示。边界特征包含四种:线性特征包含八种;中心特征包含两种。

图3-1 Harr-like特征

引入积分图(Integral Image)这个概念,可以对Haar-like特征值进行快速计算,减少训练样本以及检测人脸所耗费的时间。积分图的主要思想为:构造一个数组,其中的元素

表示从起点到各个点所组成的矩形区域中所有像素之和,并将该数组保存在内存中,当需要计算某个矩形区域中所有像素之和时,再不需要对整个区域进行计算,而是可以直接对该数组中的元素进行索引,从而提高计算速度。

AdaBoost算法应用于人脸检测,主要是对赋予了不同权值的“人脸”与“非人脸”样本进行迭代学习,通过每一轮学习,都得到一个有最高检测正确率的弱分类器。经过N轮训练。选择出正确率最高的N个弱分类器,并对其赋予一个与其正确率相应的权值。然后由这N个弱分类器结合成为一个强分类器。

最终,将得到的强分类器串联起来形成级联分类器一人脸检测器。对每一级强分类器都进行闽值调整,使得每一级都能使大多数的人脸样本通过,而将大部分的非人脸样本剔除。此外,对强分类器进行串联时,应该将相对较重要的特征构成且结构也比较简单的强分类器作为前而几级,这样能够将大量的“非人脸”样本首先剔除掉。这样尽管随着级数的增多,矩形特征数目越来越多,计算量会一直减少,人脸检测的速度也会加快,就能符合系统对实时性的要求。

3.4 双眼定位算法

传统的AdaBoost人脸检测算法,是通过加载训练好的人脸分类器,提取人脸特征。对待测图像进行分析,并通过判断得到结果。然而,选取不同的训练样本,训练所得级联分类器的检测效果也有很大不同。同时,由于样本的选取过程随机性较大,不能包含所有人脸图像,得到的分类器也不能保证可以检测到所有的人脸。而且,本系统需要的是一个正脸分类器,这样就要求训练集中所有正样本为正面人脸,负样本需要包含非正脸的所有情况。通过测试发现,如果训练样本选取不当,系统检测算法就会严重失效,导致误检的情况,例如,在复杂背景下将“非人脸”检测为“人脸”的情况:将偏转角度较大的人脸误检为正面人脸的情况。这些误检情况会对后续的人脸识别产生很大的影响,从而也影响了系统最终结果的准确性。所以,针对本系统的应用需求,需要对该检测方法进行改进。

双眼是人面部的重要的特征,特别是对于正面人脸,双眼的位置以及距离能够很好地描述该人脸的大小,同时能够帮助定位人脸的其他特征。因此,通过对“人脸”图像进行双眼的定位,可有效地截取正面人脸区域,从而也对后续人脸识别的准确率的提高

有着积极的作用。本系统在传统的人脸检测算法基础上加入了双眼定位算法,对检测到的“人脸”进行二次筛选,获取系统识别模块所需的“正脸”。

双眼定位检测算法,只针对由人脸检测得到的“人脸”图像区域进行检测。该算法主要是基于AdaBoost的思想,通过加载双眼分类器"haarcascadees eye.xml",对“人脸”图像再次进行双眼检测。如果不存在双眼特征,则函数返回集合为空,此时认为该“人脸”图片为误检,并将其舍弃;如果存在双眼特征,则函数返回定位到的双眼坐标。然后根据检测得到的双眼坐标,按既定的检测方法判断其是否符合人脸双眼特征的基本准则。这些基本准则主要包括:双眼坐标是否处于“人脸”区域的上方;双眼宽度是否小于“人脸”区域宽度的0.4倍等等。如果符合这些基本准则,则判断该“人脸”为“正脸”,如果不符合,则认为检测得到的并不是人的双眼,即该图像不是人脸,并将其舍弃。经过该算法处理后,能够过滤掉很多侧面人脸以及非人脸图像,提高了“正脸”检测的准确率。

3.5 双重检测算法的实现

支持矢量机(Support Vector Machines)是由V. Vapnik 与其领导的贝尔实验室的小组一起开发出来的一种新的机器学习技术。SVM 的理论基础来自于Vapnik等提出的统计学习理论,它的基本思想是,对于一个给定的具有有限数量训练样本的学习任务,如何在准确性(对于给定训练集)和机器容量(机器可无错误地学习任意训练集的能力)进行折中,以得到最佳的推广性能。

与传统统计学相比,统计学习理论(Statistical Learning Theory或SLT)是一种专门研究小样本情况下机器学习规律的理论。该理论针对小样本统计问题建立了一套新的理论体系,在这种体系下的统计推理规则不仅考虑了对渐近性能的要求,而且追求在现有有限信息的条件下得到最优结果。Vapnik 等人从六、七十年代开始致力于此方面研究,到九十年代中期,随着其理论的不断发展和成熟,也由于神经网络等学习方法在理论上缺乏实质性进展,统计学习理论开始受到越来越广泛的重视。

目前将该理论已经得到了一些应用,比如在光学字符识别等方面,并且获得了比较好的效果,不过由于建立完整的理论体系时间不长,该方法用于人脸检测的很少,尽管SVM 算法的性能在许多实际问题的应用中得到了验证,但是该算法在计算上存在着一

些问题,包括训练算法速度慢、算法复杂而难以实现以及检测阶段运算量大等等。Osun a 等人介绍了一种具体的算法并对人脸识别问题进行了实验。他将样本集分为两个集合B 和N,集合B 作为子问题工作样本集进行SVM 训练,并给出了两阶多项式分类器在人脸识别问题中的应用结果。试验结果表明该方法比Sung 等提出的基于分布特征的学习方法的检测率有所提高,同时计算复杂度下降,提高了检测速度。

第4章人脸识别算法与实现

4.1 设计思想

程序设计的总体思想是通过VS2010编写一个基于OpenCV视觉库的Windows应用程序。首先基于AdaBoost算法的思想,采用windows命令训练多个相近的弱分类器级联成理想的强分类器。然后以OpenCV视觉库的Haartraining函数结构为基础,编写使用训练好的级联分类器进行人脸检测的程序,编写的程序具有读入待检测图片,待检测图片预处理,加载分类器,利用分类器检测人脸,输出检测结果的功能。

4.2 程序设计流程

分类器的训练过程是通过windows命令来完成的,可分为两个阶段:

a.样本集建立:根据人脸数据库样本的属性,设定相应的Windows命令行参数,建立正样本集和负样本集及其相应的样本集说明文件。

b.分类器训练:

利用OpenCV视觉库包含的opencv_createsamples.exe程序建立训练集的VEC文件,在根据训练集的具体数据设定Windows命令行参数,进行人脸检测分类器训练。

根据人脸检测的功能,检测程序的设计流程可详细分为:

a. 读取待检测图像:使用OpenDlg.GetPathName()函数找到指定的待检测图像,并判断待检测图像的格式是否符合程序检测的要求,拒绝可能引起程序崩溃的错误文件格式。

b. 待检测图像预处理:利用OpenCV视觉库中所包含的功能函数,对格式符合要求的待检测图像进行预处理,对原图像进行灰度化处理和直方图均衡化,使图像中可能存在的人脸特征突出,降低图像噪声。

c. 加载分类器:在本地找到并加载指定的分类器文件。

d. 人脸检测:使用cvHaarDetectObjects()函数,快速确定图像中的haar特征,并利用成功加载的分类器对经过预处理的待检测图像进行准确并高效的人脸检测和定位。

OpenCV中已经包含有训练好的分类器文件,我们只需要配置好环境,使用它即可。

4.3 代码编写

4.3.1 载入图片阶段

使用MFC编程函数。penDlg()载入待检测的数字图像源文件,通过图像文件格式设定语句:JPG file format,可以设定所载入的图像为JPG或BMP或二者皆可的文件。

4.3.2 图片预处理阶段

为保证检测的效率和准确性,要预先将载入的图像转化为灰度图像在进行处理,这里使用。penCV库的。vCreateImage()创建首地址并分配存储空间函数再进行处理。

Ipllmage* Gray_Img二cvCreateImage

(cvSize (img->width, img->height), 8, 1);

对图片做过灰度化处理以后,还需要考虑所有待检测图像间的差异,为确保检测结果的准确,特别是面对一些明显偏暗或偏亮的图片时,如果不对待检测图片做出调整图像的局部特征会直接影响检测的结果,因此需要对待检测的图像在预处理阶段做出对比度调整或直方图调整。

由于待检测的图像一般在尺寸,色彩,分辨率等方面不同于训练集中所用到的图像,这些图像的来源不同,背景不同,光照情况导致的亮度也有明显的差异,因此即使对这些待检测图像做对比度调整也不能够得到像调整训练集图像那样统一化的结果,因此待检测图像的预处理不适合做对比度调整,但对这些图像做灰度直方图均衡却能得到理想的效果,灰度直方图均衡化能够让过亮或过暗的图像灰度分布更加均匀,能够更好的突出图像中的人脸。

这一部分的预处理操作使用OpenCV视觉库自带的。vEqualizeHist()函数来完成。

4.3.3 加载分类器并进行检测

将训练好的分类器放在程序跟目录下,并使用下列语句指定分类器名称:

const char* cascade name二"Harr-AdBoost-Facedetection.xml";

在编写程序代码时,可以简单便捷地利用人脸的Haar特征分类器,实现方式也非常简单,运用函数cvHaarDetectObjects()即可,该函数来自OpenCV视觉库,是一种非

常经典的函数,常用于检测某些特定图像目标。

4.3.4 打印检测结果

当程序检测到图片中存在的人脸之后并确定位置之后,会在原图片中按人脸的所占比例以圆形标记在原图片中标出。

参考文献

[1] 周德华,毛敏峰,徐浩.一种多人脸跟踪算法的研究与实现[J],电视技术,2005,275(5):88~90.

[2] 王伟;张佑生;方芳;人脸检测与识别技术综述[J]. 2006,5

[3] 高建坡,王煜坚,杨浩等.一种基于KL变换的椭圆模型肤色检测方法[J].电子与信息学报.2007,V01.29,No.7.

[4] 李刚,高政、人脸自动识别方法综述、计算机应用研究、2003, Vol 8:4-9

[5] 高建坡,王煜坚,杨浩等.一种基于KL变换的椭圆模型肤色检测方法[J].电子与信息学报.2007,V01.29,No.7.

[6] 高建坡.视频序列中的人脸检测与跟踪算法研究.东南大学博士学位论文.2007,3.

[7] 基于五官特征定位的人脸识别技术在防盗门中的应用[D]中国海洋大学:2006

[8] Huang F J,Chen T.Tracking of multiple faces for human—computer interfaces and virtualenvironments[C].IEEE Intl.Conf.on Multimedia and Expo.New York,July 2000.

[9] 张翠平,苏光大人脸识别技术综述中国图像图形学报[J]2000 年11 期

[10] Viola P,Jones M.Rapid object detection using a boosted cascade of simple feature[c].In:Proceedings of IEEE Conference on Computer Vision and Pattern Recognition,Kauai,Hawaii,USA,2001,1:I-51l-518

[11] Viola P.,Jones M. J.、Robust Real-Time Face Detection、International Journal of Computer Vision 57(2), 137-154, 2004

[12] 张宏林. visual C++ 数字图像模式识别技术及工程实践. 北京:人民邮电出版社,2003年4月

附录一人脸检测源程序

#include "cv.h"

#include "highgui.h"

#include

#include

#include

#include

#include

#include

#include

#include

#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";

/* "haarcascade_profileface.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;

}

基于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.sodocs.net/doc/872457673.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.sodocs.net/doc/872457673.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.sodocs.net/doc/872457673.html,/modules/contrib/doc/facerec/facerec_tutorial.html),小弟我尝试翻译一些重要内容。这部分内容是Philipp Wagner写的,他的github:https://https://www.sodocs.net/doc/872457673.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

相关主题