火焰识别算法讲解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学科分类号(二级)520.6040
本科学生毕业论文(设计)
题目基于人脸识别门禁系统
姓名王远正
学号104100137
院、系信息学院
专业计算机科学与技术
指导教师(职称/学历)周屹
(实验师/硕士)
基于人脸识别门禁系统
摘要:人脸识别技术是生物技术和计算机技术的复合应用,随着科技和社会的发展,现代社会对门禁的安全性和可靠性的要求也越来越高;提出一种基于Android手机的视频门禁系统,具有灵活性好、功能丰富等优点。
先从局域网通信方式和手机门禁终端两方面提出了系统方案特点,接着设计系统框架,并从mjpg-streamer视频服务器进行视频数据采集与发送,服务器端采用Apache服务器以及Android手机客户端软件设计三方面对系统进行了详细设计,最后对Android
客户端软件进行了简单测试。
结果证明该方案可行,且运行稳定,有广泛的应用价值。
关键词:人脸识别;门禁系统;ARM11;android系统开发;远程监控
1 概述
如今随着计算机、网络、信息技术的快速发展,如今已经开始步入了网络信息化时代,针对公民身份验证的需求也越来越高。
在电子商务、网上银行、公安、海关、金融、医保、社保、考勤等领域,快速准确的身份识别和验证技术有着广泛的需求和应用前景。
传统的个人身份识别与认证主要依赖身份证、户口本、驾照、钥匙、IC卡、各种口令密码等技术来进行。
而各种口令密码存在容易遗忘、容易记错等缺点,身份证、驾照容易丢失等缺点;钥匙、IC卡存在着容易复制被复制、容易被盗、损坏等缺陷;传统的身份识别和认证技术已经不能满足社会的发展需求。
移动设备的普及和发展,原来b/s查看变得越来越不方便,传统的视频监控系统大部分采用PC作为监控终端,需要在指定的地点以及专用网络设备支持的环境下才能对目标现场进行监控,极大地限制了监控系统的灵活性和应用范围。
而现代3G移动网络的飞速发展,使视频传输在智能手机上得以轻易实现。
为解决传统监控系统不灵活的弊端,让人们通过移动手机随时对家人和住房等进行视频安防检测,本系统采用的是一种基于人脸识别+android控制设计方案。
2 Android移动操作系统
2.1 移动系统概述
随着塞班的没落,Android系统强势建立,可能近期会形成了Windows Phone、Ios、Android三大系统的三足鼎立之势。
随着乔布斯的逝世,苹果已经进入了后乔布斯时代,如果苹果设备不能再改变世界的话,可能苹果也会在什么时候悄悄离开人们是视线。
作为正在发展的Windows Phone系统,显得很多地方的还不成熟。
Android正在也蓬勃的面孔出现在我们的面前,跟另外两个系统相比,开源、免费、更新速度快的特征,吸引着大批手机开发厂商,三星、HTC、LG、华为、中兴等等。
2.2 Android系统特性
●全开放智能移动电话平台
●支持多硬件平台
●使用众多的标准化技术
●核心技术完整、统一
●完善的SDK和文档
●完善的辅助开发工具
2.3 Android架构
2.1、Linux Kernel
Android基于Linux 2.6提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。
Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。
如果你学过计算机网络知道OSI/RM,就会知道分层的好处就是使用下层提供的服务而为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生了变化不会影响到上层。
也就是说各层各司其职,各层提供固定的SAP(Service Access Point),专业点可以说是高内聚、低耦合。
如果你只是做应用开发,就不需要深入了解Linux Kernel层。
2.2、Android Runtime
Android 包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。
每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的进程中。
Dalvik虚拟机设计成,在一个设备可以高效地运行多个虚拟机。
Dalvik 虚拟机可执行文件格式是.dex,dex格式是专为Dalvik 设计的一种压缩格式,适合内存和处理器速度有限的系统。
大多数虚拟机包括JVM都是基于栈的,而Dalvik虚拟机则是基于寄存器的。
两种架构各有优劣,一般而言,基于栈的机器需要更多指令,而基于寄存器的机器指令更大。
dx 是一套工具,可以將Java .class 转换成.dex 格式。
一个dex文件通常会有多个.class。
由于dex有時必须进行最佳化,会使文件大小增加1-4倍,以ODEX结尾。
Dalvik虚拟机依赖于Linux 内核提供基本功能,如线程和底层内存管理。
2.3、Libraries
Android包含一个C/C++库的集合,供Android系统的各个组件使用。
这些功能通过Android的应用程序框架(application framework)暴露给开发者。
下面列出一些核心库:
系统C库——标准C系统库(libc)的BSD衍生,调整为基于嵌入式Linux设备
媒体库——基于PacketVideo的OpenCORE。
这些库支持播放和录制许多流行的音频和视频格式,以及静态图像文件,包括MPEG4、H.264、MP3、AAC、AMR、JPG、PNG
界面管理——管理访问显示子系统和无缝组合多个应用程序的二维和三维图形层
LibWebCore——新式的Web浏览器引擎,驱动Android 浏览器和内嵌的web视图SGL——基本的2D图形引擎
3D库——基于OpenGL ES 1.0 APIs的实现。
库使用硬件3D加速或包含高度优化的3D软件光栅
FreeType ——位图和矢量字体渲染
SQLite ——所有应用程序都可以使用的强大而轻量级的关系数据库引擎
2.4、Application Framework
通过提供开放的开发平台,Android使开发者能够编制极其丰富和新颖的应用程序。
开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等,很多很多。
开发者可以完全使用核心应用程序所使用的框架APIs。
应用程序的体系结构旨在简化组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。
这一机制允许用户替换组件。
所有的应用程序其实是一组服务和系统,包括:
视图(View)——丰富的、可扩展的视图集合,可用于构建一个应用程序。
包括包括列表、网格、文本框、按钮,甚至是内嵌的网页浏览器
内容提供者(Content Providers)——使应用程序能访问其他应用程序(如通讯录)的数据,或共享自己的数据
资源管理器(Resource Manager)——提供访问非代码资源,如本地化字符串、图形和布局文件
通知管理器(Notification Manager)——使所有的应用程序能够在状态栏显示自定义警告
活动管理器(Activity Manager)——管理应用程序生命周期,提供通用的导航回退功能
2.5、Applications
Android装配一个核心应用程序集合,包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人和其他设置。
所有应用程序都是用Java编程语言写的。
更加丰富的应用程序有待我们去开发!
3 算法设计与实现
本算法分为图像的预处理和火焰目标判定两部分。
预处理是指运用上述理论对采集到的图像进行一些处理,为后续的火焰识别做好准备。
其主要目标是把火焰目标从图像中分割出来,包括帧差法提取前景,阈值法分割目标,形态滤波等步骤。
通过预处理就能把火焰目标从图像中分割出来,最后就是提取火焰的特征进行判定是否发生了火灾。
火灾发生时,其各种物理现象在图像上的表现也是十分明显。
其主要特征包括颜色值和亮度、面积变化、边缘变化、形体变化、闪动规律、分层变化等[8]。
为了保证算法的实时性,必须研究早期火焰的图像特征,并选取可靠有效的特征做为识别判据。
本文选取了火焰目标的颜色值和亮度、面积、圆心度和火焰尖角数作为判据,只有当所有判据都满足,才识别为火灾,其算法流程如下图1所示。
具体实现步骤如下所示。
N
图 1 算法流程图
Figure 1 algorithm flow chart
3.1 彩色图像灰度化
本文使用OpenCv打开摄像头,然后从摄像头中获取每一帧图像。
摄像头采集到的是RGB图像,而RGB图像的每个像素有三个分量分别表示R、G、B。
经测试本系统所使用的摄像头采集到的图像长为640像素,宽为480像素。
这样一张彩色图所占的内存为640*480*3/1024=900Kb,对于arm6410开发板来说计算量过大,而转换为灰度图像只有300Kb所以首先要将获取的RGB图像转换为灰度图像再进行处理。
这样可以有效地提高程序运行效率。
实际上RGB并不能反映图像的形态特征,只是从光学的原理上进行颜色的调配,而灰度图像能反映整幅图像的色度和亮度等级分布。
3.2 帧差法提取前景
帧差法是最简单的背景减除方法,基本原理就是用一帧减去另一帧(也可能是后几帧),然后将足够大的差别标为前景,这种方法往往能捕捉运动目标的边缘。
因为它的背景模型就是上一帧的图,所以不需要建模,其背景不积累,更新速度快、算法简单、计算量小。
综合考虑开发板的运行效率本文使用帧差法实现背景减除。
简而言之,假如pFrame为摄像头采集到的原始图像,pBkimg为存储背景的图像空间结构,pFrimg为存储帧差结果的图像空间结构,则实现帧差的过程如下:
cvCvtColor(pFrame,pFrImg,CV_BGR2GRAY);//将pFrImg转换为灰度前景图cvCvtColor(pFrame,pBkImg,CV_BGR2GRAY);//将pFrImg转换为灰度背景图cvConvert(pFrImg,pFrMat);//将背景图像数据转换为矩阵数据。
cvConvert(pFrImg,pBkMat);//将前景图像数据转换为矩阵数据。
cvConvert(pFrImg,pFrameMat);//将当前帧图像转换为矩阵数据。
cvAbsDiff(pFrameMat,pBkMat,pFrMat);//帧差,结果存在前景矩阵中。
cvConvert(pFrMat,pFrImg);//将前景矩阵转换为图像格式,用以显示。
cvConvert(pBkMat, pBkImg);
cvShowImage("frame",pFrame);显示当前帧图像。
cvShowImage("frimg",pFrImg);//帧差显示结果。
cvShowImage("bkimg",pBkImg);//显示上一时刻灰度图像
帧差效果为图1所示,左边图像为当前帧RGB图像pFrame,右边图像为上一时刻灰度图像pBkImg,中间图像为帧差结果。
从实验结果可以看出,当有移动物体进入时,帧差法能准确检测出运动目标。
图 2. 背景减除
Figure 2. Background Deduction
3.3 二值阈值化
在完成了背景减除之后,得到了目标前景,这时希望对目标前景图像中的像素做出最后的决策,或直接剔除一些低于或高于一定值的像素。
本文使用基于阈值的分割方法,在OpenCv中,函数cvThreshold()可以完成这些任务。
其基本思想是给定一个数组和一个阈值,然后根据数组中的每个元素的值是低于还是高于阈值而进行一些处理。
阈值的选取本文使用Ostu法,原因在于本系统涉及到网络传输视频,而采用了网络摄像头,而普遍的网络摄像头像素过低,对光线明暗变化过于敏感。
如果把阈值设为固定值,则分割效果容易受到天气变化的影响,比如晴天和阴天分割出的图像效果不一样。
而相比自适应阈值,Ostu法自动选取的阈值更准确,该方法在一定条件下不会受图像亮度与对比度的影响。
阈值的类型本文选取CV_THRESH_BINARY,即二值阈值化,对应的操作是:dst=(src>T)?M:0 。
这样分割出的图像的所有像素值只可能是0或者是255,下一步就可通过扫描图像中的白点数来获得目标的范围。
取得目标的范围后,以后的步骤就只需要在这个范围内计算,而不需要每次都扫描完整幅图像。
这对于6410开发板来说能节省不少开销,提高程序的运行效率。
具体过程如下:int Threshold = ostu((char *) pFrImg->imageData,pFrImg->height,pFrImg->
widthStep,0,0,pFrImg->widthStep,pFrImg->height,1);//用Ostu法求出阈值。
cvThreshold(pFrImg,pFrImg,threshold,255.0,CV_THRESH_BINARY);//二值阈值化帧差得到的前景图。
GetAim(pFrImg);//求出目标范围,即得到top,bottom,left,right四个点。
cvRectangle(pFrImg,cvPoint(left,top),cvPoint(right,bottom),CV_RGB(255,255,2
55),1,8,0);//用白色矩形画出目标范围。
二值阈值化的效果如图2所示,左为当前帧图像,右为上一时刻灰度图像,中为二值阈值化结果,在分割出目标后,并求出其面积用白色矩形表示。
图 3. 图像分割
Figure 3. Image Segmentation
3.4 图像形态学去噪
图像形态学经常在通过阈值化获得的二进制图像中完成,因为膨胀是求最大值操作,腐蚀是求最小值的操作,所以形态学也可以用于灰度图像,它具有定位效果好、分割精度高、抗噪声性能好的特点[7]。
可以看到上一步用阈值分割出的图像pFrImg,周围有许多毛刺,它会干扰后面算圆形度和尖角数,所以有必要对二值阈值化图像进行去噪,以分割出更精确的火焰目标。
本文使用的是开运算,即首先将其腐蚀然后再膨胀,开运算通常可以用来统计二值图像中的区域数,消除高于其邻近的孤立点。
具体过程如下:cvErode(pFrImg, pFrImg, 0, 1);//进行腐蚀操作。
cvDilate(pFrImg, pFrImg, 0, 1);//进行膨胀操作。
去噪之后的效果如下图3所示,可以看到中间图像pFrImg周围已没有噪声,分割精度较之前有所提高。
图 4. 形态学滤波
Figure 4. Morphological filtering
3.5 火焰目标判定
3.5.1 计算颜色值
火焰有着与众不同的特征,它的颜色、温度、形状以及跳动的形式都可以作为识别的依据,任何RGB图像中只要满足R>=G且G>B的颜色都可以看作是火焰。
但是这种模型的误报会很多,可以把RGB图像模式转换为HSV颜色模式。
这个模型中的颜色参数分别是:色调(H),饱和度(S),亮度(V),然后通过精确计算出每一帧图像的亮度和颜色值,筛选出火焰物体。
通过上一步的图像分割,已经得到了目标区域,把摄像头采集到的RGB图像转换为HSV颜色模式后就可以计算该目标区域的亮度和颜色值,通过多次实验统计得出,火焰的亮度值平均大于180,而颜色值则平均小于70,所以选取这两个值作为颜色判断的阈值。
但是该判定条件的缺陷在于只能判定常见的火焰,而不能识别其它颜色的火焰,比如酒精燃烧时的蓝色火焰。
因此,颜色判据还需要配合后续的判据使用。
颜色亮度值计算如下:
cvCvtColor(pFrame,HSV,CV_BGR2HSV); //经测试原图是bgr格式
double bright_value_sum=0.0;
double color_value_sum=0.0;
int aimNum=0;
for(int i=top;i<=bottom;i++)
for(int j=left;j<=right;j++)
{
bright_value_sum+=
((uchar*)(HSV->imageData+i*HSV->widthStep))[j*HSV->nChannels+2];
color_value_sum+=
((uchar*)(HSV->imageData+i*HSV->widthStep))[j*HSV->nChannels];
aimNum++;
}
*bright=bright_value_sum/aimNum;
*color=color_value_sum/aimNum;
3.5.2 计算面积
早期火灾是火灾发生后其不断发展的过程。
在这个过程中,火灾的物理特征在图像上的表现是,火焰目标区域的面积不断发生变化,其规律是在连续几帧图像中,分割出的火焰目标区域的面积是呈增长趋势的[9]。
系统对采集到的颜色亮度在范围内的图像,计算目标区域面积并连续往后取4帧,计算目标区域面积,如果图像没有很大变化,系统将放弃这5帧图像,更新背景继续进行检测。
如果有火灾发生,则连续5帧图像的目标区域像素会有一定增长,此时再进入下一步检测算法。
面积算法实现如下:
int i,j,tmp=0;
for(i=top;i<bottom;i++)
for(j=left;j<right;j++)//计算白点数目
if(((uchar*)(pImage->imageData+i*pImage->widthStep))[j]==255)
tmp++;
3.5.3 计算分散度
火灾发生时的火焰在图像上表现出不规则形状,而其它的干扰源比如手电筒、蜡烛、白炽灯则表现出比较规则形状,由此可用分散度作为排除常见干扰源的判据。
假设图像目标区域的面积为S,周长为L,则分散度的计算为:L*L/S*(4*3.14)。
目标区域的面积相同,则其形状越规则,其周长越小。
周长越大则说明其形状越不规则。
查阅资料得到常见分散度如下表1,根据数据选择合适的阈值。
表 1. 常见分散度
Table 1. Common dispersion
3.5.4 计算尖角数
尖角的识别过程为:尖角的分割、特征提取和识别[10]。
尖角的分割可以采用前面提到的分割方法,特征点的提取主要是几何形状特性:目标的高度、宽度、体态比以及面积等。
对于火焰尖角来说,特征点首先应该是它的顶点,顶点是局部的极值点,尖角顶点可能是多个点,那就都提取为特征点。
图4为使用尖角检测算法识别出来的一个尖角,用圆形标记。
图 5. 火焰尖角
Figure 5. Flame Angle
实现尖角判据的另一个问题在于如何确定尖角跳动的阈值,即找出早期火灾火焰与其它发光物体尖角跳动特性的区别,以便区分出火灾和其它干扰现象。
对不同发光体同一序列的连续五帧图像做尖角比较试验,得到如下表2数据。
表 2. 常见发光物体尖角数
Table 2. Common light-emitting Angle number object
由此可见早期火灾火焰的尖角数变化幅度较大。
而其它干扰物的的尖角数则保持较小的波动。
由实验结果可以确定判定火焰目标的尖角数目的阈值为8。
3.6 最终判定
当以上判据都满足时,就认为是发生了火灾,程序将启动报警进程进行报警。
pthread_t th_a,th_b;
pthread_create(&th_a, NULL,gsm, NULL);//创建gsm线程
pthread_create(&th_b, NULL,buzzer, NULL);//创建蜂鸣器线程
4 结束语
本文研究了基于视频特征的火灾火焰识别算法,研究了提取前景的方法,图像分割方法,和图像形态学的滤波作用。
从理论上分析了火灾火焰图像区域的颜色值、亮度、面积、圆形度和边缘抖动等特征。
解决了本文开头提出的两个问题,对于提取火灾火焰本文采用背景减除提取出前景,然后采用基于阈值的分割方法,分割出目标区域。
对于第二个问题,本文采用了火焰的颜色特征、面积变化特征、圆形度特征和尖角数目来综合判别火焰目标。
经实验,该算法能正确识别火灾火焰,能排除孤立亮点、烟头、受控火焰和移动火焰等干扰,降低误报率和漏报率。
存在的缺陷是由于本系统采用网络摄像头,而网络摄像头只有30万像素,所以采集到的图像有所失真,容易受到光线变化的干扰。
参考文献
[1]王殊,窦征.火灾探测及其信号处理[M].武汉:华中理工大学出版社,1998,33(11):233~236.
[2] Healey G, Slater D, Lin T A.D. A system for real-time fire detection Computer Vision and PatternRecognition[J]. 1993. Proceedings CVPR 93, 1993 IEEE Computer Society Conference on 15-17 June1993:605-606.
[3]朱虹.数字图像处理基础.北京:科学出版社,2005.
[4]何斌,马天予,王运坚等.Visual C++数字图像处理.北京:人民邮电出版社,2001.
[5]付忠良. 图像阈值选取方法Otsu 方法的推广[J].计算机应用.2000,20(5):
37-39
[6]冈萨雷斯. 数字图像处理(第二版)[M]. 电子工业出版. 2003,420~453.
[7]陈莹, 吴爱国. 基于图像处理的火灾监测系统软件设计[J]. 低压电器.
2006,1:32-35
[8]侯格贤, 毕笃彦, 吴成柯. 图像分割质量评价方法研究[J]. 中国图像图形学报.2000,5A(1):39-43.
[9]陈维南, 潘泓, 叶桦. 基于图像处理的火灾监控系统的实现.
[10]吴龙标,宋卫国,卢结成.图像火灾监控中一个新颖的火灾判据[J].火灾科学,1997,6(2):61-65.
Based On Image Recognition Of Intelligent Fire Alarm System Flame Image Recognition Rlgorithms
Abstract: In view of the present based on the traditional fire detection technology in place of large space fire alarm based on the technology of digital image processing technology more and more get the attention of people. This paper studies the fire flame recognition algorithm based on video feature, first collected the camera image gray scale, using background frames differential method to extract the foreground. Then use dajin algorithm of automatic threshold choice, image binarization, then USES the open operation after denoising, segmentation of the target area. At last, by color criterion, criterion area criterion, dispersion, and the flame Angle number for identification.
Keywords: Flame recognition; Image processing; Video features; Flame characteristics。