人脸检测设计与实现

2024-07-21

人脸检测设计与实现(精选8篇)

人脸检测设计与实现 篇1

摘要:2015年考试作弊已被列入我国刑法,考生的诚信和考场的纪律也越来越值得关注和重视。因此需要一种合理便捷的方法检查并防止作弊现象的发生。人与人之间的特征有很大区别,生物特征识别技术就是利用人类自身特征来证明身份,相对于传统考试验证身份,该技术有很大的优势和发展前景。本文讨论了4种常用的生物识别技术:指纹考试检测技术、虹膜考试检测技术、人脸考试检测技术、静脉考试检测技术。通过对这些技术的分析与研究,发现人脸识别技术最为有效。本文设计与实现了一种人脸检测与识别方法,实现对考生身份的确认,检测和识别效果较好。

关键词:考试身份识别系统,虹膜识别,人脸识别,Haar特征,识别准确率

高考、研究生入学等大型考试,最大特点就是准备时间长,参考人数多,公民关注度高。以往考试中,教育部一般按照当地学校提供的身份证、照片等个人信息制作准考证。在考试过程中,监考教师要在10分钟之内核查全部考生的身份。随着科技发展,流程化和集体作弊的技术日趋猖獗。替考团队可以伪造考生的信息,修改考生照片,甚至找外貌相似的学生替考。在不熟悉考生的情况下,监考教师很难迅速地判断考生身份,而且每个监考教师的判断标准参差不一,无法保证考试的公平性。

为了提高考试的规范性、权威性和公平性,杜绝考场出现替考的作弊情况,生物识别技术应运而生。生物识别技术利用考生独一无二的特点进行核查。相比传统的人工识别,生物识别速度快、识别率高、客观性强,并且简化了考试核查流程,节约了大量的人力物力,可以从根本上解决考试作弊问题,维护考试的公平。

1 生物识别的主要方法及特点

生物识别技术就是利用人类独一无二且易于识别的信息,用一组特别的算法进行取样核对,分析其特征,得到一组唯一的编码,如果编码与数据库中保存的相同就表明其验证成功,反之验证失败。这种技术跨越了生物领域、物理领域、计算机领域与统计领域,同时借助大数据、云端处理来准确高效地识别,从而实现了智能化和自动化,符合考场的要求和当代社会发展的趋势。

指纹识别是当今社会发展最为迅速的生物检测技术。指纹是最容易残留的个人信息,它包含的特征多,我们的双手至少有5000个可以识别的特征,现在国内外的指纹识别技术大都采用基于细节特征,即采用基于图像处理的指纹识别算法,有两种比较有代表性的指纹识别算法,一种是基于方向滤波增强,并在指纹细化图上提取特征的算法,另一种是直接从指纹灰度图上提取特征的算法[1,2]。由于指纹图像的噪音、皮肤弹性引起的非线性形变,或者在手指出汗或者有污渍的情况下,会出现不易识别的情况,导致识别过程中出现误差,影响识别率等。而且在大型考试中,由于考生人数庞大,因此设计的数据库很庞大,也不利于系统的运行和维护[3,4]。另外它还存在一个重大漏洞,就是当替考者使用指纹膜,甚至更隐蔽的透明指纹贴时,机器可能误判,这样一个不可避免的隐患使指纹不适合作为考场中取证的特征。

静脉识别系统用红外线提取考生静脉的分布及特点并作为判断依据来进行识别。用一组唯一的编码保存其特征值,若特征值与以前考生存储的信息相同,则可以进行判断。首先,静脉识别是活体识别,由于需要采集手部皮下的静脉图像,用红外对手背皮下的静脉图像进行照影,与手背表面的图像特征无关。所以手背表面的污渍或者天气炎热时出汗等带来的障碍均没有影响。另外双手无须接触设备,卫生安全,考生易于接受。在考场中使用静脉识别,安全性特别高。作为活体识别的静脉识别花费的代价太高昂,而且研究复杂。不利于在高考和研究生这样上百万人数的考试中大规模使用和推广,可以在今后选拔性更高且考生不多的情况下使用。

虹膜识别是一种不需要接触考生的生物识别技术。首先抓拍并确定人的整个眼部图像,在特定的算法下抓取虹膜的某些特征,这样就获取到了一组唯一的编码,如果与本地数据库中保存的编码信息一致,则可以判断其为本人。在考场中,虹膜识别无须接触机器就可以检测,方便快捷,仅仅数秒就可以给出结果,并且识别率很高[5]。但虹膜识别很难将图像获取设备的尺寸小型化,设备造价高,无法大范围推广,而且镜头可能产生图像畸变,而使虹膜识别的可靠性降低。

人脸识别需要对考生的面部进行扫描,通过系统特定的算法对其某些特征进行提取来识别人的身份特征[6,7,8]。人的五官、脸型等一些微小的特征都可以作为观察点来鉴别,将这些特征点编排得到一组独特序列,与数据库中已经存储好的数据进行比较,当达到一定阈值,就可以判断为本人,反之亦然。该技术需要考生在报名时提前存储其人脸信息,在考试时,只需简单拍摄一下就可以轻松识别,实现对考生身份的确认,以达到又好又快的检测和识别效果。相比于人工检查的繁琐与不确定性,其整个过程快速高效,很符合考场的环境。

2 一种人脸检测与识别方法

2.1 系统主要功能

该系统采用Visual C++编程实现,主要完成了三个功能:从给定的图像中检测出人脸区域并识别;从给定的视频流中检测出所有出现的人脸信息;检测出摄像头拍摄区域的人脸信息,显示相关信息。

该系统具体实现分为三个阶段:(1)训练。先采集人脸图像组成训练集,识别训练所需要的数据,保存每个人的代表脸;(2)检测识别。当再次输入图像、视频时,利用已知特征,截取图像或视频中的人脸区域;(3)身份认证。最后提取该区域人脸特征,与训练阶段得到的特征相对比,识别并显示相应的人物信息。

在人脸图像的训练阶段,常用的脸部特征包括基于面部的几何特征,基于模板的模板匹配特征,基于数学的主成分分析特征等。在本系统中,用到了两种特征:主成分分析特征和基于统计的Haar特征。其中,Haar特征用于人脸检测部分所需要的分类器,主成分分析特征用于人脸识别阶段。

在人脸检测与识别阶段,采用前一阶段训练得到的Haar特征分类器从输入的图像中截取出人脸区域,然后用前一阶段得到的主成分分析特征对截取到的人脸进行主成分分析,并与训练阶段得到的特征相对比,识别出相应的信息。

本文在统计学习的基础上,对待识别的对象、视频加以处理,从中提取人脸区域,提取所需要的人脸特征,与已经训练过的人脸相比较,识别出人物身份。图1给出了人脸检测与识别系统的组成。

2.2 图像的预处理方法

在图像处理过程中,图像增强是一个十分重要的环节。图像增强就是采用一系列技术来改善图像的视觉效果或将图像转换成一种更适合于人眼观察和计算机自动分析的形式。本文将所有待处理图像转换为灰度图像统一处理。由于受光线影响,人脸区域可能出现阴影或是整体区域显示暗淡。针对这一问题,本文采用直方图均衡化方法对图像进行增强处理。

2.3 人脸区域的检测方法

在实际应用中,输入的图像不可能是规则的截取人脸区域,所以,对于输入图像,应先找出图像中的人脸区域。从一幅图像里提取出人脸区域,就必须遍历图像,计算量将会大大增加。如何从一幅图像中快速准确地找出人脸区域是本文考虑的重要因素。

本文处理的主要是包含人脸以及背景的图像或是一幅图像中也可能含有多个人脸的图像;另外,在处理视频流时,图像较多,对速度要求较高。针对这几种要求,本文采用Haar特征作为人脸检测的依据,它具有检测准确,速度快的特点。

Haar特征分为三类:边缘特征、线性特征、中心特征和对角线特征,组合成特征模板。特征模板内有白色和黑色两种矩形,并定义该模板的特征值为白色矩形像素和减去黑色矩形像素和。Haar特征值反映了图像的灰度变化情况。例如:脸部的一些特征能由矩形特征简单的描述,例如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述特定走向(水平、垂直、对角)的结构。图2给出了特征模型。

对于图2中的A、B和D这类特征,特征数值计算公式为:v=Sum(白)-Sum(黑),而对于C来说,计算公式如下:v=Sum(白)-2*Sum(黑);之所以将黑色区域像素和乘以2,是为了使两种矩形区域中像素数目一致。通过改变特征模板的大小和位置,可在图像子窗口中穷举出大量的特征。图2的特征模板称为“特征原型”;特征原型在图像子窗口中扩展(平移伸缩)得到的特征称为“矩形特征”;矩形特征的值称为“特征值”。矩形特征可位于图像任意位置,大小也可以任意改变,所以矩形特征值是矩形模版类别、矩形位置和矩形大小这三个因素的函数。故类别、大小和位置的变化,使得很小的检测窗口含有非常多的矩形特征。

由于训练样本通常有近万个,并且矩形特征的数量非常庞大,如果每次计算特征值都要统计矩形内所以像素之和,将会大大降低训练和检测的速度。因此引入了一种新的图像表示方法——积分图像,矩形特征的特征值计算,只与此特征矩形的端点的积分图有关,所以无论此特征矩形的尺度变换如何,特征值的计算所消耗的时间都是常量。这样只要遍历图像一次,就可以求得所有子窗口的特征值。

Adaboost是adaptive boost的缩写,它是一种迭代算法。其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。其算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改过权值的新数据集送给下层分类器进行训练,最后将每次训练得到的分类器融合起来,作为最后的决策分类器。使用Adaboost分类器可以排除一些不必要的训练数据特征,并将重点放在关键的训练数据上。

2.4 人脸识别方法

对于一张截取的人脸区域图,由于受拍摄角度、光照、表情、饰物、年龄等的影响,也会表现出很大的差异;对于这些差异,如何提取特征,准确识别出相应的人脸,是人脸识别研究的重点。

在人脸识别阶段,本文所要处理的是检测阶段提取的规则的人脸,且识别的人脸一定是事先采集过的人脸图像,在训练集中对所有人脸提取PCA特征,并保存。识别时,采用主成分分析的方法提取待识别人脸特征,并与训练阶段的人脸特征相比较,识别出相应的人脸。

完整的PCA人脸识别包括如下步骤:人脸图像预处理、读入人脸库、训练形成特征子空间、将训练图像和测试图像投影到上一步骤中得到的子空间上、选择一定的距离函数进行识别。下面详细给出整个过程。

(1)读入人脸库。归一化人脸库后,将库中的每人选择一定数量的图像构成训练集,其余构成测试集。设归一化后的图像是n×m,按列相连就构成N=n×m维矢量,可视为N维空间中的一个点,可以通过K-L变换用一个低维子空间描述这个图像。

(2)计算K-L变换的生成矩阵。所有训练样本的协方差矩阵为(以下三个等价):

是平均人脸,M是训练人脸数,协方差矩阵CA是一个N×N的矩阵,N是xi的维数。为了方便计算特征值和特征向量,一般选用第2个公式。根据K-L变换原理,所求的新坐标系即由矩阵A·AT的非零特征值所对应的特征向量组成。直接求N×N大小矩阵CA的特征值和正交归一特征向量是很困难的,根据奇异值分解原理,可以通过求解AT·A的特征值和特征向量来获得AT·A的特征值和特征向量。在计算得到CA的所有非零特征值从大到小排序,1≤r<M及其对应的单位正交特征向量后,可以得到特征空间,从而可以计算一幅图像X在特征空间上的投影系数(也可以理解为X在空间U中的坐标):

(3)识别。利用公式(4),首先将所有训练图像进行投影,然后对于测试图像也进行同样的投影,采用判别函数对投影系数进行识别。

2.5 实验结果与分析

本文的具体步骤主要包括训练阶段、识别阶段。训练阶段:在CAS-PEAL人脸数据库中选取40个人的人脸图像,包括20个男性和20个女性,每个人选取的有不同表情的、带有饰物、不同光照的、正常表情的一共12幅图像,共480幅。其中选取240幅(每人6幅)作为训练对象,在这6幅图像中选取一幅作为这个人的代表图像。训练过程分为两步:

(1)对这240幅图像做人脸检测、加入到人脸库、输入个人信息、输入密码,这些数据都将作为识别阶段的识别依据,所输入的个人信息将写入单独文件保存;

(2)对这240个归一化的人脸进行K-L变换,提取这240幅人脸的平均脸、特征向量矩阵,并把这240幅人脸图像投影到特征向量矩阵,保存特征值。

识别阶段:

(1)读入图像,本文选择灰度图像作为处理对象,所以在接收到一幅图像时,首先转换为灰度图像;

(2)预处理。本文采用直方图均衡化方法处理减弱光线带来的影响,通过把原图像的直方图通过变换函数修正为分布比较均匀的直方图,从而改变图像整体偏暗或整体偏亮,灰度层次不丰富的情况;

(3)人脸检测。利用训练阶段所得的Haar特征分类器,检测图像中的人脸区域并标记,同时,将检测到的人脸区域截取保存,将截取区域显示为“当前脸”。当一幅图像中含有多幅人脸时,检测标记出多个人脸,点击“下一个人脸”时,则可识别一幅图像中不同的人脸;

(4)人脸识别。点击“识别”,本文将识别当前显示在“当前脸”区域的人脸。提取当前检测到的人脸,先做预处理,然后进行K-L变换,投影到训练阶段所得的特征脸矩阵,得到的特征值与训练阶段的特征值求欧氏距离。将最小的欧氏距离对应的人脸作为识别人脸,并显示出对应的代表图像。

本文在Visual C++平台,利用MFC库编程实现。鼠标左键双击界面,显示运行主界面,主界面中包括当前处理的步骤等。如图3所示,按钮“打开图像”、“打开视频”、“打开摄像”分别打开不同的数据来源,对于这三种数据来源,有其不同的用处。图像将主要用于构建人脸数据库、输入个人信息、输入个人代表图像、识别当前图像人物身份。对于视频文件,本文主要监测视频中出现的人物,并显示其相应的信息。对于摄像头采集到的数据,主要对其进行认证登陆处理。其中,视频文件、摄像头实时视频文件也可转化为图像来源。以下将对三种不同来源的数据处理过程分别加以说明。

当处理对象为图像时,打开的图像显示在“待检测图像区域”,当点击“人脸检测”时,将检测显示在“待检测图像”区域的图像,检测完成后,以方框的形式标记在待检测图像中。此时,若图像中没有检测到人脸区域,将弹出“未检测到人脸”的提示框;当检测到人脸区域时,标记并将显示在“检测到的人脸”区域,这个是归一化的人脸,是识别的具体对象。此时,若检测到多幅人脸,点击“下一个脸”按键,可依次把各个人脸显示在“检测的人脸”区域。人脸检测结果如图4所示。

此时,若点击“添加到库”,则将“检测到的人脸”区域显示的人脸图添加到人脸库,同时弹出个人信息输入界面,提示输入个人信息。输入完成后,点击确定,系统自动保存个人信息,并把该人脸图加入到人脸库。当添加新的人脸后,一定要重新训练,即点击“训练”按钮。在图4界面时,当点击识别按钮时,本文将对检测到的人脸进行识别,并将识别结果显示在个人信息区域,给出个人姓名,以及识别到的具体图像。如图5所示。

当打开的数据是视频文件时,本文弹出“Vedio”视频播放窗口,当检测到视频文件中的人脸区域时,本文将视频截图显示在主界面的“待检测图像”区域。然后对此图像按照图像人脸检测方法进行,并弹出所有检测到的人物信息。如图6所示。

本文完成了对图像、视频文件、实时视频人脸检测提取、人脸识别,人脸识别平均正确率为90%,具有较高的安全性。关于其缺陷可能的原因如下:

(1)Haar特征训练时,针对的是正常人脸区域,而且光线较好。当遇到戴有饰物或是光线变化的人脸时,检测效果不够理想;

(2)主成分分析的方法对于表情变化较大的人脸,或是人戴有饰物时,容易识别错误,这可能是训练人脸数量有限造成的。

3 结论

本文对各个领域中广泛使用的4种生物识别技术进行了剖析,设计了人脸防作弊检测技术。本文将多种特征结合起来进行检测、识别,先用Haar特征与Adaboost分类器相结合的方法对人脸与非人脸区域加以区分,实现对人脸的检测;而后对检测到的人脸进行分割处理,最后利用主成分分析的方法对人脸进行识别。

参考文献

[1]刘成,彭进业.基于多任务学习的自然图像分类研究[J].计算机应用研究,2012,29(7):2773-2775.

[2]毕雪芹,苏艳娟,王琪.嵌入式指纹识别系统的设计及试验研究[J].国外电子测量技术,2015,2:50-53.

[3]宋思瑶.指纹识别在学校考试系统中的应用[D].吉林大学,2011.

[4]马建敏.基于指纹识别的考试管理系统设计与实现[D].河北科技大学,2011.

[5]陈晴,易开军.现代虹膜识别技术在考生身份验证系统中的应用初探[J].工业和信息化教育,2015,8:81-85.

[6]李鑫,张俊.基于深度信念网络和多任务学习的人脸识别[J].电脑知识与技术,2016,12(17):165-168.

[7]刘向东.基于PCA算法人脸识别的MATLAB实现[J].电脑知识与技术,2016,12(12):193-194.

[8]袁正海.人脸识别系统及关键技术研究[D].南京邮电大学,2013.

人脸检测设计与实现 篇2

摘要

随着对社会公共安全的需求提高,结合发展的现代计算机技术,安防产品向PC化靠拢。基于图像识别的智能视频监控以其突出的轻、巧、小、一体化等特点,逐渐取代传统监控手段。

而智能视频监控的关键技术则是依赖于视频内容的入侵检测。此课题在完成系统分析、设计的基础上,进行了系统的实现,在基于RGB颜色处理检测入侵对象的同时,提供色差、限差两个参数设定提高系统适应性,还特别开发了发送报警邮件的功能,实现了远程实时监控。

关键词:智能视频监控报警系统,图像对比,RGB色差模式,SMTP

I

ABSTRACT

ABSTRACT With the increasing demand for social and public security, combined with the development of modern computer technology, security products are more closer to the PC.Intelligent video monitoring based on image recognition is gradually replacing the traditional monitoring measures with prominent characteristics,such as its handiness, subsize, strong move to integration and so on.The key technology of intelligent video surveillance, intrusion detection depends on the video content.This subject intrusion detection based on video content analysis, the integration of real-time alarm monitoring technology.This project implements the system based on the integration of intrusion detection of video content,the analysis, real-time alarm monitoring technology.Keywords: Intelligent Video Surveillance and Alarm System,image contrast,RGB color mode,SMTP

II

目录

目 录

第一章 引言....................................................................................................................1 1.1 1.2 研究背景..........................................................................................................1 视频监控发展历史和国内外研究现状..........................................................1 1.2.1 视频监控发展历史......................................................................................1 1.2.2 国内外研究现状..........................................................................................2 1.3 1.4 2.1 2.2 论文的主要内容及意义..................................................................................2 论文组织..........................................................................................................3 需求分析..........................................................................................................4 总体设计..........................................................................................................5 第二章 需求分析与总体设计........................................................................................4 2.2.1 视频监控系统各模块设计..........................................................................7 2.2.2 关键数值设定说明......................................................................................8 2.3 3.1 本章总结..........................................................................................................9 智能视频监控技术.........................................................................................11 第三章

关键理论及技术.............................................................................................11 3.1.1 背景减除(Background Subtraction)..........................................................12 3.1.2 时间差分(Temporal Difference)................................................................12 3.1.3 光流(OpticalFlow).....................................................................................13 3.1.4 运动向量检测法........................................................................................14 3.2 3.3 RGB色彩模式...............................................................................................14 SMTP和名称空间简介.................................................................................15 3.3.1 SMTP简介.................................................................................................15 3.3.2 名称空间简介............................................................................................16 3.4 VFW体系结构简介......................................................................................17 3.4.1 VFW下AVICap基本功能.......................................................................18 3.4.2 常用的数据结构........................................................................................19 3.4.3 回调函数....................................................................................................20

III

目录

3.5 3.6 4.1 4.2 WINDOWS API简介........................................................................................21 本章小结........................................................................................................22 软件总体实现................................................................................................23 软件各模块说明............................................................................................23 第四章 软件实现..........................................................................................................23 4.2.1 视频内容捕获实现....................................................................................23 4.2.2 视频内容识别实现....................................................................................27 4.2.3 报警功能的设计与实现............................................................................33 第五章 测试..................................................................................................................42 5.1 5.2 5.3 系统测试相关理论........................................................................................42 摄像头监控程序软件描述............................................................................43 功能测试........................................................................................................44 5.3.1 启动摄像头功能测试................................................................................44 5.3.2 监控对比图形的设置测试........................................................................44 5.3.3 视频敏感区入侵测试................................................................................45 5.3.4 邮件发送测试............................................................................................46 5.4 各项参数性能测试........................................................................................51 5.4.1 色差设定测试............................................................................................51 5.4.2 限差设定测试............................................................................................54 5.4.3 延迟时间设定测试....................................................................................56 5.4.4 监控间隔设定测试....................................................................................56 5.5 测试结果分析及说明....................................................................................56 第六章 总结和展望......................................................................................................57 参考文献........................................................................................................................58 致谢................................................................................................................................59 外文资料原文................................................................................................................60 外文资料译文................................................................................................................62

IV

第一章 引言

第一章 引言

1.1 研究背景

一直以来,各类违法违规事件的发生猝不及防。同时随着科技的发展,违法违规的手段也趋于复杂,给正常的维护侦破工作带来诸多不便。社会的进步对安全防范的要求和规范也更高。依赖于传统的侦破人员勘察现场的手段已经不能满足当今社会的发展需求。

因此,智能视频监控系统进入了人们的视线,也将是未来安全防范主要依赖的工具和手段。首先认识一下智能视频监控的概念。智能视频监控是利用计算机视觉技术对视频信号进行处理、分析和理解,在不需要人为干预的情况下,通过对序列图像自动分析对监控场景中的变化进行定位、识别和跟踪,并在此基础上分析、判断目标的行为。

随着计算机网络技术、计算机图形技术、多媒体处理技术、通信技术的普及和快速发展,视频监控系统的数字化、网络化、智能化程度得到进一步得加强。也就意味着视频敏感区域的入侵检测也向着多维度的方向发展,并且具备了更多功能。在视频监控系统不断发展的今天,越来越多的视频监控产品向轻、巧、小的方向发展。

1.2 视频监控发展历史和国内外研究现状 1.2.1 视频监控发展历史

随着监控行业的飞速发展,视频监控系统的发展大致经历了三个阶段。第一代模拟时代:视频是以模拟方式进行处理,视频信号由同轴电缆进行传输,其控制方式也以模拟信号的形式进行处理;第二代为半数字式时代:则仍采用视频信号由同轴电缆进行传输,而控制主机或硬盘录像机(DVR)则进行数字处理与存储;第三代是全数字式时代:视频信号从采集开始即为数字信号,以网络系统为传输媒介,基于网络TCP/IP协议,采用流媒体计算机控制技术,具有多

电子科技大学学士学位论文

路复用传输,以网络虚拟矩阵控制方式,实现强大的视频监控管理控制平台。[1]

摄像机1运动目标分割运动目标分割运动目标检测运动目标检测运动目标跟踪运动目标跟踪行为分析与理解行为分析与理解多路数据融合及警报信息发布摄像机2 图1-1 视频监控系统处理流程

1.2.2 国内外研究现状

国外的研究主要有[2]:在美国国防高级研究计划局(DARPA)资助下,卡内基梅隆大学、戴维SARNOFF研究中心等几家著名研究机构合作,研制了视频监视与监控系统VSAM。VSAM的目标是为未来城市和战场监控应用开发的一种自动视频理解技术,用于实现未来战争中人力监控费用昂贵、非常危险或者人力无法实现等场合下的监控。英国的雷丁大学(University of Reading)开展了对车辆和行人的跟踪及其交互作用识别的相关研究;IBM与Microsoft等公司也正逐步将基于视觉的手势识别接口应用于商业领域中;Maryland大学的实时视觉监控系统W4不仅能够定位人和分割出人的身体部分,而且通过建立外观模型来实现多人的跟踪,可以检测和跟踪室外环境中的人并对他们之间简单的交互进行监控。

国内的研究机构主要有:中科院北京自动化研究所下属的模式识别国家重点实验室,他们对交通场景的视觉监控(基于三维线性模型定位、基于扩展卡尔曼滤波器的车辆跟踪算法)、人的运动视觉监控(基于步态的远距离身份识别)和行为模式识别(提出了对目标运动轨迹和行为特征的学习的模糊自组织神经学习算法)进行了深入研究,取得了一定的成果。此外,国内还有一些高校也进行了这方面的研究,如上海交通大学、北京航空航天大学、北京理工大学等。

1.3 论文的主要内容及意义

智能视频系统要解决的问题有两个:一个是将安防操作人员从繁杂而枯燥的长时间观察屏幕的任务重解脱出来,由机器来完成这部分工作,减少人力投入;另外一个是为在海量的视频数据中快速搜索到想要找的的关键数据,大大降低不报、误报、错报的概率。

意义可以从以下几方面来说:

第一章 引言

一是基于人们对安防产品越来越高的要求。对于愈加复杂的社会环境,人们需要更快速、高效、可靠的手段维护自身、社会的安全。

二是在硬件和软件基础越发夯实的条件下,很好地将传统的视频监控和软件设备衔接到一起,发挥两者的长处,触发了视频监控系统性能从根本上提高。

三是视频监控的一体化要求,从根本上简化设备,降低成本,减少人力、物力、财力等各方面的投入。

本文需着重考虑并解决的问题有以下三个大方面:1.视频内容的获取;2.视频内容的识别;3.报警方式的实现。最终实现小型一体化摄像头监控程序,完成对视频监控中异常行为的智能识别、提前发现和自动报警的目标,将在下面的章节中详细论述。

1.4 论文组织

本文以建立一个基于视频敏感区入侵检测的一体化智能视频监控系统为目标,实现对侵入视频敏感区物体的检测与跟踪,并根据所得到的判断结果启动实时的报警信息。提供单个色差、总色差值两种维度的入侵物体辨识,增加系统针对不同环境的可移植性。

本文共分为六章,各章节的主要内容如下:

第一章 引言。论述了本文的研究背景、目的、意义等,分析了目前国内外的发展和研究状况,并提出了相应的解决方案。随后给出了本文的主要研究内容和各章节的安排。

第二章 需求分析与总体设计。主要介绍了软件的需求分析与总体设计,以流程图的方式展现了软件相关的实现流程。

第三章 关键理论技术。主要论述了设计与实现摄像头监控软件涉及到的一些相关理论与关键技术。

第四章 软件实现。在VFW下,提供视频数据连接、视频内容捕获、并实现从视频上捕获并保存图像文件的功能,完成集监控、识别、报警为一体的小型视频监控系统软件的设计。

第五章 软件测试及应用。提供关于本系统开发的基本的性能要求、初步设计和系统基本功能需求的信息,以及软件总体测试的依据。

第六章 总结和展望。

电子科技大学学士学位论文

第二章 需求分析与总体设计

2.1 需求分析

视频监控是一个很广泛的概念,那么其中涵盖的知识点和信息点也是非常丰富的。作为现代安防的主要手段之一,视频监控有着非常良好的发展前景。本视频敏感区域的入侵检测系统只是视频监控中很小的一个部分,实现的功能也相较初级。本系统从最基本的功能入手,在结合现代计算机技术,实现了基于颜色的视频内容入侵检测、识别。因为是基于实时的检测报警,此系统由于时间和能力各方面的限制,暂不提供对视频内容的录制功能。

智能化、数字化、网络化是视频监控发展的必然趋势,智能视频监控的出现正是这一趋势的直接体现。智能视频监控分析是计算机视觉领域一个新兴的应用方向和备受关注的前沿课题,结合了计算机科学、机器视觉、图像处理、模式识别、人工智能等多学科。智能视频监控将一改传统监控的被动监视、事后查录像的尴尬境地,可以为用户提供更多高级的视频分析功能,可以极大的提高视频监控系统的能力,并使视频资源能够发挥更大的作用[3]。

2.1.1 功能需求

传统的视频监控系统仅仅提供了捕获、存储和发布视频的功能,监控的任务大部分是由人来完成的。通常,人工监控是枯燥和乏味的工作,需要安保人员投入比如常工作更高的注意力。如果监控的事件不经常发生,由于人不能长期集中注意力,易疲劳的原因,这种事件往往容易被疏忽。同时,数据资源的存储问题也尤为突出,随着时间的推移,视频数据也与日俱增,存储和查找变得尤为困难。

而智能视频监控作为一个新型的监控系统,在传统视频的优势上保持外,还需要克服传统视频监控存在的诸多问题,软件需要考虑的问题如下:

1)监控前端:用于采集被监控点的监控信息,并可以配备报警设备。

2)管理中心:承担所有前端设备的管理、控制、报警处理、录像、用户管理等工作。各部分功能分别由专门的服务器各司其职。

3)监控中心:用于集中对所辖区域进行监控,包括电视墙、监控客户终端群组

第二章 需求分析与总体设计

成。系统中可以有一个或多个监控中心。智能识别入侵对象,大大降低漏报、误报的概率。

4)PC客户端:在监控中心之外,也可以由PC机接到网络上进行远程监控。提高设备的可移植性,对复杂环境的适应性,避免多次开发的成本投入。

2.1.2 开发环境

此次设计在Windows XP sp2操作系统下采用Microsoft Visual Studio 2010进行开发,所选用的开发语言是C#,并结合MFC 进行编程, 目标框架是.NET Framework。这种开发工具和开发语言是当今比较流行的[4]。

Visual Studio是微软公司推出的开发环境。是目前最流行的Windows平台应用程序开发环境。Visual Studio 2010同时带来了 NET Framework 4.0、Microsoft Visual Studio 2010 CTP(Community Technology Preview--CTP),并且支持开发面向Windows 7的应用程序。除了Microsoft SQL Server,它还支持 IBM DB2和Oracle数据库。

支持 Windows Azure,微软云计算架构迈入重要里程碑。Visual Studio 2010有如下特点:

1.助力移动与嵌入式装置开发,三屏一云商机无限。

2.实践当前最热门的 Agile/Scrum 开发方法,强化团队竞争力。

3.升级的软件测试功能及工具,为软件质量严格把关。

4.搭配 Windows 7,Silverlight4 与 Office,发挥多核并行运算威力,5.创建美感与效能并重的新一代软件。

开发语言C#:C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。

2.2 总体设计

研究和分析了目前视频监控系统的特点和针对目前用户对视频监控在功能上的相关需求,本文设计了一款实时视频监控软件。该软件主要实现了视频数据连

电子科技大学学士学位论文

接、视频内容识别、从视频上捕获并保存图像文件的功能,完成集监控、识别、报警为一体的任务。主要涵盖以下功能:

视频显示与控制部分:对视频图片的显示与控制。 控制摄像头的开启  打开摄像头监控视窗  启动摄像头监控

视频内容识别:识别视频内容的参数设置,是视频内容识别的主要手段。 色差  限差  监控间隔

报警部分:入侵检测报警联动  发出警音  发送邮件

邮件部分:邮件相关设置。 设置邮件信息  发送入侵邮件

系统结构图如下图所示:

摄像头监控程序前台显示部分报警方式选择后台部分数值设定操作项发出警号发出邮件监控对比图形保存设置邮件信息关于程序色差设定限差设定监控间隔延迟时间启动摄像头保存当前截图对设比置图监形控发送测试邮件开始监控 图2-1 系统结构图

第二章 需求分析与总体设计

2.2.1 视频监控系统各模块设计

视频监控系统主要分为两个功能模块:视频监控、报警联动。主要由以下四部分组成:

1、产生图像的摄像机或成像装置(前端设备);

2、图像的传输与转换设备(传输设备);

3、图像的处理与控制装置(主控设备);

4、终端图像显示记录装置(显示记录设备)。

监控端包括PC机、麦克风、摄像头。PC机用于控制采集设备,接受采集信息,编码压缩后传输到服务器,同时接受客户端的控制信息、图像信息,并传送给PC机进行编码后传送给服务器。由于是微型一体化的实时报警系统,图像传输与转换设备就忽略掉了,大大节省了视频监控系统的成本投入。

产生图像的摄像机或成像装置是基于笔记本自带的摄像头。服务器为一台连接到Internet网的高性能计算机,用于接受监控端发过来的图片信息、响应客户端的请求,并将监控端的视频截图实时传送给客户端。传输网络为Internet,提供客户及与服务器之间额信息通路。客户端为连接到Internet的普通计算机,通过网络与服务器进行通信,便于用户随时上网查看现场监控的情况。

本系统设计应用于无人监管的远程网络监控,具有视频移动报警功能,即在所连接的任何一个摄像头的监控区中,若出现物体的移动变化即可启动报警、发送入侵邮件等报警设备。用户可以获得服务器验证通过后的任何一台联网PC机上进行监控区域的查看,还可以多个合法用户同时查看。当用户在报警结束后查看系统,则可从录像的图片文件中得到异常情况发生时监控区域的状况。

电子科技大学学士学位论文

进入系统成功加载动态链接库Y成功打开视频设备Y注册回调函数NN错误处理入侵目标检测与跟踪退出系统发生异常事件Y报警操作及发送报警信息N 图2-2 系统处理流程图

2.2.2 关键数值设定说明

在程序主界面,从提高监控系统的整体性能、提高对环境的适应能力出发,提供了四个参数的设置,分别为色差、限差、监控间隔和监控延迟。下面就这四个数值做简单的分析。

色差设定:主要是为了防止因为细微的环境变化而导致误报的现象。因为我们日常所处的情况,很容易受到天气和时段的影响。一天的不同时间段以及不同的天气状况,摄像头内的画面是会在一定范围内波动的。可以根据用户的需要,灵活设定这些参数,能更好地为用户服务。增大色差容差能力,将更模糊外界不可抗因素对视频内容的影响。当图像变化的颜色差值大于该色差值时,判断有可

第二章 需求分析与总体设计

能出现变化,该值越小则要求图像变化越小,即要求越严格。色差是该视频监控系统稳定性和灵敏性的关键指标。因为考究到该系统将会用到各种复杂的环境中,用户可以根据自身的需求设定合适的数值。同时,由0-100的变化指标,对环境变化要求不高的用户就可以将数值调大,避免画面因微小的污染造成误报。而对环境纯度要求较高的用户,对于微小的画面污染也要纠察出来的话,可以适当将数值调小。

限差设定:限差用于控制图像中变化比率ratio,当超过该值时开始报警,即当图像出现ratio%的变化时程序认为出现异常,该值越小要求图像变化越小。限差设定主要是用于防止一些细微的变化引发不必要的误报发生。适当提高限差值,能过滤掉一些无关紧要的画面污染。

监控间隔设定:即每隔多长时间进行一次监控分析。最小值为100ms,值越小,其监控分析的频率越高,同时CPU使用率越高。用户可以根据自己的需求设定相应的间隔值。

延长时间设定:延长时间值表示点击“开始监控”按钮后延长多少时间后开始监控。如果设置延长时间为0,则表示点击“开始监控”按钮后马上开始进行监控。设置该参数主要是用于一些延长监控的情况,如现在开启监控,但是人要出门,出门大概需要30s,则设置延长时间为30s,30s后程序自动进入监控状态。

同时在主程序界面还有两个选项需要用户选择:单个色差、总体色差。因为该监控系统主要是基于RGB值来实现对入侵物体的识别。因此就存在两个维度的对比,单个色差指分别比较RGB颜色差值,总色差值指比较RGB的总差值。

图2-3 相关参数设置

2.3 本章总结

本章研究和分析了视频监控系统的相关需求,对该程序的开发环境做了简单

电子科技大学学士学位论文 的介绍。本章的重点在于设计和介绍摄像头监控软件的主要功能模块与总体设计。用框图的形式展示了系统的整体结构,并对在设计软件中发挥重要作用的关键数据如色差限定、限差设定、监控间隔设定进行了简单的分析。并针对软件设计过程中遇到的问题,提出了相应的解决方案。

基于对此次课题的需求分析重新整合梳理,为下面课题的实现打下了良好的基础。

第三章 关键理论及技术

第三章

关键理论及技术

3.1 智能视频监控技术

IEEE在图像的智能分析等方面有比较大的成果,比如运动检测、人脸识别、目标跟踪等。运动检测是指在指定区域能识别图像的变化,检测运动物体的存在并避免由光线变化带来的干扰。由于背景图像的动态变化,如天气、光照、影子及混乱干扰等的影响,使得运动检测成为一项相当困难的工作。早期的运动检测是对编码后产生的I帧进行比较分析,通过视频帧的比较来检测图像变化。目前常用的方法有背景减除(Background Subtraction)、时间差分(Temporal Difference)、光流(OpticalFlow)、运动向量检测法等[5]。

智能监控系统各组成部分的说明如下:

(1)监控前端:用于采集被监控点的监控信息,并可以配备报警设备。监控前端可分为两类:

①普通摄像头+视频服务器。普通摄像头可以是模拟摄像头,也可以是数字摄像头。原始视频信号传到视频服务器,经视频服务器编码后,以TCP/IP协议通过网络传至其他设备。

②网络摄像头。网络摄像头是融摄像、视频编码、Web服务于一体的高级摄像设备,内嵌了TCP/IP协议栈。可以直接连接到网络。

(2)管理中心:承担所有前端设备的管理、控制、报警处理、录像、录像回放、用户管理等工作。各部分功能分别由专门的服务器各司其职。

(3)监控中心:用于集中对所辖区域进行监控,包括电视墙、监控客户终端群组成。系统中可以有一个或多个监控中心。

(4)PC客户端:在监控中心之外,也可以由PC机接到网络上进行远程监控。

(5)无线网桥:无线网桥用于接入无线数据网络,并访问互联网。通过无线网桥,可以将IP网上的监控信息传至无线终端,也可以将无线终端的控制指令传给IP网上的视频监控管理系统。目前常用的无线网络为CDMA网络[6]。

运动目标检测(Moving-Objectives Detecting)作为智能视频监控系统重要的组成部分,是指从视频流图像序列中实时提取目标运动变化的区域,检测出图像序列中目标的运动信息,滤除与运动目标无关的背景的过程。运动目标检测的算

电子科技大学学士学位论文

法依照目标与摄像机之间的关系可以分为静态背景下运动检测和动态背景下运动检测。下面就背景减除(Background Subtraction)、时间差分(Temporal Difference)、光流(OpticalFlow)、运动向量检测法这四种方法做简单的介绍。

3.1.1 背景减除(Background Subtraction)背景减除方法是目前运动检测中最常用的一种方法,它是利用当前图像与背景图像的差分来检测出运动目标的一种技术。它一般能够提供相对来说比较全面的运动目标的特征数据,但对于动态场景的变化,如光线照射情况和外来无关事件的干扰等也特别敏感。

实际上,背景的建模是背景减除方法的技术关键。最简单的背景模型是时间平均图像,即利用同一场景在一个时段的平均图像作为该场景的背景模型。由于该模型是固定的,一旦建立之后,对于该场景图像所发生的任何变化都比较敏感,比如阳光照射方向,影子,树叶随风摇动等。大部分的研究人员目前都致力于开发更加实用的背景模型,以期减少动态场景变化对于运动目标检测效果的影响[9]。

首先,为背景中每个像素点进行统计建模。最简单的背景模型是时间平均图像,即利用同一场景在一个时段的平均图像作为该场景的背景模型。由于该模型是固定的,一旦建立之后,对于该场景图像所发生的任何变化都比较敏感,比如阳光照射方向、影子、树叶随风摇动等。大部分的研究人员目前都致力于开发更加实用的背景模型,以减少动态场景变化对运动目标检测效果的影响。

其次,用当前图像与己知背景图像比较,找出在一定阈值限制下当前图像中的背景像素点。定义当前图像为F(i, j,t),背景图像为B(i, j,t)。则差分图像可以表示为:d(i, j,t)=| F(i,j,t)−B(i,j,t)|

最后,对图像进行二值化处理,从而得到前景图像(运动目标)的集合。设x(i,j)为差分图像中任何一点,Th为灰度阀值,二值化过程可描述为:要保证一个视频监控系统长期稳定的运行,背景差分法就要具备很强的鲁棒性。背景差分法的难点在于如何建立背景模型和保持背景模型更新,用以弥补由动态场景中的光线变化等因素带来的不利影响[7]。

3.1.2 时间差分(Temporal Difference)时间差分(Temporal Difference 又称相邻帧差)方法充分利用了视频图像的特征,从连续得到的视频流中提取所需要的动态目标信息。

第三章 关键理论及技术

在一般情况下采集的视频图像,若仔细对比相邻两帧,可以发现其中大部分的背景像素均保持不变。只有在有前景移动目标的部分相邻帧的像素差异比较大。时间差分方法就是利用相邻帧图像的相减来提取出前景移动目标的信息的。让我们来考虑安装固定摄像头所获取的视频。我们介绍利用连续的图像序列中两个或三个相邻帧之间的时间差分,并且用阈值来提取出视频图像中的运动目标的方法。我们采用三帧差分的方法,即当某一个像素在连续三帧视频图像上均有相当程度的变化(及大于设定的阈值时),我们便确定该像素属于运动目标。时间差分运动检测方法对于动态环境具有较强的自适应性,但一般不能完全提取出所有相关的特征像素点,在运动实体内部容易产生空洞现象,只能够检测到目标的边缘。而且,当运动目标停止运动时,一般时间差分方法便失效[8]。

3.1.3 光流(OpticalFlow)基于光流方法(Optical Flow)的运动检测采用了运动目标随时间变化的光流特性,如Meyer 等作者通过计算位移向量光流场来初始化基于轮廓的跟踪算法,从而有效地提取和跟踪运动目标。该方法的优点是在所摄场所运动存在的前提下也能检测出独立的运动目标。然而,大多数的光流计算方法相当复杂,且抗噪性能差,如果没有特别的硬件装置则不能被应用于全帧视频流的实时处理。

当物体与背景发生相对运动时,运动物体在被观测图像上对应点的亮度模式也在运动,这种像素点运动的瞬时速度场就是光流。光流表达了图像的变化,由于它包含了目标运动的信息,因此可被观察者用来确定目标的运动情况。由光流的定义可以引申出光流场,它是指图像中所有像素点构成的一种二维(2D)瞬时速度场,其中的二维速度矢量是景物中可见点的三维速度矢量在成像表面的投影。所以光流不仅包含了被观察物体的运动信息,而且还包含有关景物三维结构的丰富信息。对光流的研究成为计算机视觉及其相关研究领域中的一个重要部分。[8]

光流法的基本原理可描述如下:赋予图像中的每个像素一个速度矢量,形成一个图像运动场,根据各个像素的速度矢量特征,可以对图像进行动态分析。如果图像中没有运动目标,则光流矢量在整个图像区域是连续变化的,当物体和图像背景存在相对运动时,运动物体所形成的速度矢量必然和区域背景速度矢量不同,从而检测出运动物体的位置。

电子科技大学学士学位论文

3.1.4 运动向量检测法

运动向量检测法适合于多维变化的环境,能消除背景中的振动像素,使某一方向的运动对象更加突出的显示出来。但是,运动向量检测法也不能精确地分割出对象。动态视频目标跟踪技术在传统监控系统中,目标跟踪是由监控人员手工操作来完成。由于所有的目标的运动特性是非线性的,其速度和方向都在随时发生改变。即使目标的速度、方向不变,但它与摄像机的距离也在变化,从而引入很强的非线性因素,因而用人工操作的方法来实现控制非常困难。智能化视频监控技术提供有效的目标自动跟踪的工具,在用计算机自动处理视频流的过程中,如发现和跟踪感兴趣的目标,就提示监控人员加以关注,并可以控制灵巧快球摄像机,对移动目标实现自动跟踪。

3.2 RGB色彩模式

在一个典型的多媒体计算机系统中常常涉及到用几种不同的色彩空间表示图形和图像的颜色,以对应于不同的场合和应用。因此数字图像的生成、存贮、处理及显示时对应不同的色彩空间需要作不同的处理和转换。

RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色。RGB色彩模式使用RGB模型为图像中每一个像素的RGB分量分配一个0-255范围内的强度值。RGB图像只使用三种颜色,就可以使它们按照不同的比例混合,在屏幕上重现16777216(256 * 256 * 256)种颜色。其中任何参数发生改变,颜色也与之对应的变化。因此可以用RGB模型实现此次入侵检测的功能。

人的眼睛通过三种可见光对视网膜的锥状细胞的刺激来感受颜色。这种理论就是使用红、绿、蓝三种基色来显示彩色的基础,称之为RGB色彩空间模型。以R、G、B三个参数为坐标,我们可以得到如下的一个单位立体方体描述RGB颜色模型。红、绿、蓝是相互正交的坐标轴,每个坐标轴都量化为0[9]。

第三章 关键理论及技术

Y黄(0,0,1)灰度红(0,1,1)绿(1,0,1)白(0,0,0)黑(1,1,1)M品红(0,1,0)青(1,0,0)C蓝(1,1,0)

图3-1 RGB颜色模型

3.3 SMTP和名称空间简介 3.3.1 SMTP简介

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。

首先,运行在发送端邮件服务器主机上的SMTP客户,发起建立一个到运行在接收端邮件服务 器主机上的SMTP服务器端口号25之间的TCP连接。如果接收邮件服务器当前不在工作,SMTP客户就等待一段时间后再尝试建立该连接。这个连接建立之后,SMTP客户和服务器先执行一些应用层握手操作。在这个SMTP握手阶段,SMTP客户向服务器分别指出发信人和收信人的电子邮件地址。彼此自我介绍完毕之后,客户发出邮件消息。SMTP可以指望由 TCP提供的可靠数据传输服务把该消息无错地传送到服务器。如果客户还有其他邮件消息需发送到同一个服务器,它就在同一个TCP连接上重复上述过程,否则,它就指示TCP关闭该连接。

电子科技大学学士学位论文

SMTP通常有两种工作模式:发送SMTP和接收SMTP。具体工作方式为:发送SMTP在接到用户的邮件请求后,判断此邮件是否为本地邮件,若是直接投送到用户的邮箱,否则向dns查询远端邮件服务器的MX纪录,并建立与远端接收SMTP之间的一个双向传送通道,此后SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方面传送。一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。如果SMTP接收者可以接收邮件则返回OK应答。SMTP发送者再发出RCPT命令确认邮件是否接收到。如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出拒绝接收应答(但不中止整个邮件操作),双方将如此重复多次。当接收者收到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件,则返回OK应答即可。

用户发送SMTP文件系统图3-2 SMTP使用模型

SMTP命令,应答和邮件内容接受SMTP文件系统 3.3.2 名称空间简介

名称空间(Namespace)System.Web.Mail类库里所提供的邮件发送的对象、属性和方法它有三个类:SmtpMail、MailMessage和MailAttachment。

(1)MailMessage:提供属性和方法来创建一个邮件消息对象。(Provides properties and methods for constructing an e-mail message.)(2)MailAttachments:提供属性和方法来创建一个邮件附件对象。(Provides properties and methods for constructing an e-mail attachment.)

(3)SmtpMail:提供属性和方法通过使用windows 2000 CDOSYS 的消息组件的联合数据对象来发送邮件消息)。(Provides properties and methods for sending messages using the Collaboration Data Objects for Windows 2000(CDOSYS)message component)。

各个类的属性简介:

From发送邮件的地址;To接受邮件的地址;Subject邮件的标题;Priority邮件的优先级(有效值为High ,Low ,Normal);Attachments返回一个集合,代表附件;Bcc密送地址;Cc抄送地址;获取或是设置电子邮件消息的内容。BodyFormat

第三章 关键理论及技术

获取或是设置Mail Format的枚举值,此值指定消息体邮件的格式(Html格式、Text格式);Bodyencoding指定消息的编码方式编码(主要有Base64,UUencode)。

SmtpMail类的Send方法,它的目的就是发送邮件,有两个重载方法。(1)SmtpMail.Send(“发送邮件的地址”,“接受邮件的地址”,“邮件的标题”,“邮件消息的内容”)这个方法很简单,不适合发送带附件的邮件。

(2)SmtpMail.Send(MailMessage)此方法复杂、灵活,适合发送附件,而且可以设置MailMessage对象的各种属性值。如果我们用ASP.NET写一个邮件发送的程序,那么首先应该如何得到SMTP。有两种方法:第一种方法调用目前知名的邮件服务提供商的SMTP,比如新浪、搜狐、网易的免费电子邮箱的SMTP;第二种方法是自己装一个SMTP虚拟服务器,这个在安装IIS时一起装上去的。

3.4 VFW体系结构简介

与技术在Wondows平台下开发的视频应用程序一般采用两种主要形式:

一、基于视频采集卡附带的二次软件开发包SDK(Software Development Kit)进行。这种方式的优点是方便、容易上手,适于初学者;缺点是对硬件的依赖性较强、灵活性差,且功能参差不齐,不能充分满足各种视频应用程序的开发需求。

二、另一种基于VFW(Video for Windows)进行。VFW 是Microsoft公司为开发Windows平台下的视频应用程序提供的软件工具包,提供了一系列应用程序编程接口(API),用户可以通过这些接口很 方便地实现视频捕获、视频编辑及视频播放等通用功能,还可利用回调函数开发比较复杂的视频应用程序。该技术的特点是播放视频时不需要专用的硬件设备,而且 应用灵活,可以满足视频应用程序开发的需要。Windows操作系统自身就携带了VFW技术,系统安装时,会自动安装VFW的相关组件。

VFW技术主要由六个功能模块组成,下面进行简单说明。

(1)AVICAP32.DLL:包含执行视频捕获的函数,给AVI文件的I/O处理和视频,音频设备驱动程序提供一个高级接口;

(2)MSVIDEO.DLL:包含一套特殊的DrawDib函数,用来处理程序上的视频操作;

(3)MCIAVI.DRV:包括对VFW的MCI命令解释器的驱动程序;(4)AVIFILE.DLL:包含由标准多媒体I/O(mmio)函数提供的更高级的命令,用来访问.AVI文件;

电子科技大学学士学位论文

(5)ICM:压缩管理器,用于管理的视频压缩/解压缩的编译码器;(6)ACM:音频压缩管理器,提供与ICM相似的服务,适用于波形音频。

采集程序编辑程序回放程序AVICAP.DLLAVICAPACMMCIAVI.DVRAVICAPMSVIDEO.DLLMCIWndMSVIEO.DLL视频输入通道AVIFILE.DLL视频输入通道图3-3 VFW各模块间联系图

AVICAP.DLLAVICAP3.4.1 VFW下AVICap基本功能

选择摄像头捕获的画面为视频源,使用AVICap窗口类来实现视频的采集。AVICap窗口类是VFW的一个重要的组成部分,它实现的主要功能是视频的捕获。AVICap提供给应用程序一个简单的、基于消息的接口去访问视频设备和录音设备,并且可以控制处理视频流的捕获,满足了此次课题的需求,并且很容易加入到应用程序中,适于二次开发。

AVICap支持实时视频流捕获和单帧捕获。此外,AVICap使程序员可以控制视频源的开始和结束位置,并加入了如序列帧捕获等功能。

使用AVICap生成的捕获窗具有以下功能:(1)将音频和视频流捕获到AVI文件;(2)动态地连接或断开音频和视频输入设备;

(3)以叠加(overlay)或预览(preview)模式显示输入的实时视频信号;(4)指定捕获所用的文件,并可将捕获文件的内容拷贝到另一个文件;(5)设置捕获速率;

(6)显示控制视频源和视频格式的对话框;(7)创建,保存和载入对话框;(8)将图像和调色板拷贝到剪贴板;(9)捕获和保存DIB格式单帧图像。

通过检查CAPDRIVERCAPS结构来获取捕获驱动器的能力,并通过AVICap

第三章 关键理论及技术

提供的Video Source,Video Format,Video Display对话框来对捕获参数进行设置。

AVICap在显示视频时提供的两种模式:

预览(Preview)模式:该模式使用CPU资源,视频帧先从捕获硬件传到系统内存,接着采用GDI函数在捕获窗中显示。在物理上,这种模式需要通过VGA卡在监视器上显示。

叠加(Overlay)模式:该模式使用硬件叠加进行视频显示,叠加视频的显示不经过VGA卡,叠加视频的硬件将VGA的输出信号与其自身的输出信号合并,形成组合信号显示在计算机的监视器上。只有部分视频捕获卡才具有视频叠加能力。

基于VFW实现C#控制摄像头需要手动另起一个线程。定义一个叫AviCapture.cs的类,用于引入avicap32.dll以及相关的内容。在avicap32.dll中,CAPTUREPARMS结构里有一个fYield,表示另起线程标志位,如果为真,则程序重新启动一个线程用于视频流的捕获,默认值是假。在AviCapture这个类的基础上定义一个叫Video的类,实现如打开摄像头、关闭摄像头、开始录像、结束录像、拍照片等操作。

3.4.2 常用的数据结构

用VFW编写的视频捕捉程序,往往要用到以下四个与视频捕捉相关的数据结构:

(1)CAPSTATUS:定义捕获窗口的当前状态,如图像的宽、高等;(2)CAPDRIVERCAPS:设置捕获设备所拥有的功能能,如有无视频叠加能力、有无控制视频源、视频格式的对话框等;

(3)CAPTUREPARMS:包含控制视频流捕获过程的参数,如捕获帧频、指定键盘或鼠标键以种植捕获,捕获的时间限制等;

(4)VIDEOHDR:定义视频数据块的头信息,在编写回调函数时常用到其数据成员lPData(指向数据缓存的指针)和dwBuferLength(数据缓存大小)。其中,前三种结构都有相应的函数来设置和获取该结构包含的信息。

设置视频设备的属性

CAPTUREPARMS数据结构包括了视频流的控制参数,通过设置captureParms结构变量的各个成员变量,可以控制设备的采样频率、中断采样按键、状态行为等。它允许完成以下任务:

电子科技大学学士学位论文

(1)指定帧速度(Frame Rate);(2)指定视频分配的内存大小;(3)关闭或打开音频捕获;(4)设定捕获的时间间隔;

(5)指定捕获设备(MCI设备、VCR或者影碟);(6)指定结束捕获的键盘或鼠标操作;(7)指定使用的视频类型。

向视频捕获窗体发送WM_CAP_GET_SEQENCE_SETUP消息或者使用宏函数capCaptureGetSetup,可以获得一个CAPTUREPARMS数据结构的对象,当前连接的视频设备信息就保存在这个结构体对象里面,此对象的成员变量可以根据系统需要进行修改。修改完毕后,发送WM_CAP_SET_SEQUENCE_SETUP消息给捕获窗体,并把这个CAPTUREPARMS对象作为传送参数,或者使用宏capCaptureSetSetup,就可使修改的设置生效。之后还可以用capPreviewScale、capPreviewRate等函数设置预览的比例与速度,直接使用设备的默认值也能满足大部分的系统需求。

3.4.3 回调函数

对采集的视频数据进行实时处理时需要用到回调函数。在窗口过程、钩子过程、异步过程都需要调用回调函数,在整个回调过程中自始至终地使用回调方法。回调函数是一类特殊的函数,其功能类似于中断函数,其调动过程由系统完成,而回调函数的具体内容则由用户自己设定。开发者可以注册回调函数方法以获得加载/卸载通知,未处理异常通知、数据库/窗口状态修改通知、文件系统修改通知、菜单项选择、完成的异步操作通知、过滤一组条目等。在系统中,当每一回调函数被设定后,并且满足某一特定条件时,系统将自动调用该回调函数。VFW的回调函数主要包括状态回调、错误回调和视频回调。两个宏函数简要介绍如下:

(1)capSetCallbackOnFranme(hWnd,fpFrameProc),注册帧回调函数。只要一启动视频捕获,当一帧结束后它就理科产生同步动作,而究竟是哪一个回调函数响应,则由登记在设置宏函数中的fpFrameProc参数来决定。此响应是一帧一帧地在同一个缓冲区内进行刷新。另外回调函数要提前定义,即在程序头部进行定义。

(2)capSetCallbackonVideoStream(hwnd,fpVideoProc)。与capSetCallbackOnFranme不同的是,它要和capCaptureSequenceNoFile(hWnd)或

第三章 关键理论及技术

capCaptureSequence(hwnd)配合使用,当其中一个被执行后,回调动作才会产生。此想听同样是一帧结束后边产生回调,但每次数据都追加在上一帧数据的后面,知道所分配的数据缓冲区用完为止。

3.5 Windows API简介

C#开发Windows应用程序的两种主要方法为:使用Windows API(Application Programming Interface,应用程序编程接口)函数,利用MFC(Microsoft Foundation Class,微软基础类库)类库。

Windows API 就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令(动作)。Windows API是一套用来控制Windows的各个部件的外观和行为的预先定义的Windows函数。用户的每个动作都会引发一个或几个函数的运行以告诉Windows发生了什么。API函数包含在Windows系统目录下的动态连接库文件中[10]。

应用程序接口为:“„计算机操作系统(Operating system)‟或„程序库‟提供给应用程序调用使用的代码”。其主要目的是让应用程序开发人员得以调用一组例程功能,而无须考虑其底层的源代码为何、或理解其内部工作机制的细节。API本身是抽象的,它仅定义了一个接口,而不涉入应用程序如何实现的细节。Windows API所提供的功能可以归为七类:

1.基础服务(Base Services),提供对Windows系统可用的基础资源的访问接口。比如象:文件系统(file system)、外部设备(device)、进程(process)、线程(thread)以及访问注册表(Windows registry)和错误处理机制(error handling)。这些功能接口位于,16位Windows下的kernel.exe、krnl286.exe或krnl386.exe系统文档中;以及32位Windows下的 kernel32.dll和advapi32.dll中。

2.图形设备接口(GDI),提供功能为:输出图形内容到显示器、打印机以及其他外部输出设备。它位于16位Windows下的gdi.exe;以及32位Windows下的gdi32.dll。

3.图形化用户界面(GUI),提供的功能有创建和管理屏幕和大多数基本控件(control),比如按钮和滚动条。接收鼠标和键盘输入,以及其他与GUI有关的功能。这些调用接口位于:16位Windows下的user.exe,以及32位Windows下的user32.dll。从Windows XP版本之后,基本控件和通用对话框控件(Common Control Library)的调用接口放在comctl32.dll中。

电子科技大学学士学位论文

4.通用对话框链接库(Common Dialog Box Library),为应用程序提供标准对话框,比如打开/保存文档对话框、颜色对话框和字体对话框等等。这个链接库位于:16位Windows下的commdlg.dll中,以及32位Windows下comdlg32.dll中。它被归类为User Interface API之下。

5.通用控件链接库(Common Control Library),为应用程序提供接口来访问操作系统提供的一些高级控件。比如像:状态栏(status bar)、进度条(progress bars)、工具栏(toolbar)和标签(tab)。这个链接库位于:16位Windows下的commctrl.dll中,以及32位Windows下comctl32.dll中。它被归类为User Interface API之下。

6.Windows外壳(Windows Shell),作为Windows API的组成部分,不仅允许应用程序访问Windows外壳提供的功能,还对之有所改进和增强。它位于16位Windows下的shell.dll中,以及32位Windows下的shell32.dll中(Windows 95则在 shlwapi.dll中)。它被归类为User Interface API之下。

7.网络服务(Network Services),为访问操作系统提供的多种网络 功能提供接口。它包括NetBIOS、Winsock、NetDDE及RPC等。

3.6 本章小结

本章主要介绍了软件设计过程中运用到的相关理论与技术。先是对视频监控系统做了简单的介绍再针对现下较为流行的视频监控技术手段做了简单的介绍,有背景减除法、时间差分法、光流法。并简要分析了这几种算法的优缺点。同时对RGB颜色空间和SMTP邮件的基础知识进行了解,为后面的软件的设计与实现提供了一定的依据。

第四章 软件实现

第四章 软件实现

4.1 软件总体实现

课题主要的任务为开发一套基于视频场景分析的敏感区域入侵检测软件,主要功能包括:检测参数设置、场景图像采集、异常场景元素提取、场景元素判别、异常入侵报警等功能。

充分考虑到课题的需求,笔者将分为以下三个环节介绍软件具体的实现过程。1.视频内容捕获的实现;2.视频内容识别的实现;3.报警功能的设计与实现。

4.2 软件各模块说明 4.2.1 视频内容捕获实现

视频捕获是指由专用的视频采集卡捕获视频、图像等信息,再将获得的视频数据进行数字化操作,然后可以针对这些数据进行保存、修改、传输、回放等各项操作。视频的捕获并显示是此次课题实现的关键步骤,关系到后续关于视频处理的一系列操作。能否准确有效地捕获指定的监控敏感区,进而实现精确的数据获取、分析和处理。在此次课题中,由于资金有限,将采取在本地直接调用笔记本摄像头的开闭实现视频的捕获[11]。

根据不同的应用需求,可以将视频帧采集到文件中或者缓存直接加以处理。利用VFW获取实时视频数据时,通常使用回调机制来获得实时数据缓冲区的首址和长度,从而获得视频数据,实现视频的实时处理。在此次课题中,由于是实现实时的入侵监控和报警,并且提供邮件发送的功能,邮件附带入侵的视频数据截图,那么考虑到文件传输的速度和稳定性,将主要以捕获视频图像为主。

电子科技大学学士学位论文

创建视频捕获窗口①获取视频采集设备的能力及状态信息注册系统回调函数⑤设置窗口显示模式④获取有关视频捕获窗口缺省参数捕获图像到缓存或文件并进行相应处理设置捕获窗口参数③中止视频捕获并断开与视频采集设备的连接与视频捕获设备连接②

图4-1 视频捕获软件实现流程

具体实现过程如下:(1)创建视频捕获窗口

捕获窗口是所有捕获操作的基础,其构造要调用:

public CameraClass(IntPtr handle, int left, int top, int width,int height)

{

mControlPtr = handle;

mWidth = width;

mHeight = height;

mLeft = left;

mTop = top;

}(2)将捕获窗口与视频捕获驱动相连 BOOL fOK;fOK = capDriverConnect(ghWndCap, 0);

if(!fOK){ //无法将指定的视频捕获驱动连接到捕获窗

第四章 软件实现

//在此加入错误处理 }(3)获得捕获驱动器的能力

capDriverGetCaps(hwndCap, &gCapDriverCaps, sizeof(CAPDRIVERCAPS));其中, gCapDriverCaps是由CAPDRIVERCAPS gCapDriverCaps;定义的。CAPDRIVERCAPS 结构定义了捕获驱动器的能力,如有无视频叠加能力,有无控制视频源、视频格式的对话框等。

执行capDriverGetCaps语句后,gCapDriverCaps中就获得了与当前捕获窗相连的捕获驱动的各项能力,要根据该捕获驱动的能力来实现视频的显示和捕获。

(4)显示视频

由于叠加模式只被部分视频捕获卡支持,而大部分视频捕获设备都支持预览模式,我们用预览(preview)模式显示视频:

capPreviewRate(ghWndCap,66);

//设置显示帧率

capPreview(ghWndCap,TRUE);

//开始预览显示

要停止预览可用:capPreview(ghWndCap,FALSE);用叠加模式显示视频的方法相似,只是所用函数应为capOverlay。(5)进行视频捕获

视频捕获主要有两种模式,连续视频流捕获和单帧捕获。在进行视频捕获之前要指定捕获文件名并为捕获文件分配存储空间。public void SaveImage(string path)

{

IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);

SendMessage(hWndC,WM_CAP_SAVEDIB,0,hBmp.ToInt32());

}(6)结束,将捕获窗同驱动断开连接 public void Stop()

{

SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);

bStat = false;

}

这一步在结束视频捕获程序时是必须的,否则将导致视频驱动无法释放,其它程序将不能使用捕获设备。

电子科技大学学士学位论文

利用函数capOverlay选择采用叠加模式预览,从而减小系统资源的占用率,加快了视频的加载速度。之后使用capPreview启动预览功能,这时就可以在屏幕上显示出整个界面窗口,并可以看到指示灯亮摄像头被打开,屏幕上显示摄像头摄入的视频内容。

一个程序可以为捕获窗口登记多个回调函数,以便在以下几种情况发生时通知程序作出相应的应对操作:(1)状态改变;(2)错误发生;

(3)视频框架缓冲区变为可用;

(4)应用程序在捕获视频流过程中接收到数据。

通过以上几个步骤就可以建立一个基本的视频捕获程序,之后需要使用捕获窗口的回调函数,获取每一帧的视频数据,以供之后进行视频内容的操作处理。至此,视频数据显示、采集功能已基本实现[12]。

打开后的视频捕获窗口如下图所示:

图4-2 启动摄像头监控程序

第四章 软件实现

4.2.2 视频内容识别实现

此次课题是基于视频敏感区内容的识别,目标的检测与跟踪就是把物体提取出来,对其进行识别并获取其相关信息的过程。在智能视频监控系统中,物体检测和跟踪是提高系统智能性的关键技术。

因此此次课题的重点则是实现视频内容的识别,笔者在综合考虑各方面的因素之后,采取了通过对比视频当前画面和背景画面的颜色变化的方式来判别是否为有害入侵。确定了基于颜色的敏感入侵检测,设定了色差、限差两个参数的维度来判断入侵是否有害,这两个参数取值范围均为0—100区间,用户可以根据自身的需求自定义。

(1)设置监控对比图形

首先用户需在摄像头开启状态下,通过点击“设置监控对比图形”来设置背景图像。用户可以根据自身的需求设定监控对比图形,这一功能的开放,使得该摄像头监控程序可运用的范围大大增加。

图4-3 CaptureScreenClass类图

CaptureScreenClass类包含三个参数,BitBlt、CreateDC、GetScreenImage。其中GetScreenImage是捕捉当前屏幕图像的关键类,也是设置监控对比图形的基础。

public static Bitmap GetScreenImage(Point point01, Point point02, bool full)

{

//创建显示器的DC

IntPtr dc1 = CreateDC(“DISPLAY”, null, null,(IntPtr)null);

//由一个指定设备的句柄创建一个新的Graphics对象

Graphics g1 = Graphics.FromHdc(dc1);

Bitmap MyImage;

int width, height;

if(full)

{

电子科技大学学士学位论文

width = Screen.PrimaryScreen.Bounds.Width;

height = Screen.PrimaryScreen.Bounds.Height;

}

else

{

width = point02.Xpoint01.Y;

}

//根据指定的宽度和高度创建一个与之相同大小的Bitmap对象

MyImage = new Bitmap(width, height, g1);

//获得屏幕的句柄

Graphics g2 = Graphics.FromImage(MyImage);

//获得位图的句柄

IntPtr dc3 = g1.GetHdc();

//把当前屏幕捕获到位图对象中

IntPtr dc2 = g2.GetHdc();

//把当前屏幕拷贝到位图中

BitBlt(dc2, 0, 0, width, height, dc3, point01.X, point01.Y, 13369376);

//释放屏幕句柄

g1.ReleaseHdc(dc3);

//释放位图句柄

g2.ReleaseHdc(dc2);

return MyImage;

} 设置好监控对比图形之后,程序自动将图形保存在debug文件目录下,命名为BASE。实现语句如下:

private void 设置监控对比图形button_Click(object sender, EventArgs e)

{

camera.SaveImage(“BASE.bmp”);

}

第四章 软件实现

(2)色差、限差、监控间隔、延迟时间等参数设定。

设置好监控对比图形之后,可以就自身需求设定参数值,以期达到最佳的监控效果。参数的设定给出了监控的弹性范围,降低系统因过度敏感发生误报,或是敏感度不够造成漏报的现象。

①色差设定。为了防止因为细微的环境变化而导致误报的现象,因此需要一定的阈值范围来判断画面是否发生变化。当图像变化的颜色差值大于该色差值时,判断有可能出现变化,该值越小则要求图像变化越小,即要求越严格。

string tempStr;

tempStr = ini.ReadValue(“Values”, “色差”);

int tempInt;

if(int.TryParse(tempStr, out tempInt))

{

LimitedValue = tempInt;

colorTrackBar.Value = tempInt;

limitedColorlabel.Text = tempInt.ToString();

} ②限差设定。限差用于控制图像中变化比率ratio,当超过该值时开始报警,即当图像出现ratio%的变化时程序认为出现异常,该值越小要求图像变化越小。

tempStr = ini.ReadValue(“Values”, “限差”);

if(int.TryParse(tempStr, out tempInt))

{

LimitedRatio =(double)tempInt/100;

ratioTrackBar.Value = tempInt;

ratiolabel.Text = tempInt.ToString();

}

③监控间隔设定。监控间隔即每隔多长时间进行一次监控分析。最小值为100ms,值越小,其监控分析的频率越高,同时CPU使用率越高。private void monitortrackBar_Scroll(object sender, EventArgs e)

{

MonitorTime = monitortrackBar.Value;

monitorlabel.Text = monitortrackBar.Value.ToString();

电子科技大学学士学位论文

if(ini!= null)

ini.WriteValue(“Values”, monitortrackBar.Value.ToString());

monitorTimer.Interval = monitortrackBar.Value * 100;

} ④延迟时间设定。

private void delaytrackBar_Scroll(object sender, EventArgs e)

{

delaylabel.Text = delaytrackBar.Value.ToString();

if(ini!= null)

ini.WriteValue(“Values”, “延迟”, delaytrackBar.Value.ToString());

}(3)视频内容变化识别

即时捕获图像保存为TEMP文件,则是为了实现入侵对象的抓取。该程序自动将监控对比图形赋值到firstMap中,而摄像头捕获的图形赋值到secondMap中。color1和color2分别作为firstMap和secondMap的两个参数。GetPixel是用于获取像素的一个主要函数,除了宽destWidth高destHeight之外,还有三个参数tempR,tempG,tempB,分别用于存储图形的红、绿、蓝的颜色信息。那么通过比对这三对数值,若发生了改变,说明出现了色差,则证明了视频监控的范围内有可能遭到了入侵。

而比对三对R、G、B三对数值的方法有两种,一是基于单个色差,对R、B、G的数值进行一一对比。

tempR = Math.Abs((int)color01.R(int)color02.G);tempB = Math.Abs((int)color01.B(int)color02.R);

tempG = Math.Abs((int)color01.G(int)color02.B);

if(colorType)

{

if(tempR > LimitedValue)

“色差方式”,电子科技大学学士学位论文

{

tempCount++;

}

else if(tempG > LimitedValue)

{

tempCount++;

}

else if(tempB > LimitedValue)

{

tempCount++;

}

}

else

{

if(tempR + tempG + tempB > limitedValue3)

tempCount++;

}

}

}(4)开始监控

设置好以上参数,点击“开始监控”后,系统立即进入监控状态。如果之前没有设置对比监控图形,将会弹出相应的窗口提醒用户进行设置。

private void 开始监控button_Click(object sender, EventArgs e)

{

if(monitorTimer.Enabled)

{

开始监控button.Text = “开始监控”;

if(mp3!= null)

mp3.StopT();

monitorTimer.Enabled = false;

}

else

第四章 软件实现

{

if(System.IO.File.Exists(“BASE.bmp”))

{

int tempInt = delaytrackBar.Value * 1000;

System.Threading.Thread.Sleep(tempInt);

baseImage = new Bitmap(“BASE.bmp”);

开始监控button.Text = “停止监控”;

mp3 = new MP3Class();

mp3.FileName = “Alarm.mp3”;

monitorTimer.Enabled = true;

}

else

{

MessageBox.Show(“还没有设置监控对比图形!n请先设置监控对比图形!”,“MessageBoxIcon.Warning);

}

}

}

”,MessageBoxButtons.OK, 4.2.3 报警功能的设计与实现

本文在前面给出了关于基于视频内容敏感区入侵检测的方案,使得监控设备能准确而有效地追踪到进入到监控区域的异常物体,并能做出反应。但是对于背景画面受到污染,监控人员必须通过肉眼观察屏幕是否有异常入侵,在报警方式上缺乏主动性和实时性。为了防止事后需要监控人员查阅大量的视频数据,因此监控系统还应该具备相应的实时报警功能,这也是智能视频监控相对于传统监控系统较先进的方式。

下面就报警功能的需求分析、两种报警方式的实现做具体说明。

电子科技大学学士学位论文

4.2.3.1 报警功能的需求分析

报警系统作为视频监控系统的重要组成部分,发挥着至关重要的作用,特别是针对本课题的一体化监控系统。目前的报警系统多为一台报警主机和一些前端报警设备组成。前端报警器能够快速、准确地检测出现场的异常状态,经分析后将分析得到的结果及时有效地传送到系统控制主机。系统控制主机可自动判别报警信号来源,自动生成报警并响应。系统还可以通过视频、音频设备接收现场视频的图像和声音信号,全面了解视频敏感区的现状。综合这些信息可以为监控人员提供判断报警信号的可靠性和严重性提高了必要的依据。

报警系统在设计过程中应该考虑到以下功能需求:

1)系统具备自检功能,前端报警器或传输线路发生故障时应产生报警信号,并自动通报给控制主机;

2)系统可按设定的报警规则自动产生报警响应,如打开或关闭警报设备(包括警铃、现场辅助光源等),自动拨打110或119报警,避免由于人为延误造成的损失;

3)系统应支持人工手动方式的报警响应,对那些需要经过多方核实后方可采取行动的报警信号,操作人员可采取手动报警响应模式;

4)系统需要将前端设备的响应记录在案(包括响应的方法、日期时间)、生成日志文件,以备日后查询。

本系统实现的是一个简易的智能视频监控报警系统,因此在报警功能的设计的功能实现比较简单。当视频监控区域有侵入行为发生时,记录下被监视场所的视频图像的同时,实现了两种形式的报警,一是通过监控主机直接发出警报声,另外是通过发送入侵相关邮件到指定邮箱,实现远程实时监控。以下就两种监控方式分别做说明。

4.2.3.2 发出报警铃音的功能设计

该程序主要设置了三个枚举变量play、pause、StopT,分别定义报警信号的播放、暂停、停止,用MP3Class类来控制。在收到控制主机发送过来的信号后,做出相应的操作。

第四章 软件实现

图4-4 MP3Class类

关键的实现代码如下:

//播放

public void play()

{

TemStr = “";

TemStr = TemStr.PadLeft(127, Convert.ToChar(” “));

APIClass.mciSendString(”play media“, TemStr, TemStr.Length, 0);

mc.state = State.mPlaying;

}

//停止

public void StopT()

{

TemStr = ”“;

TemStr = TemStr.PadLeft(128, Convert.ToChar(” “));

ilong = APIClass.mciSendString(”close media“, TemStr, 128, 0);

ilong = APIClass.mciSendString(”close all“, TemStr, 128, 0);

mc.state = State.mStop;

}

///

/// 暂停

///

public void Pause()

{

TemStr = ”“;

TemStr = TemStr.PadLeft(128, Convert.ToChar(” “));

电子科技大学学士学位论文

ilong = APIClass.mciSendString(”pause media“, TemStr, TemStr.Length, 0);

mc.state = State.mPuase;

}

private string GetCurrPath(string name)

{

if(name.Length < 1)return ”“;

name = name.Trim();

name = name.Substring(0, name.Length-1);

return name;

} } 4.2.3.3 发出报警邮件的功能设计

该课题发出报警邮件的功能,主要是通过SMTP邮件传输报警信号到指定邮箱实现的。SMTP 独立于特定的传输子系统,且只需要可靠有序的数据流信道支持。SMTP 重要特性之一是其能跨越网络传输邮件,即“SMTP 邮件中继”。通常,一个网络可以由公用互联网上 TCP 可相互访问的主机、防火墙分隔的 TCP/IP 网络上 TCP 可相互访问的主机,及其它 LAN/WAN 中的主机利用非 TCP传输层协议组成。使用 SMTP,可实现相同网络上处理机之间的邮件传输,也可通过中继器或网关实现某处理机与其它网络之间的邮件传输。所以符合该视频监控系统的各方面需求。

TCP/IP Internet背景更新目标分割视频编码及传输背景图像摄像头目标模板生成截图存储t帧图像运动区域检测报警处理

图4-5 基于视频的入侵检测系统框图

第四章 软件实现

(1)SMTP发送邮件过程

SMTP的命令和响应都是基于文本,以命令行为单位,换行符为CR/LF。响应信息一般只有一行,由一个3位数的代码开始,后面可附上很简短的文字说明。

SMTP要经过建立连接、传送邮件和释放连接3个阶段。具体为: 1)建立TCP连接。

2)客户端向服务器发送HELLO命令以标识发件人自己的身份,然后客户端发送MAIL命令。

3)服务器端以OK作为响应,表示准备接收。4)客户端发送RCPT命令。

5)服务器端表示是否愿意为收件人接收邮件。

6)协商结束,发送邮件,用命令DATA发送输入内容。7)结束此次发送,用QUIT命令退出。

SMTP服务器基于DNS中的邮件交换(MX)记录路由电子邮件。电子邮件系统发邮件时是根据收信人的地址后缀来定位邮件服务器的。SMTP通过用户代理程序(UA)完成邮件的编辑、收取和阅读等功能;通过邮件传输代理程序(MTA)将邮件传送到目的地。

初始化摄像头程序摄像头程序初始化成功N退出摄像头监控程序Y有待发送的报警信息Y发送报警邮件N

图4-6 邮件报警系统处理流程

(2)SMTP邮箱信息设置

报警邮件包含MailInfo和MailForm两个类。其中MailInfo是邮件基本信息的设置,包括发件人邮箱、发件人邮箱密码、收件人邮箱、邮件SMTP主机选择、邮件内容等。SMTP主机可选择smtp.163.com、smtp.qq.com、smtp.gmail.com三种形式。

电子科技大学学士学位论文

图4-7 邮件类信息

设置邮件基本信息。①设置邮件主题

this.label5.AutoSize = true;

this.label5.Location = new System.Drawing.Point(19, 22);

this.label5.Name = ”label5“;

this.label5.Size = new System.Drawing.Size(41, 12);

this.label5.TabIndex = 6;

this.label5.Text = ”主题:“;②设置邮件内容

this.groupBox1.Controls.Add(this.mailBodyrichTextBox1);

this.groupBox1.Controls.Add(this.mailSubjecttextBox4);

this.groupBox1.Controls.Add(this.label5);

this.groupBox1.Location = new System.Drawing.Point(3, 124);

this.groupBox1.Name = ”groupBox1“;

this.groupBox1.Size = new System.Drawing.Size(258, 179);

this.groupBox1.TabIndex = 22;

this.groupBox1.TabStop = false;

this.groupBox1.Text = ”邮件内容:“;③设置发件人邮箱

this.label1.AutoSize = true;

第四章 软件实现

this.label1.Location = new System.Drawing.Point(22, 9);

this.label1.Name = ”label1“;

this.label1.Size = new System.Drawing.Size(77, 12);

this.label1.TabIndex = 14;

this.label1.Text = ”邮箱用户名:“;④设置发件人邮箱密码

this.label2.AutoSize = true;

this.label2.Location = new System.Drawing.Point(27, 37);

this.label2.Name = ”label2“;

this.label2.Size = new System.Drawing.Size(65, 12);

this.label2.TabIndex = 17;

this.label2.Text = ”邮箱密码:“;⑤设置收件人邮箱

this.label4.AutoSize = true;

this.label4.Location = new System.Drawing.Point(22, 90);

this.label4.Name = ”label4“;

this.label4.Size = new System.Drawing.Size(77, 12);

this.label4.TabIndex = 19;

this.label4.Text = ”收件人邮箱:“;⑥设置邮件SMTP主机

this.SMTPAddresscomboBox1.FormattingEnabled = true;

this.SMTPAddresscomboBox1.Items.AddRange(new object[] {

”smtp.163.com“,”smtp.qq.com“,”smtp.gmail.com“});

this.SMTPAddresscomboBox1.Location System.Drawing.Point(105, 61);

this.SMTPAddresscomboBox1.Name = ”SMTPAddresscomboBox1“;

this.SMTPAddresscomboBox1.Size = new System.Drawing.Size(142, 20);

this.SMTPAddresscomboBox1.TabIndex = 15;

this.SMTPAddresscomboBox1.Text = ”smtp.163.com“;

= new

电子科技大学学士学位论文

邮件内容设置好后,将会查看到如下邮件设置信息。

图4-8 邮件设置信息

(2)SMTP发送邮件的实现

在设置好邮件信息后,勾选主界面“发送邮件”选项,则实现了发送报警邮件的功能。其中,TEMP2是监控状态下,监控画面发生异常时捕获的视频图像。在监控区域发生入侵时,若主机在联网状态下,系统将自动将入侵图片TEMP2发送到关联邮箱。若是没有将邮件的信息填写完整,将对应弹出对话框提醒用户。private void 设置邮箱button_Click(object sender, EventArgs e)

{

MailForm form = new MailForm();

if(form.ShowDialog()== DialogResult.OK)

{

EmailInfo = form.emailInfo;

EmailInfo.AttachFilePath ”TEMP2.bmp“;

}

}

private void checkBox2_CheckedChanged(object sender, EventArgs e)

{

if(ini!= null)

ini.WriteValue(”Values“, checkBox2.Checked.ToString());

= Application.StartupPath +

”发送邮件“,第四章 软件实现

}

private void button3_Click(object sender, EventArgs e)

{

if(EmailInfo!= null)

EmailInfo.Send();

else

MessageBox.Show(”没有设置邮箱!请先设置邮箱!“, ”提示!",MessageBoxButtons.OK, MessageBoxIcon.Warning);

}

本章主要介绍了软件各模块的具体实现代码,实现了摄像头监控系统的视频监控并实时报警的功能。选择基于RGB颜色的内容识别方式,并提出色差、限差两个维度来控制监控识别的效果,提高了系统对复杂环境的适应能力。在报警方式上,除了由监控主机发出报警铃音外,还新增了发送报警邮件的功能,进一步实现了该系统的实时性。

电子科技大学学士学位论文

第五章 测试

5.1 系统测试相关理论

(1)系统测试的目标和任务

按照系统开发的总思路,在系统各模块及相应接口等软件设计完成后,有必要对系统的完整性、有效性、可操作性及正确性进行测试,以确保软件投入运行后能充分体现其先进性。软件测试是确保软件开发质量的重要手段,它也是对开发需求能否完整实现的检验,它也是对系统总体设计及相关编码正确性的最后复核。

系统软件开发的目的是为用户提供满足使用要求,确保使用质量的高性能产品。监督和管理信息系统的开发是与系统安全性密切结合的,是一个复杂的系统工程。在开发过程中,各模块的开发难免会存在一些接口问题,在操作实施过程中也不可避免地会产生错误,为解决这些问题和错误必须对已开发完成的系统软件进行实地运行与测试,真正实现系统投用后的正确性和可操作性,真正使系统功能的发挥,达到设计的目的。

(1)测试的方法

软件测试的方法一般有两种,即功能测试和结构测试两种。功能测试采用完全不考虑程序的内部结构和处理过程,以开发的程序是否能适时地接收输入数据并产生正确的输出信息,完成设计规定的功能。结构测试必须完全了解程序的结构和处理过程,了解与相关工艺的相互衔接,按照已编程序内部的逻辑测试程序检验程序中每个通路,是否按预先的设置正确工作。

(3)测试的原则

1)软件测试一般应遵行以下一些原则: 2)必须与现场的系统操作员相结合; 3)测试应编制好详细的测试工作计划; 4)测试应分块、分阶段进行; 5)测试应考虑相关数据的误输入;

6)测试必须有输入数据和预输出结果两部分;

7)所有测试必须都应追溯到现场工作完成后预期功能,以确保整个系统处于

第五章 测试

安全、正常运转状态;

5.2 摄像头监控程序软件描述

(1)软件描述

软件名称:摄像头监控程序。

实现目标:为用户提供简单、方便、一体化的视频敏感区入侵检测报警体系,便于实时报警和远程管理。

软件使用领域:本软件适用于本地用户,暂不适合网络应用。(2)一般约束

本项目开发过程中的约束如下:

1)管理方针:严格贯彻加强项目开发过程管理的指导思想,文档撰写和程序设计执行《计算机软件开发工程规范2003》相关的国家标准。

2)软件约束:系统平台为WindowsXP sp2,开发平台使用Visual Studio 2010,目标框架.NET Framework,开发语言使用C#。3)使用环境假设:本地计算机。4)与其它应用间的接口:无。

5)并行操作:服务器端均提供并行操作的能力。6)控制功能:提供图形界面对系统进行控制管理。7)所需开发语言:C#。(3)假设和约定

软件客户端假定为Windows系统和安装了Visual Studio 2010的系统,所开发的客户端只能在此系统下安装运行,暂不支持其他操作系统。

(4)软件功能

摄像头控制:包括启动摄像头,关闭摄像头,启动监控系统等。摄像头显示:摄像头摄入内容显示,界面的控制。

输出:包括保存当前图像,发出入侵报警音,发送入侵邮件等。

远程监控实现:发送入侵邮件到指定邮箱。

电子科技大学学士学位论文

5.3 功能测试

5.3.1 启动摄像头功能测试

此次课题将测试地点定为教学楼C区108教室,从多个角度测试该视频监控系统的性能。如设定不同的色差、限差值来测试系统的灵敏度。

启动程序后笔记本电脑的摄像头自动打开,并跳转到程序主界面。

图5-1 启动摄像头

如图显示摄像头成功启动,并能准确捕获视频图像显示在荧幕上。屏幕不闪,画面固定,性能稳定。选定好一个角度之后,接下来就可以开始实现具体的监控环节。

5.3.2 监控对比图形的设置测试

点击界面上的“设置监控对比图形”的控件之后,系统默认将当前摄像头摄入的图形为监控对比图形,并存储在debug下,命名为BASE。这个操作是设定背景图形。该系统提供给用户自定义背景图形的功能,使得该系统的移植性和适应性大大增强。用户可以根据自己的需求,在需要的场合安装好摄像头,开启该程序之后就可以立即启动监控。

第五章 测试

图5-2 保存当前截图图片

测试成功。设置好监控对比图形之后,就可以对视频区域进行监控了。

5.3.3 视频敏感区入侵测试

根据需要设定好色差、限差、监控间隔、监控延迟之后,点击“开始监控”之后,程序处于监控状态。测试人员要小心不要走入到监控画面内即可。

测试时,设定初始色差为4,限差为10,监控间隔为50ms。以单个色差方式对入侵物体进行捕获。

(1)在没有入侵的情况下,监控画面正常,没有发出警报。系统稳定性测试成功。

电子科技大学学士学位论文 图5-3 没有入侵情况

(2)入侵发生测试

为了方便测试,笔者在监控区域内放置了一个棕绿相间的书包。

系统检测到异常情况,程序很快启动,在窗口界面弹出“监控发现异常!”的提醒外,也发出报警信号音报警。铃音正常作响,警铃报警方式测试成功。

图5-4 发生入侵情况

5.3.4 邮件发送测试

分别对邮件的各方面填写不完全进行测试,查看系统在应对各种不同状况时给出的反应。于是分为以下四种:未填写发件人邮箱、未填写发件人邮箱密码、未填写收件人邮箱、控制主机未联网状态分别进行测试。

人脸检测设计与实现 篇3

本文在VS2010开发平台上调用Open CV函数库进行C++编程, 实现了快速人脸检测与人脸实时跟踪方法, 该方法利用Ada Boost分类器进行人脸检测, 并利用基于颜色的Camshit算法进行人脸跟踪。

1 人脸检测方法

1.1 人脸检测流程

人脸检测的目的是将视频图像中各种姿态的人脸标记出来。人脸特征的提取与计算是人脸检测的关键。Haar-like特征易于计算且适合描述人脸外观, 故选取Haar-like特征作为人脸检测的关键特征。实现人脸检测的流程主要包括人脸Haar-lik特征提取、Ada Boost级联分类器生成以及人脸检测结果三个环节, 如图1所示。

1.2 Haar-like特征及特征值计算

人脸检测是一种分类问题, 即将图像窗口分类为人脸区域或背景区域。人脸的Haar-like特征易于区分而且不依赖于外部条件变化, 并能将人脸同背景或其他目标区分开来, 因此Haar-like特征是人脸检测的关键特征。Haar-like特征主要表现为水平、垂直、对角线方向上的信息, 如图2所示, 其中图2 (a) 和图2 (b) 分别代表水平和垂直方向的边缘特征, 图2 (d) 和图2 (e) 分别代表垂直和水平方向的线性特征, 图2 (c) 代表对角线特征。

Haar-like特征值定义为图像中白色矩形区域内部所有像素之和与黑色矩形区域所有像素之和的差值, 于是Haar-like特征也称为矩形特征[8]。

对于边缘和线性特征, 特征值F1的计算如式 (1) 。

而对于对角线特征, 特征值F2的计算如式 (2)

式 (2) 中, i为白色以及黑色矩形的个数, ωi和ωj分别为为第i和j个矩形的权值。

1.3 基于Ada Boost算法的分类器

目前, 基于级联结构的Ada Boost算法能够高效率的检测人脸图像。Ada Boost其实是一种级联分类器, 原理是采用迭代思想实现分类器的加权平均, Ada Boost的级联结构如图3所示。图中F表示检测为负样本 (非人脸图像) , T表示检测为正样本 (人脸图像) , 所有正负样本依次经过各级分类器, 只有符合要求的正样本能够进入下一级分类器的分类, 若在任一个分类器处获得负结果, 则立即排除该样本, 而被排除的负样本将不再参与其他分类器的训练, 分类结果输出正样本人脸图像。

2 人脸跟踪方法

2.1 HSV颜色空间

HSV空间包括色调 (H) 、饱和度 (S) 和亮度 (V) 三个基本属性, 其中H是颜色的重要特征, S表征色彩的鲜艳程度, V反映图像的明亮程度[9]。本文基于HSV空间的颜色信息实现人脸跟踪, 因此需要将色彩分量分离出来。图4为HSV颜色空间各分量的示例图, 其中, 图4 (a) 为原始彩色图像;图4 (b) 、图4 (c) 、图4 (d) 分别为图4 (a) 的H分量图像、S分量图像以及V分量图像。

2.2 Camshift算法

Camshift算法是基于颜色模型的跟踪方法, 对于颜色差距较大的图像跟踪效果明显, 并且能够排除光线变化、干扰物存在、部分遮挡等外界因素对跟踪的影响。Camshift算法是对Mean-shift算法的改进, 它具有实现简单, 运算效率高, 且可根据目标位置自动调节搜索窗口等优点, 是一种自适应调整的动态目标跟踪方法。

在基于HSV颜色空间中单一色调信息基础上, 采用Camshift算法进行人脸跟踪。跟踪过程主要包括视频图像初始化、Meanshift寻找目标、Camshift自适应调整目标窗口实时跟踪目标三个重要环节。具体实现步骤如下。

2.2.1 视频图像初始化

对输入图像进行预处理。如抑制背景噪声、图像增强以及设置初始变量参数等操作。

2.2.2 Meanshift寻找目标

首先在反向投影图中找到目标中心, 然后根据初始搜索框开始搜索目标, 直至满足迭代终止条件结束。

2.2.3 Camshift自适应跟踪目标

Camshift方法自适应更新目标搜索窗口的长 (L) 和宽 (W) 计算式 (3) 、式 (4) 所示[10],

椭圆主轴的方向角α如式 (5) 所示,

式 (5) 中, A00为反向投影图的零阶距;A11为反向投影图的一阶距;A20和A02分别为反向投影图在x方向和y方向上的二阶距, 计算公式如式 (6) , 式 (7) 所示,

3 仿真实验结果与分析

3.1 仿真实验

仿真实验在联想双核2.20 GHz CPU、4 G内存的PC上进行。采用C++语言在VS2010开发平台借助Open CV2.3.1辅助开发库, 实现了具有人脸检测与跟踪功能的应用软件。该软件利用VC++中MFC窗体应用程序结构创建, 并调用Open CV图像处理函数实现对图像的各种操作以及存储操作, 图像显示采用Open CV中的Cvv Image类。经过反复实验测试, 该软件运行效率高且鲁棒性好。软件运行界面如图5所示, 该软件主要包括六个模块, 分别为摄像头管理模块、视频管理模块、检测与跟踪模块、视频存储模块、获取单帧图像模块以及静态多人脸检测模块。

软件各个功能模块都有一定的实效性, 摄像头管理模块中可以实现调取外接USB接口的摄像头;视频管理部分实现读取各种格式视频, 以及暂停操作功能;人脸检测跟踪模块进行人脸检测与跟踪, 同时也能选择跟踪不同的目标对象, 实现了跟踪目标的多样性;存储模块实现将播放过程中的关键内容重新打包存储;获取单帧图像模块实现在视频播放过程中获取单帧重要目标图像, 方便后期深入分析目标的其他关键特征。

3.2 实验结果与分析

3.2.1 人脸检测仿真实验及结果分析

为证明本节提出方法的有效性和快速性, 利用摄像头捕捉了6张图像。人脸检测结果如图6所示, 其中, 图6 (a) 为在光线较弱环境下摄像头捕捉的正面人脸;图6 (b) 为侧面人脸检测结果;图6 (c) 为有旋转人脸图像的检测结果;图6 (d) 检测定位到两张人脸, 同样适用多张人脸检测。图6 (e) 为检测视野范围内远距离位置的人脸;图6 (f) 为有外物遮挡情况下的人脸检测结果, 然而对严重遮挡情况无法检测。

图6中方框标识出实时检测的人脸位置, 圆框表示人脸轮廓。实现单帧图像特征值提取时间为10 ms, 检测出单个样本人脸的平均时间是30 ms。实验结果表明Ada Boost方法适用于对光线较弱环境、小角度旋转人脸、距离较远人脸、存在部分遮挡的人脸以及多人脸检测。

3.2.2 人脸跟踪仿真实验及结果分析

为证明本节跟踪方法的有效性, 利用摄像头捕捉了6张人脸跟踪图像。如图7所示。其中图7 (a) 为开始进入跟踪阶段的人脸图像, 图7 (b) 、 (c) 和图7 (d) 、 (e) 分别为人脸被部分遮挡和存在干扰人脸情况, 图7 (f) 为摄像头拍摄中或视频播放过程中获取的单帧图像存储结果。跟踪速率可达到每秒15帧。

仿真实验结果表明Camshift算法占用系统资源少, 且能够快速有效地实现跟踪。该跟踪过程除了适用于高质量视频外, 还适用于光线变化、干扰物、部分遮挡存在的视频图像, 均表现出较好地鲁棒性。

4 结论

作为一项独立的技术, 基于视频分析的目标检测跟踪已得到了极大的发展, 被广泛应用于公共安全、交通管理等领域。人脸是视频内容中的重要信息, 对人脸的检测与跟踪是智能视频分析的一个重要分支。在人脸检测方面, 基于Ada Boost分类器级联结构实现快速人脸检测, 级联的过程大大提高了系统的运算效率。在人脸跟踪方面, 基于颜色模型的Camshift方法实现快速人脸跟踪, 且跟踪过程不受噪声、人脸的不规则运动、干扰物的存在以及光线变化等因素的影响。本文提出方法在VS 2010开发平台上调用Open CV函数库进行C++编程, 并使用MFC框架实现了系统的界面设计。实现基于视频内容的动态目标检测与跟踪可为后续开展的模式识别研究奠定基础, 是图像处理研究领域的重要内容, 有着广阔的应用前景。

参考文献

[1] Viola P, Jones M.Robust realtime object detection.Technical Report, 2001/01.Compaq Cambridge Research Laboratory, 2001

[2] Li S Z, Zhang Z Q.FloatBoost learning and statistical face detection, IEEE Transactions on Pattern Analysis and Machine Intelligence, 2004;26 (9) :1—12

[3] 张洪明, 赵德斌, 高文.基于肤色模型、神经网络和人脸结构模型的平面旋转人脸检测.计算机学报, 2002;15 (11) :1250—1256Zhang H M, Zhao D B, Gao W.Face detection under rotation in image plane using skin color model, neural network and feature-based face model.Chinese Journal of Computers, 2002;25 (11) :1250—1256

[4] 梁路宏, 艾海舟, 肖习攀, 等.基于模板匹配与支持矢量机的人脸检测.计算机学报, 2002;25 (1) :22—29Liang L H, Ai H Z, Xiao X P, et al.Face detection based on template matching and support vector machines.Chinese Journal of Computers, 2002;25 (1) :22—29

[5] Fukanaga K., Hostetler L D, The estimation of the gradient of a density function with applications in pattern recognition.IEEE Transaction on Information Theory, 1975, 21:32—40

[6] Badu R V, Perez P, Bouthemy P.Robust tracking with motion estimation and local kernel-based color modeling.Image Vision Computing, 2007;25:1205—1216

[7] 张涛, 蔡灿辉.一种改进的MeanShift实时多人脸跟踪算法.计算机应用, 2009;29 (3) :781—784Zhang T, Cai C H.Improved mean shift real-time multiple faces tracking algorithm.Journal of Computer Application, 2009;29 (3) :781 —784

[8] 陈园园.人脸检测算法的改进与仿真研究.计算机仿真, 2011;28(7) :281—284Chen Y Y.Simulation on face detection based on improved adaboost algorithm.Computer Simulation, 2011;28 (7) :281—284

[9] 戈曼.基于单目夜视图像的深度估计.上海, 东华大学, 2012Ge M.The depth estimation based on monocular night vision image.Shanghai:Donghua University, 2012

人脸识别系统的设计与实现 篇4

系统的整体构想为: 选用嵌入式芯片实现视频监控系统的信号获取, 完成视频监控信号的网络传送, 通过服务器端的处理实现人脸识别。

视频监控系统的嵌入式系统是以满足对特定要求的场合进行监控要求, 选择合适的嵌入式平台, 选择ARM处理器作为嵌入式系统芯片, 对于ARM系列处理器而言, 可以选择目前比较流行Android系统直接作伪嵌入式操作系统, 目前通用的Android系统的基础上进行适当的内核裁剪小型化后, 只用保留支持视频采集和传输的模块。

由于ARM本身只是一项嵌入式处理器技术, 最终还是需要挑选合适的芯片来作为设计的依据, 三星公司生产的16/32位RISC嵌入式微处理器S3C2410主要有S3C2410A-20和S3C2410A-26两种, 前者主频最高为200MHz, 后者主频最高为266MHz。 这两个芯片都可以符合要求。

系统前端依靠基于Android系统的移动视频采集功能。 Android技术在本系统中占有重要地位。

作为一款开放式操作系统, 随着Android的快速发展, 目前系统提供了层次结构的系统平台, 底层Linux系统层, 向上依次为相关的库函数和应用系统调用。 由于系统提供了通信所需的相关系统调用, 使得整个编写通信模块仅仅是调用系统即可。 下面依次介绍客户端的视频采集功能模块、 文件存储模块、 文件传输模块。

利用Android系统自带的视频采集功能实现视频采集。

使用Intent跳转到系统相机, 设置action为:android.media. action.STILL_IMAGE_CAMERA。

首先通过调用照相机创建一个Intent:

设置其为视频采集模块:

启动系统自带的Intent视频采集模块:

具体的还包含一些系统调用:

可以按照android系统开发直接创建一个Activity项目, 只要设置Action, 系统即可调用自带的视频采集功能。

实现了上述功能后可以通过文件存储将文件临时存储在本地, 然后一边传输, 一边确认, 得到确认后删除, 相当于只是作为本地缓存。

文件存储可以使用Java中的IO操作来实现, 但这里可以直接调用Android在Context类中封装好了的输入流和输出流的获取方法。

通过合理配置嵌入式系统构成, 可以利用已有的采集和传输组件, 通过调用组件即可完成系统的采集和传输。

在此基础上, 我们完成了客户端也就是嵌入式系统端的视频采集及传输模块的设计, 当数据传到服务器端的时候, 可以通过服务器端来实现将人体信息作为数据予以保存及比对。

2人脸检测系统的实现

服务器端首要的任务是接收来自客户端的数据, 采用TCP协议实现连接服务, 走IP通道, 定义好Socket持续完成数据的接收。

服务器端接下来主要是通过人脸识别算法来实现人员识别, 然后系统与相关信息处理系统相连接, 直接提供给安全管理人员, 减轻安全管理人员的劳动强度, 提高安全系数。

人脸检测(face detection) 是指在输入图像中确定所有人脸的位置、 大小、 位姿的过程。 常用的人脸检测方法包括肤色区域分割方法、 基于模板特征方法、 基于统计模型方法等。 尽管检测技术经过多年发展, 人脸检测精度得到了大幅提高, 却需要耗费大量计算时间。 直到2002年Viola等人提出Ad- a Boost算法, 解决了处理速度的问题, 才使人脸检测真正走向实用。

利用Open CV的Adaboost算法程序, 实现了人脸检测, 更加有利于该算法推广与应用。

利用Open CV (Open Source Computer Vision Library) 计

算机视觉库开发实时的图像处理、 计算机视觉以及模式识别程序。

人脸检测的主要流程包含:(1) Haar特征的提取, 通常Haar-like feature特征有4种, 第一种用于表征人脸与非人脸区域的区别高效的特征,(2) 利用Viola的人脸检测方法应用积分图的思想将求积分运算转变为搜索积分图提高检测速度,(3) 将每个Haar特征作为一个弱分类器, 利用Ada Boost算法从大量的Haar特征中挑选出一组最优特征并构造出强分类器用于人脸检测,(4) 利用级联Adaboost分类器实现在保证检测效果的同时缩短计算时间。

Open CV中Adaboost算法实现主要用到了以下数据结构:

Cv Haar Classifier Cascade是Adaboost检测算法中用到的级联分类器, 它的成员包括stage_classifier, 这是一个数组, 其中每个元素是一个层级分类器, count指出了该级联分类器中有多少个层级分类器。

Cv Haar Stage Classifier层级分类器中包含了若干弱分类器, classifier是这些弱分类器的数组, count指出弱分类器的数目, threshold是该级分类器的阈值。

弱分类器typedef struct Cv Haar Classifier, haar_feature是该弱分类器的haar特征。 count是haar特征数量, 一般为1。 threshold是弱分类器的阈值, 数组alpha有两个值, 指出了弱分类器的返回值。 如果弱分类器的haar特征值大于阈值, 则返回left; 否则, 返回right。

haar特征的数据结构为: typedef struct Cv Haar Feature。

CV_HAAR_FEATURE_MAX指出了该haar特征中矩形区域的数量, r是矩形区域的相对位置, weight为矩形区域权值。

Adaboost人脸检测算法的处理流程主要含: (1) 将客户端传来的图像加载, 并调用级联分类器;(2) 通过图像处理技术将待检测图像转化为灰度图像;(3) 合并计算灰度图像的积分图;(4) 扫描图像, 使用级联分类器进行检测; (5) 对包含人脸的窗口中进行合并操作, 去掉重复的和误检的人脸, 得到最终的结果。

为了实现人脸探测, 需要用到如下几个库函数: AAM_IC. h, AAM_basic.h, AAM_Movie AVI.h, VJFace Detect.h等。

对人脸的识别前提是能探测到人脸数据, 其探测的设计思路计算法过程为:

调用系统探测库函数: #include " VJfacedetect.h"

定义探测的构造函数及析构函数:

实现haarcascade_frontalface_alt2.xml的定义:

实现其SPShape.resize函数:

利用Adaboost算法检测人脸, 主要是根据模型产生人脸初始形状; 其核心思想主要是通过反复迭代。

利用Adaboost算法检测人脸, 根据模型产生人脸初始形状, 将人脸特征点作为数据库保存, 在系统初始运行的时候不断积累人脸数据, 系统运行一段时间后, 以后就可以转入运行阶段, 如果以后采集到的人员不再以前采集到的人员库里面, 则说明是外来人员, 须加强管理, 该系统运行时间越长, 则可靠性越高。

3结语

人脸检测设计与实现 篇5

人脸检测与跟踪属于模式识别与计算机视觉的研究领域,它作为人脸信息处理中的一项关键技术,近年来得到了积极广泛的研究。已有的人脸跟踪系统往往依赖于具有大规模集成电路的计算机来实现,从而导致系统运行成本的增加,并且系统稳定性、可靠性也难以保证。随着嵌入式技术的发展和DSP的民用化,使得设计人脸检测与跟踪系统具有更加可靠的硬件基础,本文将Adaboost人脸检测算法与Camshift跟踪算法相结合,在考虑到数据处理的实时性、硬件系统的规模、软件系统调试难度等诸多因素的情况下,基于CCS3.2软件开发环境[1]及TMS320DM6446硬件开发平台,设计并实现了对视频序列的自动人脸检测与跟踪。

1 系统硬件架构及工作原理

1.1 系统硬件架构

本文采用TMS320DM6446[1]作为系统运行平台,如图1所示。该平台包括ARM9内核、C64X+内核、视频处理子系统(VPSS)和针对音视频优化的片内外设等部分。DM6446的双核架构可以同时提供高性能的DSP和RISC处理器技术,同时还可以支持多种操作系统、该平台提供了丰富的用户接口、极高的处理性能以及良好的功耗性能,能够充分满足视频处理实时性、运算量的要求。

图1中,ARM9内核是32位的RISC处理器,具有32位、16位两种指令集,可以处理的数据位宽有32位、16位和8位,通过流水线技术来提高内核执行效率。C64X+DSP核是TI最高性能的定点DSP处理器内核,是基于TI开发的增强型第二代超长指令字(VLIW)架构,是数字应用开发的理想处理器平台。DM6446的C64X+内核的工作频率为594MHz,可以达到4752MIPS的处理性能。其内部集成了64个32位通用寄存器,8个独立的处理功能单元(6个ALU、2个乘法器)。并且8个功能单元的指令集对视频、图像应用做了针对性的优化,能够在一个指令周期内完成4个16位的乘法累加(MAC)运算。

1.2 系统工作原理

系统图像处理子系统的工作原理及流程如图2所示。

系统上电后,由Flash完成DSP程序自举加载操作。程序加载结束后,由前端CCD摄像头捕捉视频信号,视频采集选用解码芯片TVP5146,将彩色摄像头采集的模拟视频信号处理成数字信号,通过视频输入端口,经视频处理前端VPSS传递给核心器件DM6446。DM6446先以DMA方式将原始图像数据放到SDRAM中,SDRAM被分成两个区,一个区存储原始图像,一个区存储处理后的图像。待一帧图像数据接收完全后,产生中断,实施人脸检测与跟踪。视频输出信号经由DM6446自带的D/A接口转成模拟信号,最后在LCD上实时显示图像。

2 系统软件设计

2.1 系统软件结构

系统的软件结构如图3所示。

DM6446的ARM内核上运行的Montavista Linux2.6.0操作系统负责视频采集,视频显示,算法控制,外围设备处理等。而DSP内核主要负责运行人脸检测与跟踪算法,该算法程序需要符合XDAIS-DM算法标准。DSP端的程序设计采用多线程的方式来实现,包括主线程、视频捕捉线程、视频压缩线程、视频跟踪线程、显示线程、控制线程。主线程在程序开始时运行,主要功能有解析命令行参数,初始化各线程运行环境,并创建各线程。视频捕捉线程通过V4L2接口驱动摄像头读取原始数据,视频跟踪线程把视频数据送到ARM和DSP的共享缓冲内存,并通知DSP执行跟踪算法。视频压缩线程,负责控制DSP侧的压缩算法并从共享内存中读取压缩数据。显示线程,从视频缓存中读取视频数据帧,并叠加目标跟踪框,最后通过Frame Buffer设备驱动输出显示。控制线程接收红外和键盘的控制命令,控制各个线程运行。

所有算法均通过CE(Codec Engine)模块管理。CE模块为应用程序提供统一的VISA(Video、Image、Speech及Audio)API,该应用程序接口将算法分为四大类,即视频、图像、语音及音频。算法模块按照该接口标准封装后便可以通过CE模块进行管理。

基于ARM端的程序为主控端,通过create()、control()、process()及delete()四类标准接口管理DSP端的算法模块,将DSP端的人脸检测与跟踪算法封装成软件模块,可供ARM-Linux调用,而DspLink完成DSP端和ARM端的通信。

2.2 人脸检测、跟踪算法

本文结合Adaboost人脸检测算法和Camshift跟踪算法,对初始帧图像用Adaboost人脸检测算法进行人脸检测,即自动初始化跟踪窗口,然后将初始化窗口作为人脸跟踪的入口参数,进入跟踪过程。将Adaboost人脸检测算法与Camshift跟踪算法相结合,构成一个高效、准确的自动人脸跟踪系统。

在Intel开源计算机视觉库(OpenCV)[2]中提出了使用Adaboost算法对人脸样本训练和检测人脸的程序,Adaboost人脸检测分为两个过程,即分类器训练过程和人脸检测过程。首先是分类器训练过程,由于在OpenCV下训练自己的分类器XML文件是个相当复杂和耗时的过程,并且自己没有得到充足的人脸数据库样本和非人脸样本进行分类器的训练,这样训练出的分类器的检测率就非常低而且误检率非常高。所以本文就充分利用了OpenCV自带的良好人脸检测分类器(包括正面的haarcascade_frontalface_alt.xml和侧面的haarcascade_profileface_alt.xml)。人脸检测过程主要是根据训练出的多层分类器结构,对输入的图像分层筛选,最后检测出人脸。

Bradski[3]提出的Camshift算法采用不变矩对目标的尺寸进行估算,实现了连续自适应地调整跟踪窗口的大小和位置,并将其应用在对连续彩色图像序列中的运动目标的快速跟踪。Camshift算法首先根据跟踪目标的颜色概率模型,将视频图像转换为概率分布图像(PDI),并初始化一个矩形搜索窗口,对每一帧PDI图形利用Meanshift算法搜索目标区域的最优区域,并根据搜索区域的不变矩估算跟踪目标的中心和大小,保存和输出当期帧搜索结果,并且用当前帧搜索结果作为下一帧图像初始化搜索窗口。如此循环,即可实现对目标的连续跟踪。

Camshift算法是一种动态变化的非参数密度函数梯度估计方法。对离散二维概率分布图像,该算法具体步骤如下:

①在颜色概率分布图中初始化一个搜索窗口W,其大小为S

②第二步,利用Meanshift[4]算法使搜索窗口“收敛”。

在2D概率分布图像中通过公式xc=Ζ10Ζ00,yc=Ζ01Ζ00计算搜索窗口的质心(xc,yc),调整搜索窗口的中心到计算的质心位置。重复该过程,直到“收敛”(即重心的位移小于给定的阈值)。

③重新设置搜索窗口的大小S并计算跟踪目标的输出参数。

对于2D颜色概率分布图像,零阶矩代表了跟踪目标在图像中的面积,又因为颜色概率分布图像是256个量化级别的灰度图像。因此,更新搜索窗口的宽度aZ00零阶矩的关系为a=2*Ζ00256,其中Ζ00=xyp(x,y)。考虑到对称性,a取最接近计算结果的奇数。在人脸跟踪应用中,由于人脸类似椭圆形,本文设置搜索窗口的大小为S,宽度为a,高度为1.2a,并用该窗口初始化下一帧Meanshift的搜索窗口。

④跳转到②进入下一帧的循环。

对于人脸跟踪系统,选择椭圆模型可以很好地近似人脸,在输出跟踪人脸的参数时,以椭圆模型的形式描述跟踪结果。椭圆模型参数包括椭圆的长轴、短轴和方向角。通过公式(1)-(3)计算搜索窗口的二阶矩,即可得到被跟踪目标的长轴、短轴和方向角。

Ζ20=xyx2p(x,y)(1)Ζ02=xyy2p(x,y)(2)Ζ11=xyxyp(x,y)(3)

式中,p(x,y)是PDI图像在坐标(x,y)处的像素值,也就是该点原像素的颜色概率值;xy的变化范围为搜索窗口的范围。图像中目标的长轴l与短轴w可通过公式(4)和(5)计算得到。

l=(a+c)+b2+(a-c)22(4)w=(a+c)-b2+(a-c)22(5)

其中,a=Ζ20Ζ00-xc2b=2(Ζ11Ζ00-xcyc)c=Ζ02Ζ00-yc2,方向角θ可通过公式(6)计算:

θ=12arctan(2(Ζ11Ζ00-xcyc)(Ζ20Ζ00-xc2)-(Ζ02Ζ00-yc2))(6)

根据上述步骤计算的结果,输出每一帧图像中最优匹配目标的中心和椭圆参数,在输出的视频序列图像中描绘出该区域,就形成了对目标的连续跟踪。

本系统算法流程图如图4所示,首先对初始帧图像进行人脸检测,即自动初始化跟踪窗口,然后将初始化窗口作为人脸跟踪的入口参数,进入跟踪过程。首先采用Adaboost人脸检测算法从视频流检测人脸,若检测到一个人脸,则将该人脸区域作为跟踪的初始窗口,计算颜色直方图并得到各种颜色的概率分布,并记录此时人脸的面积S。以下将连续从视频流中抓取下一帧图像,用Camshift算法进行跟踪,在每次跟踪时,判断跟踪目标区域面积是否大于S/3且小于5S/3, 如果在这个范围内,则继续跟踪,如果不在,则采用Adaboost检测人脸,在作为人脸跟踪的初始窗口,依次迭代,从而实现人脸的自动跟踪。

3 实验结果与结论

本文在分析和研究Adaboost和Camshift算法的基础上,以TI的TDS320DM6446DVEVM为硬件平台,利用C语言、汇编语言和CCS3.2集成开发环境,实现了Adaboost人脸检测算法和Camshift跟踪算法,并最终实现了基于DM6446的自动人 脸跟踪 系统。该系统处理速度可以达到30fps,基本能够准确、实时地检测和跟踪人脸,对监控系统的智能化发展具有重要参考价值。图5给出了在自然光照条件下部分人脸检测定位及跟踪效果。

参考文献

[1]彭启琮,等.TI DSP集成开发环境(CCS)使用手册[M].清华大学出版社.

[2]赵勇,等.DAVINCI技术原理与应用指南[M].东南大学出版社.

[3]Open Source Computer Vision Library(OpenCV)[EB/OL].ht-tp://sourceforge,net/projects/opencvlibrary.

[4]Bradski GR.Computer vision face tracking as a component of a per-ceptual user interface[C].Proceedings of IEEE Workshop Applica-tions of Computer Vision.Princeton,NJ:IEEE,1998:241-219.

人脸检测设计与实现 篇6

关键词:OpenCV,人脸检测,Haar特征,AdaBoost算法

0 引言

人脸检测问题最初来源于人脸识别 (Face Recognition) , 一个完整的人脸自动识别系统包括人脸检测、特征提取、匹配识别3大基本过程, 而人脸检测是人脸识别的首要关键步骤。人脸检测指在视频或图像中检测出人脸位置、大小的过程。作为人脸信息处理中的一项关键技术, 人脸检测技术在基于内容的检索、数字视频处理、视觉监测、身份验证、安全监测等方面有着重要的应用价值。在大量人脸检测算法中, 能获得较好的人脸检测速度与效果的是2001年由PaulViola和Michael Jones首先提出的Adaboost算法。OpenCV (Intel·Open Source Computer Vision Library) 是由Intel公司面向应用程序开发者提供的一个开源的计算机视觉库, 采用C/C++语言编写, 包含300多个处理函数[1,2], 具有强大的图像和矩阵运算能力, 为视频或图像处理搭建了很好的软件平台。本文基于OpenCV, 从目标检测方法出发, 利用Adaboost算法设计了一个人脸检测系统, 该系统能够快速检测出图像或视频中的人脸, 包括有遮挡物的人脸。

1 人脸检测方法

本系统选取的人脸检测算法是一种目标检测方法。目标检测方法即利用Haar特征对样本 (大约几百幅样本图片) 进行分类训练, 得到一个级联的boosted分类器。分类器训练完以后, 就可以应用于输入图像中感兴趣区域的检测, 检测到目标区域分类器则输出为1, 否则输出为0。为了搜索不同大小的目标物体 (根据人脸大小的不确定性) , 分类器被设计为可以进行尺寸改变, 这比改变待检图像的尺寸大小更为有效。所以, 为了在图像中检测未知大小的目标物体, 扫描程序通常需要用不同比例大小的搜索窗口对图片进行几次扫描。由此可知, 目标检测方法是一种基于Haar特征分类器的人脸检测方法, 可以分为两个体系, 即训练体系和检测体系。

基于Haar特征分类器的人脸检测方法的要点如下: (1) 使用Haar特征检测; (2) 使用积分图[3}对Haar特征求值进行加速; (3) 使用AdaBoost[4]算法训练区分人脸和非人脸的强分类器; (4) 使用筛选式级联把强分类器级联到一起, 以提高准确率。

2 人脸检测系统实现

2.1 系统流程

该系统流程如图1所示。

2.2 分类器

在此系统中, 为了更好地检测照片中是否存在人脸, 采用的分类器是haarcascade_frontalface_alt2.xml。在OpenCV中提供了用于加载分类器的函数, 即cvLoad。使用OpenCV的haartraining应用程序, 从给定的训练集训练分类器。训练一个分类的4个步骤如下:

(1) 收集打算学习的物体数据集, 将其存储在一个或多个目录下面。如果数据集在路径data/faces/下, 索引文件face.idx将如下所示:

如果分类器充分发挥作用, 则需要收集很多高质量的数据 (1 000~10 000个正样本) 。

(2) 使用OpenCV自带的createsamples程序建立正样本的向量输出文件。通过该文件可重复训练过程, 使用同一个向量输出文件尝试各种参数。该程序读入第一步的face.idx文件, 输出一个格式化的训练文件face.vec。之后createsamples提取图像中的正样本, 再归一化并调整到指定大小 (30*40) 。

(3) Haar分类器是一个两类分类器:它只判断图像中的物体是否 (“是”、“否”) 与训练集相似。第2步中已说明怎样收集和处理正样本, 下面说明怎样收集和处理反样本。任何我们不感兴趣物体的图像都可以作为反样本, 最好是从需要测试的数据中选取反样本图像, 将其放到一个或几个路径下面, 并由图像文件名组成索引文件, 一个文件名占一行。如文件名为backgrounds.idx的图像索引文件可以包含如下路径和文件名:

(4) 从命令行创建训练:

执行之后, 获得的分类器将存储在文件face_classifier_take_3.xml中。

2.3 灰度化待检测图像和直方图均衡化

灰度化待检测图像是为直方图均衡化作准备的, 其采用OpenCV中的cvCvtColor函数, 通过定义CV_2常数完成色彩空间转换。

直方图均衡化采用OpenCV中提供的函数:cvEqualizeHist。该函数采用如下方法对输入图像进行直方图均衡化, 通过该方法归一化图像亮度并增强对比度: (1) 计算输入图像的直方图H; (2) 直方图归一化, 因此直方块和为255; (3) 计算直方图积分:H′ (i) =∑0jH (j) ; (4) 采用H′作为查询表:dst (x, y) =H′ (src (x, y) ) , 进行图像变换。

先利用cvCvtColor将图片转化为灰度图, 再将灰度图对比度提高, 可使图片本来暗的地方更暗, 亮的地方更亮, 这样可使图片更容易被算法识别。

2.4 检测

完成以上工作均是为检测人脸作准备, 函数cvHaarDetectObjects使用针对目标物体训练的级联分类器在图像中找到包含目标物体的矩形区域, 并将其作为一个序列的矩形框返回。函数以不同比例大小的扫描窗口对图像进行搜索 (察看cvSetImagesForHaarClassifier Cascade) , 每次都要对图像中的重叠区域利用cvRunHaarClassifierCascade进行检测。函数在处理和收集到候选方框 (全部通过级联分类器各层区域) 之后, 对这些区域进行组合并且返回一系列各个足够大组合中的平均矩形。调节程序中的缺省参数 (scale_factor=1.1, min_neighbors=3, flags=0) 用于对目标进行更精确同时也耗时更长的进一步检测。为了能对视频图像进行更快的实时检测, 参数通常是:

scale_factor=1.1, min_neighbors=3, flags=CV_HAAR_DO_CANNY_PRUNING, min_size=

(1) cvHaarDetectObjects用于检测图像中的目标, 其原型如下:

CvSeq*cvHaarDetectObjects (const CvArr*image, CvHaarClassifierCascade*cascade, CvMemStorage*storage, double scale_factor=1.1, int min_neighbors=3, int flags=0, CvSize min_size=cvSize (0, 0) ) ;

设置scale_factor参数可以决定每两个不同大小的窗口之间有多大跳跃。参数min_neighbors控制着误检测, 在人脸识别代码中设置该参数为默认值 (3) 时则至少有3次重叠检测, 才认为人脸确实存在。参数min_size提示寻找人脸的最小区域。

(2) cvSetImagesForHaarClassifierCascade函数用于设定积分图和合适的比例系数 (即窗口尺寸) 。当分析的矩形框全部通过级联分类器的每一层时返回正值, 否则返回0或负值。

(3) 函数cvRunHaarClassifierCascade用于对单幅图片的检测, 其原型为:

int cvRunHaarClassifierCascade (CvHaarClassifierCascade*cascade, CvPoint pt, int start_stage=0) ;

(4) 检测要点如下:在实际检测时, 首先模板大小为原始模板大小, 第一轮滑过图像之后检测到的目标是该尺寸目标;第二轮将模板按比例放大, 此程序中根据scale_factor=1.1, 即放大10%, 再次滑过图像, 训练时所储存的Haar特征值同样按比例放大;第三轮再放大10%, 以此类推, 直到大于图片大小。

2.5 滑动条

OpenCV的HighGUI中没有包含一些类似于按钮的控件。在OpenCV中, 实现按钮的功能可用图像代表, 当触发了鼠标事件, 判断鼠标当前位置 (x, y) 是否在代表按钮图像范围内, 在该情况下, 所有按钮实际上是通过窗口的鼠标回调函数实现的。本系统使用一个只有两个可选位置的滑动条模拟按钮功能, 滑动条的初始位置值为0, 当滑动条位置值为1时, 程序则调用人脸检测函数。HighGUI中创建滑动条的函数为cvCreateTrackbar, 其函数原型如下:

int cvCreateTrackbar (const char*trackbar_name, const char*window_name, int*value, int count, CvTrackbarCallback on_change) ;

3 实验测试结果及分析

3.1 实验测试结果

选取不同图像对其中的人脸进行检测测试, 得到测试结果如图2~图4。测试结果表明, 函数cvHaarDetectObjects中flags参数值有4种, 设CV_HAAR_DO_CANNY_PRUNING=0, CV_HAAR_SCALE_IMAGE=1, 程序中参数的变动会导致程序结果的改变。表1为同一图片在不同参数下的人脸检测结果, 对应结果如图2。图3为对有遮挡物人脸的检测, 图4为人脸漏检、误检结果示例。

3.2 测试结果分析

从函数cvHaarDetectObjects中提取4个重要参数进行分析, 由表1的实验结果可知:当固定scale_factor、flags、min_size, 而min_neighbors不断增长时, 误检测率不变, 但会漏检人脸;当固定scale_factor、flags、min_neighbors, 而min_size增长时, 如果图片中人脸较小, 而min_size偏大, 则会以丢失小物体为代价减少计算量。

照片中如果出现与人脸轮廓相似的区域, 程序将很难辩认真伪, 如图4中间的图像。由于haarcascade_frontalface_alt2.xml分类器专用于正面人脸检测, 当照片中出现侧面人脸或人脸五官不正时, 系统将无法检测到人脸, 但当图像中的人脸有遮挡物 (如花朵、口罩、眼镜等) 时, 程序还是会根据人脸的几何结构将正确的人脸位置检测出来。

从检测率和误检测率角度分析, 由于人脸模样千变万化, 在不同背景下拍摄的人脸面部角度不同, 比如在样本采集时只采集正面人脸图像, 然而在拍摄时, 摄入的人脸可能是侧着的, 或者化了妆, 由于这些因素完全可以模拟Haar特征, 因此本程序可能检测不出或检测错误。另外, 由于样本采集工作和制作比较复杂, 并且采集数量有限, 未能完全代表所有人脸特征, 因此对于苛刻的人脸检测, 本程序有可能漏检或误检。

4 结语

基于计算机视觉类库OpenCV实现的人脸检测系统, 采用级联分类器的方法对不同图像中的人脸进行检测, 测试了函数cvHaarDetectObjects中不同参数值对人脸检测结果的影响, 并对实验结果进行了分析。系统对不同图像有较强的适应性, 能够比较精确地判断出人脸位置, 尤其对有遮挡物人脸的检测, 具有一定应用价值。

参考文献

[1]ARY BRADSKI, ADRIAN KAEBLER.学习OpenCV[M].北京:清华大学出版社, 2009.

[2]陈志恒, 姜明新.基于openCV的人脸检测系统的设计[J].电子设计工程, 2012, 20 (10) :182-185.

[3]黄文杰, 陈斌.一种快速图像处理的积分方法[J].计算机应用, 2005, 25 (1) :266-268.

人脸检测设计与实现 篇7

人脸识别的研究内容包括以下三个方面。 (1) 人脸检测[2]:研究如何从各种不同的背景中检测出人脸的存在并确定其位置, 这一任务主要受光照、噪声、头部倾斜度以及各种遮挡的影响。 (2) 特征提取:确定表示检测出的人脸和数据库中的己知人脸的描述方式。通常的表示方法包括几何特征 (如欧式距离, 曲率, 角度等) [3], 代数特征[4] (如矩阵特征矢量) , 固定特征模板, 特征脸, 云纹图等。 (3) 人脸识别[5]:将待识别的人脸与数据库中的已知人脸进行比较, 得出相关信息, 这一过程的核心是选择适当的人脸表示方式和分类策略。

一个典型的人脸识别系统一般由数据获取、预处理、特征提取、分类决策及分类器设计五部分组成。本系统采用ORL人脸数据库中已经经过预处理的人脸进行特征提取、分类决策和分类器设计。ORL数据库中有40个人, 每人10张人脸图像, 共400个人脸图像, 图1为该数据库随机抽取的3个人的部分人脸图像。本系统的特征提取方法采用基于奇异值分解 (Singular Value Decomposition) 的KL (KarhunenLoeve) 变换, 由原始人脸图像中提取特征向量;分类器设计在训练过程中完成, 利用已知人脸图像样本进行训练, 确定KL变换的具体参数;分类决策即识别过程, 采用最小距离法对未知的人脸样本进行分类决策。

1 基于奇异值分解的KL变换

KL变换又称主成分分析, 是图像压缩的一种最优正交变换。高维的图像空间经过KL变换后得到一组新的正交基, 保留其中一部分重要的正交基, 由这些基可以组成低维线性空间。如果假设人脸图像在这些低维线性空间的投影具有可分离性, 就可以将这些投影作为识别的特征向量, 该特征向量又称为对“特征脸”的投影。

假设对向量集合{xi}, i=1, 2……中的每一个x用确定的完备正交归一向量系展开, 可得:

假设我们只用有限项来估计x, 即

由此引起的均方误差是

用拉格朗日乘子法, 可以求出在满足正交条件下, 取极小值的坐标系统:

从而我们可以得出结论:以矩阵ψ的特征向量作为坐标轴来展开x时, 其截断均方误差具有极值性质, 且当取d个uj来逼近x时, 其均方误差为图2 具有最大特征值的1 0个“特征脸”图1 ORL数据库人脸图像, 每人5张。式中是矩阵ψ的相应特征值。

当取与矩阵ψ的d个最大特征值对应的d个特征向量来展开x时, 其截断均方误差和在所有其他正交坐标系情况下用d个坐标展开x时所引起的均方误差相比为最小。这d个特征向量所组成的正交坐标系称作x所在的D维空间的d维KL变换坐标系, x在KL坐标系上的展开系数向量称作x的KL变换[6]。

然而, 直接计算矩阵的特征值和正交归一的特征向量十分困难的, 因此需采用奇异值分解方法。设xnxr是一秩为r的矩阵, 则存在两个正交矩阵:和, 以及对角矩阵, 满足。其中, 为矩阵XXT和XTX的非零特征值, ui和vi分别为XXT和XTX对应于的特征向量, 称为X的奇异值。

若以训练样本集的总体散布矩阵产生矩阵, 即

其中, Xi为第i个训练样本的图像向量, u为训练样本集的平均向量, M为训练样本的总数, 。则由奇异值分解法很容易求出S的特征值及相应的正交归一特征向量ui。

将特征值由大到小排序:, 其对应的图像的特征向量分别为。这样每一幅人脸图像都可以投影到由这组特征向量张成的子空间中, 每一个特征向量所对应的图像也称为图像的“特征脸”。任何一幅图像都可以表示为这组“特征脸”的线性组合, 其加权系数即是KL变换的展开系数。

在ORL数据库中, 选取每人的5张人脸图像为训练样本, 组成训练样本集, 通过奇异值分解分解的方法求出该训练样本集的特征向量空间。其中具有最大特征值的10个“特征脸”如图2所示。

2 人脸分类器的设计

本系统采用最小距离法作为分类器的设计方法。

现有4 0个类别的待识别人脸问题, 每个类别分别用来表示, 每个有标明类别的已知样本5个。我们可以规定ωi类的判别函数为:

其中xik的角标i表示ωi类, k表示ωi类5个样本中的第k个。则分类决策规则可以写为:若,

则。

也就是说对未知样本x, 我们只要比较x与200个已知类别的样本之间的欧氏距离, 并决策x与离它最近的样本同类。

整个系统的训练及识别过程流程图, 如图3所示。

3 人脸识别结果分析及总结

实验所用的ORL人脸数据库中有40个人, 每人10张人脸图像, 共400个人脸图像。选取每人的5张人脸图像为已知训练样本, 而其余的5张人脸为待识别的样本。训练时选取的特征向量数n分别为10、20、30、40、50、60、70和80。则经过KL变换后表示人脸图像的低维子空间Y的大小分别为10×200、20×200、30×200、40×200、50×200、60×200、70×200和80×200, 而原来的图像空间大小为10304×200。可见随着特征向量数n的不同, 即KL变换系数的维数不同, 经KL变换后图像数据得到了有效的降维。根据降维的程度不同, 所得到的识别率也有所不同, 如表1所示。

由表1分析得知, 随着特征向量数的增加, 变换后的矩阵Y保留原人脸图像的信息也增加, 当n小于等于60时, 识别率随着n的增加而增加。但是当n大于60后, 不管n怎样增加, 识别率都不会再增加。可见基于KL变换的人脸识别系统识别率的最大极限值为95%。错误识别的原因可能是由于线性分类器固有的缺陷照成的。

如果想进一步提高人脸识别率, 可以考虑改进分类决策的方法。本系统采用的最小距离分类法属于线性的分类器, 而利用神经网络这类学习能力更强的非线性分类器对高维人脸识别问题可能会有更好的解决。

参考文献

[1]Chellappa R, Wilson CL, Sirohey S.Human and machinerecognition of faces:A survey.Proceedings of The IEEE, 1995, 83 (5) :705~740.

[2]梁路宏, 艾海舟, 徐光佑, 等.人脸检测研究综述[J].计算机学报, 2002 (17) , 25 (5) :449~458.

[3]林福严, 刘巧静, 李兴森.人脸特征的定位和提取[J].电子技术应用, 2000, 7.

[4]Turk M.Pentlen, A.Eigenfaces for Recognition[J].Journal ofCognitive Neuroscience, 1991, 23 (3) :71~86.

[5]高文, 周德龙, 赵德斌.基于奇异值分解和判别式KL投影的人脸识别[J].软件学报, 2003, 14 (4) :783~789.

人脸检测设计与实现 篇8

1 主要技术简介

Java CV是一种基于GPLv2协议的视觉处理库。Java CV封装了Open CV、ARTool Kit Plus、video Input、Open Kinect和libdc1394等常用的视觉编程库接口。由于Java CV是通过Java实现, 可以通过utility类在各种Java平台上调用这些接口, 尤其是现在在移动设备上最为流行的Android系统, 其市场前景颇为乐观。

人脸识别登录系统设计主要采用主成分分析 (PCA) 方法, 将人脸图像区域处理成一种随机向量。利用K-L变换得到正交变换基, 具有较大特征值的基底有极高的概率表示着与人脸相似的形状特征。利用若干基底的线性组合可以实现人脸图像的特征提取和特征选择, 而且具有非常高的准确度。

人脸认证登录包含注册和登录两个部分。以下详细介绍这两部分的具体设计与实现方法。

2 用户注册部分设计与实现

用户注册将指定人头像图片进行采集加工, 形成学习文件, 为以后的登录注册提供判定依据。用户注册部分包括注册拍照, 图片预处理, 图片学习三步骤。

注册拍照部分利用摄像设备拍摄目标头像多角度的照片, 在拍照时为了后期处理方便, 使用单纯深色背景。用Java CV封装Open CV的Open CVFrame Grabber完成从摄像视频中抓取照片的工作。

对拍摄的到的照片进行图片预处理主要为图像特征值提取做前期准备。摄像设备采集到的图像由于采集环境的不同, 如光照明暗程度以及设备性能的优劣等, 往往存在有噪声, 对比度不够等缺点。另外, 距离远近, 焦距大小等又使得人脸在整幅图像中间的大小和位置不确定。为了保证人脸图像中人脸大小, 位置以及人脸图像质量的一致性, 必须对图像进行预处理。图像预处理需要尽量消除图像中无关的信息, 滤除干扰、噪声, 增强有关信息的可检测性和最大限度地简化数据, 从而改进特征抽取、图像分割、匹配和识别的可靠性。

对于摄像头拍出照片, 使用cv Haar Detect Objects () 从照片找出人脸, 在分类器的选取上Open CV提供了已经做好的前脸分类器。在后期的图片分析环节, 主要针对图像的灰度值进行处理, 所以需要将彩色的人脸图片进行灰度化处理。针对每一像素, 利用灰度变换公式将彩色图片转成灰度图。

int gray=r*0.3+g*0.59+b*0.1

为了淡化人脸偶发的青春痘, 蚊虫叮咬的包带来的非永久性特征, 需要对灰度图片进行滤波, 使用cv Smooth () 函数将smoothtype设置为CV_GAUSSIAN即可。Java CV中还可以根据需要, 使用Open CV另外还提供的带尺度变换和不带尺度变换的模糊, 中值滤波, 双向滤波等方法对图像进行处理。

为了尽量消除光照亮度的影响, 尽可能只体现人脸面部特征, 将灰度图片进行灰度均值归一化处理, 将所有图片的灰度平均值统一。对比灰度均值归一化前后效果图, 人脸特征没有失真, 而对于亮度的影响却可以得到明显的改善。

然后对灰度图片进行左右边界检测, 消除左右脸以外的部分, 此部分主要针对像素的灰度值尽行处理, 对于黄色人种和白色人种, 在将脸部灰度均值归一化处理后, 人脸部分的灰度值会高于灰度均值, 而背景的灰度值低于灰度均值, 可以采用灰度均值作为阈值。最后进行尺寸归一化处理, 将所有图片尺寸拉伸到同一尺寸, 以消除拍摄时距离远近, 焦距大小带来尺寸上的影响。

图片学习需要对预处理完成的照片进行特征值计算;通过变换矩阵, 投射到子空间, 实现数据降维;最后学习文件输出。

通过cv Term Criteria () 方法决定学习算法的结束条件, 然后用cvCalc Eigen Objects () 方法计算图像矩阵的特征向量, 特征值和均值, 即降维处理。再用cv Eigen Decomposite () 方法通过特征向量和图像矩阵来解析每张图片降维后对应的系数。训练的特征值的数量设定为 (样本数-1) 。最后将训练文件保存, 作为识别比较的判定依据。

3 用户登录部分设计与实现

用户登录部分主要分为图像采集和图片识别两个部分, 其中图像采集主要包括登录拍照和图片预处理两个子流程。登录拍照与注册拍照只是在照片的采集数量上不同, 直接拍5张照片即可, 拍摄的照片数没有规定, 可以在处理时间和最后得到的置信度折中选取。图片预处理子流程和注册部分完全一样, 在此不再赘述。

对于采集到的5张登录图片, 分别取出相应的特征值, 特征值的计算方法与注册部分相似, 将计算出的特征值与已注册的每一个人的人脸学习文件中的特征值计算距离。参考马氏距离的加权思想, 对特征值的欧氏距离进行加权。选出加权后均方差之和最小的一个计算置信度。

置信度定义为:

其中 为训练样本值, a j为样本权值。

置信度高于判决门限则认定登陆成功, 否则登录失败。

4 结论

系统进过测试, 人脸识别登录拒识率为6.81%, 误识率为3.34%, 平均登录时间2.347秒。提高置信阈值后可以使误识率降低到0, 但拒识率会提高到30%以上。在使用时需要根据实际情况调整置信阈值, 折中误识率与拒识率, 以满足实际应用的需求。对于拒识的情况, 系统还提供了手动用户名密码的验证作为补充。后台使用postgre SQL作为数据库。根据需要, 用户还可以手动对数据库的连接进行配置。

参考文献

[1]孙志远.人脸识别算法研究[D].无锡:江南大学, 2007.

[2]李文革.基于主成分分析的人脸识别[D].济南:山东大学, 2008.

[3]方盛昌.基于核的特征提取方法的人脸识别研究[D].上海:东南大学, 2008.

[4]孙伟, 李晓飞.基于PCA的实时人脸识别系统[J].中国多媒体通信, 2013, 4.

[5]何国辉, 甘俊英.二维主元分析在人脸识别中的应用研究[J].计算机工程与设计, 2006, 12.

[6]李冠楠, 李强.一种基于人脸核心特征的PCA人脸识别算法及应用[J].电子器件, 2012, 5.

上一篇:企业存货的管理下一篇:李白诗歌的创作风格