[本科毕业论文]带人形检测的家庭摄像监控系统——人形检测模块工学学士.doc
AbstractWith the development of economy, life has become increasingly rich, people on the degree of concern about family safety problems is becoming stronger. Many burglary case because no clues that crime go unpunished, and buying expensive surveillance equipment and widely ordinary families cannot accept. Now if the use of the original image capture at home device for example, camera, digital camera and a computer, can the family monitoring. Even far away, the home of all the cases do under control. Family monitoring system as a new type of software system, main holds unmanned surveillance duties. But this system on the basis of traditional monitoring system joined the humanoid detection function, will stand in natural state the nature of human body shape judgment out. In humanoid examination aspect, through the picture, will go to the miscellaneous collection complete with sports graphics contain ination collected. Again through computer algorithm processing, the human body scale to get the ination. According to the famous Italian painter leonardo Da Vinci proposed human golden section law, carries on the image pattern matching, will stand under the natural state of normal human shape features detected, and passed to the next module operate.Key words family monitoring; Picture collect; Image pattern matching; Humanoid detection1.1 研究家庭摄像头监控系统的意义当您在办公室工作,当您在郊外旅游的时候,突然收到一条短信,提醒您家里有“异常情况”的时候,你可以马上通过 或者笔记本电脑等设备来开启你的邮箱,及时的查看家里发生的情况。如果,您发现了有窃贼的入侵,您可以马上采取措施来阻止或者减少家庭财产的损失,并且留下的证据将对警方的调查起到非常有力的帮助。可以说,家庭摄像头监控系统是在突破了空间条件限制,而进行的无需人工看守的自动监控系统。当你离开家门,外出活动时,系统也能正常的运作,并且发现异常时及时进行报警,提醒你家中发生的情况。人形检测功能在家庭摄像头监控系统的意义图像编程,一直以来都是一个难度比较大的课题。而且将图像编程应用到日常的应用软件中更是少之又少。然而,现在市场上用普通摄象头制作的监控软件非常的多,而且都有一个共同的缺点,就是监控机制相对落后。大多数监控软件,都是采取前后两张画面来做对比,当出现变化时,就发出报警。这样的话,对很多养宠物的家庭来说,无疑是一个监控瓶颈。如果小猫小狗在画面上出现,那么将会自动的被判别为“异常情况”,然后通知家里的主人。这样的话,您的 就会不断的接到信息,那确实是一件很烦人的事情。基于这一情况,我们制作出了一个带人形检测的家庭摄像头监控系统。只有当“人形”特征出现在画面上的时候,才判定为“异常情况”。这样,便可大大的方便用户对家中异常情况的了解,也避免了错误信息对用户带来的干扰。2.1 市场需求市面上已经有不少家庭监控软件存在,例如“天眼(家庭监控软件)”、“安心e家在线家庭监控软件”、“超级门卫”等。但是,这些家庭监控软件都有一个共同的缺点,那就是早在2004年,中国视频监控行业应用市场总产值就已经达到151亿元人民币,相比2003年的123亿元人民币增长了近23,并以每年20左右的速度不断增长。分析机构调研显示,随着生活节奏的不断加快,家庭用户对安全感的需求正在逐渐增加,对于家庭监控、安防的要求也日趋成熟。由于视频监控系统在保护安全、预防犯罪方面起到不可低估的作用,个人用户对家庭安全需求的增长必将带动住宅监控系统的发展。来自普通消费者家庭的视频监控需求正成为视频监控应用的新兴市场,并有望在未来几年中呈现显著增长态势。近期产业报告也都表示看好家庭应用市场,将监控目的从安全转向安心,用户也由企业、政府及医院等转向一般消费者。换句话说,家庭监控系统在市场需求上将呈现出不断递增,并且加速递增。 业务需求软件的方便性,灵敏度,可靠性是一个家庭软件的重要体现。方便性,即用户能很方便,快捷地使用监控系统,不用做很繁琐的操作和准备。灵敏度,即硬件扩展,硬件的选择,变更不会受到很大限制。可靠性,即系统的使用是否能达到目标要求,各项功能是否能正常使用,如日常监控,报警机制等,是否可靠等等。2.3 用户需求从用户的实际操作情况考虑,设计一个简洁,实用,操作方便的监控系统。所以我们尽量使系统界面简洁,操作简便,硬件要求简单。用户要使用我们的系统,只需拥有一台电脑, 一台,一个摄像头,和具备最基本的电脑操作能力就满足使用本系统的条件。用户只要把摄像头连接到电脑上,并打开我们的软件,按照自己的需要进行简单的设置,就可以使用我们的监控系统了。通过简便的操作,简单的硬件要求,使所有的家庭用户都能很方便地使用我们的系统,而不用大费周章,花费心思地去使用我们的系统。2.4 功能需求在功能方面,因为本系统是一个家用软件,所有为了方便,无需人工值守。“人形”判断功能,即当画面发生变化,就会自动报警。而在画面判断方面,我们考虑到有些家庭有养宠物的情况,针对这类情况,我们设计了一个功能,就是当画面上出现人形图像时,我们才判断有外人进入,从而不会因为宠物的走动而产生误判。同时,一个监控系统还必须有报警功能。当用户在外,家里没人时,我们系统可以进行远程报警,即发短信通知用户,同时还会把当时图片发送到用户邮箱,以便用户查看。这样,无论用户在任何地方,都可以第一时间察觉家里的异常情况,让用户可以安心的离开家门去忙自己的事情。一个监控系统,还必须有证据捕获机制。我们的系统在画面发生变更时,或有人形图像出现是,就会截图,除了在本地保存以外,还会把截下来的图片发送到用户邮箱,进行证据的保存。由于本系统针对的用户是家庭用户,主要用于家里没人,用户外出的情况,所以监控系统就有必要拥有远程控制功能。本系统除了可以发送短信通知用户家里的情况以外,还可以接收用户发回来的短信指令,从而实现远程控制系统的开关。当用户远门在外,或不方便回家,而又有亲人或朋友回家了,这时监控系统检测到有人形图像出现,就会启动报警机制,发送信息通知用户。为了不用受到这不必要的打扰,我们设置了一个远程开关系统的功能,用户只要通过 发送简单的指令,就可以对系统进行远程开关控制,而不用受到不必要的打扰。3.系统整体功能概述3.1 运动画面的捕获与处理模块运动画面的捕获与处理模块,作为整个系统的信息输入与获取接口。通过外部图像获取设备,将电脑前得画面通过摄像头捕获下来。并通过计算机算法,将运动图形捕获出来。再通过图像处理算法,将图像存在的噪点去除。3.2 人形检测模块经过前一步的操作,我们可以得到一张400300规格的图片。此图片里包含着运动物体的点集,除运动点集外其他点的RGB值均设置为R0,G0,B0。按400300规格的图片来计算,如果要遍历整张图片的点,将进行400300120000次循环。这将大大消耗了计算机处理的资源。所有这里通过计算机算法,将有价值画面点的位置提取出来并记录在二维数组里。以后如需要遍历到运动点集的信息,只需直接遍历二维数组即可,这将大大减少计算机处理的次数。接下来便可进行按比例计算,所谓的按比例计算,就是通过一定的比例分割,把图形分割后,得到的比例或者长度作为我们以后要用到的信息。通过按比例计算,让我们把从图形里得到的信息进行扩展,让原有的信息计算出新的信息,并为我们所使用。当掌握了我们所需要的信息之后,便可以进行进行人形特征匹配。人形特征匹配,是基于人体比例的条件约束来规定的。在我们刚才算出来的数值中,我们可以和人体比例约束联系起来。按照这个约束,我们可以把人类某个状态(自然站立)下的形状特征给检测出来。人形检测模块作为整个系统的核心处理部分,依据意大利著名画家达芬奇提出的人体黄金比例约束规律进行分析。人形检测模块包含了画面收集,按比例计算,人形特征匹配三个部分。将从运动画面的捕获与处理模块得到的信息进行进一步处理,分析出是否含有疑似人类外形的图片,并将信息传递给下一个模块,做出相应的反馈。 当报警机制被激活时,通过调用系统API函数,启动发送邮件通知用户,并启动鼠标键盘模拟操作通讯工具。(这里使用飞信软件作为一个例子进行演示,在不违法修改飞信软件和截取软件接口的前提下,只是使用普通的鼠标键盘模拟,模拟人类操作向用户的 发信息。)这样,无论您在任何地方,都可以第一时间察觉家里的异常情况,让你可以安心的离开家门去忙自己的事情。当画面发生变化时,软件将自动把变化的画面生成图片,然后保存在计算机里。并且,这些图片将会以画面变动的具体时间来作为图片名。同时,软件将通过邮件里面的附件功能,把这些图片打包成为附件,然后向用户的邮箱里发送。用户可以随时随地的打开邮箱,来查看家里发生的异常。万一发生入窃事件,保存在邮箱里的图片将会给警方破案带来极大的帮助。控制模块作为系统与用户远程交互的桥梁,可以使用户方便地进行远程开启与关闭系统,更进一步的体现了人机交互的过程。3.4 系统UI设计一个友好美观的界面会给人带来舒适的视觉享受,拉近人与电脑的距离,为商家创造卖点。界面设计不是单纯的美术绘画,他需要定位使用者、使用环境、使用方式并且为最终用户而设计,是纯粹的科学性的艺术设计。所以界面设计要和用户研究紧密结合,是一个不断为最终用户设计满意视觉效果的过程。本系统软件外观设计方面,从普通用户群体出发,设计一种适合这一群体操作习惯的软件界面。在视觉与操作设计上都遵循用户的体验感受来制作开发。3.5 系统流程图 图3-1 系统流程图4.相关编程语言解析编程语言介绍C读做 “C sharp”,中文译音暂时没有。专业人士一般读“C sharp”,现在很多非专业一般读“C井”。C是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。并定于在微软职业开发者论坛PDC上登台亮相。C是微软公司研究员Anders Hejlsberg的最新成果。C看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法和编译成中间代码再运行的过程。但是C与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM组件对象模型是直接集成的,而且它是微软公司.NET windows网络框架的主角。C是一种安全的、稳定的、简单的,由C和C衍生出来的面向对象的编程语言。它在继承C和C强大功能的同时去掉了一些它们的复杂特性(例如没有宏和模版,不允许多重继承)。C综合了VB简单的可视化操作和C的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。(1)简洁的语法语法中的冗余是C中的常见的问题,比如const和define、各种各样的字符类型等等。C对此进行了简化,只保留了常见的形式,而别的冗余形式从它的语法结构中被清除了出去。(2)精心地面向对象设计C具有面向对象的语言所应有的一切特性封装、继承与多态性,这并不出奇。然而,通过精心地面向对象设计,从高级商业对象到系统级应用,C建造广泛组件的绝对选择。(3)完整的安全性与错误处理语言的安全性与错误处理能力,是衡量一种语言是否优秀的重要依据。任何人都会犯错误,即使是最熟练的程序员也不例外忘记变量的初始化,对不属于自己管理范围的内存空间进行修改。这些错误常常产生难以预见的后果。一旦这样的软件被投入使用,寻找与改正这些简单错误的代价将会是让人无法承受的。C的先进设计思想可以消除软件开发中的许多常见错误,并提供了包括类型安全在内的完整的安全性能。为了减少开发中的错误,C会帮助开发者通过更少的代码完成相同的功能,这不但减轻了编程人员的工作量,同时更有效地避免了错误的发生。(4)版本处理技术C提供内置的版本支持来减少开发费用,使用C将会使开发人员更加轻易地开发和维护各种商业用户。升级软件系统中的组件(模块)是一件容易产生错误的工作。在代码修改过程中可能对现存的软件产生影响,很有可能导致程序的崩溃。为了帮助开发人员处理这些问题,C在语言中内置了版本控制功能。例如函数重载必须被显式声明,而不会象在C或java中经常发生的那样不经意地被进行,这可以防止代码级错误和保留版本化的特性。另一个相关的特性是接口和接口继承的支持。这些特性可以保证复杂的软件可以被方便地开发和升级。(5)灵活性和兼容性在简化语法的同时,C并没有失去灵活性。尽管它不是一种无限制语言,比如它不能用来开发硬件驱动程序,在默认的状态下没有指针等等,但是,在学习过程中你将发现,它仍然是那样的灵巧。5.人形检测模块模块解析模块理论分析 画面收集理论分析我们进行判断的时候是用了400300规格的图片进行比较处理。那么每次处理将要进行400300120000次的循环,软件运行的速度将会大大减低。为此,我们必须寻找一个更快速遍历图像信息的方法。经过不断的测试与探讨,我们发现,运动物体所在的图片里面存在着很多不需要的信息。我们所要收集的信息只是运动的那部分图形,其余的部分并没有任何价值。所以,我们决定将运动的图形存进一个二维数组,而存进数组的不再是原来的象素颜色的值,而是某一个图象点的坐标。以后通过二维数组来遍历图片,将会大大减少时间复杂度。图5-1 画面收集演示图按比例计算理论分析按比例计算,就是通过一定的比例分割,把图形分割后,得到的比例或者长度作为我们以后要用到的信息。通过按比例计算,让我们把从图形里得到的信息进行扩展,让原有的信息计算出新的信息,并为我们所使用。 图5-2 参考资料插图达芬奇是欧洲文艺复兴时代意大利的著名画家。在长期的绘画实践和研究中,他发现并提出了一些重要的人体绘画规律标准人体的比例为头是身高的1/8,肩宽是身高的1/4,平伸两臂的宽度等于身长,两腋的宽度与臀部宽度相等,大腿正面厚度等于脸的厚度,跪下的高度减少1/4。这一人体比例规律在今天仍被认为是十分有价值的。关于人体美的规律最伟大的发现,是关于“黄金分割定律”的发现。所谓黄金分割定律,是指把一定长度的线条或物体分为两部分,使其中一部分对于全体之比等于其余一部分对这部分之比。这个比值是0.618111。首先,我们一起来分析一下,我们能从图片里得到什么信息。如果我们从左上角开始,从左到右扫描,当到达最右边时则换行扫描。那么,我们很容易可以得到图像的最高点和最低点。而且,还可以得到图像每一行的宽。这将给我们接下来的操作提供了非常重要的信息。接下来,我们要继续分析,有了这个基础后,我们还能怎么做,怎么才可以得到更多的信息。我们先从一张人体模型图像入手。图5-3 人体模型图我们可以很直观的发现,人体的一个很重要特点,那就是头和肩的宽度的差别。从头到脖子再到肩膀,呈现出一个“几”字的形状。那么,我们将可以通过上面我们提到的信息中,得到更多的信息扩展。根据以上的信息,我们可以归纳出,一个健全的人类,在身体比例方面,必定有某个阈值为波动范围的约束。因此我们将按比例计算主要计算内容归纳为以下几个主要信息。第一,头部线。头部线指的是以自然站立为标准,头部与颈部连接点的横向分割线。第二,喉咙线。喉咙线指的是以自然站立为标准,喉结的横向分割线。第三,头部中线。头部中线指的是以自然站立为标准,头颅部分以眉心为基准的纵向分割线。第四,整体中线。整体中线指的是以自然站立为标准,人类整体纵向的中心分割线。当头部线和喉咙线之间存在相互关联条件,并且头部中线与整体中线之间也在相互关联条件范围内时,我们便可以分析出运动的物体含有疑似人形。这里需要说明的是,本系统分析的疑似人形,指的是在自然站立状态下健全的人体轮廓。接下来,我们需要解决的问题是,如何从获取的图像里面获取以上四个重要信息。 图像图形匹配分析人形特征匹配,是基于人体比例的条件约束来规定的。在我们刚才算出来的数值中,我们可以和人体比例约束联系起来。比如,喉结的位置和头部线和肩部线应该在某个阈值的范围里。头长与肩膀宽的比例应该在某个阈值的范围里。头部的中线与整体的中线应该也在某个阈值的范围里。那么,我们就有了判断人形特征的约束,按照这个约束,我们将可以把人类某个状态(自然站立)下的形状特征给检测出来。模块流程框图 图5-4 模块流程框图以下是画面收集的主要实现方法 int, a new int120000, 2; unsafe for int i 0; i data.Height; i i 1 for int j 0; j data.Width; j j 1 b byte*intdata.Scan0 i * data.Stride j * 3; if b0 0 ak, 1 j; k; 首先对去杂点处理后的图片进行遍历,若所遍历到的点的RGB不等于(0,0,0),则把该点的横坐标和纵坐标分别读取出来,然后存进二维数组里,以便后面的计算。当画面收集完成之后,我们可以从图像里获得最高点和最低点。而且,还可以得到图像每一行的宽。那么,我们可以这样设想,我们可以通过头和肩的宽度差,来确定头部与颈部连接点的分割线。知道了头部与颈部连接点的分割线,那么我们可以知道脖子和头的总长度。因此,我们可以得到头部的平均宽度和头部的中线。主要代码如下 tryif as, 0 as - 1, 0 //换行操作 nop; //记录图象的行数 p as - 1, 1; //记录上一行的尾 sum p - q; //宽度 q as, 1; //记录新一行的头 middle sum / 2 q; //每行的中间线 pj pj middle; //总的中间线 cc_lenght sum;//把所有宽度存进数组 c_lenght;catch 此处数组a为之前画面收集的点的存放处。当as, 0 不等于 as - 1, 0时,表示图形进行了换行操作如下图图5-5 操作分析图sum为每行的宽度,数组c是一个存放每行图像宽度数据的数组,nop记录图像的行数,middle记录了每行图像的中间位置,pj累加记录总的中间位置值的总和。在此,当整副图像的宽度值都存放进数组c之后,我们可以得到整体中线的值pj/nod。根据人体自然形态,从头到脖子再到肩膀,呈现出一个“几”字的形状。我们可以发现,从头部到脖子再到肩膀,图形从上到下扫描的宽度值得变化比较大。从头部到脖子扫描的宽度在缓慢将少,从脖子到肩膀扫描的宽度急剧增加。主要代码如下 for int i 0; i c_lenght; i z_sum z_sum ci; try if Math.Absci 5 - ci 20 pj_sum intz_sum / i; //平均宽度 pj_sum pj_sum / 2; break; catch 这个循环主要是对数组c进行遍历,对存在数组c里面的图像宽度信息读取出来使用。经过测试,我们发现一般情况下,出现在画面中的图像头部线和肩部线之间距离在5个像素点之上。因此,我们对算法进行这样规定,当画面的前一个宽度值与后5个宽度值得差距在20个像素点之上时,可以确定头部线的位置。但是也不排除一些特殊的情况,比如画面的第1行的宽度可能和后几行的宽度差超过规定的像素范围。因此为了减少误判,我们在这里又做出另一个约束条件,只有同时满足已扫描行数超过5行的前提下,才可以做出认定。因此我们可以得到头部线的值已扫描行数画面起始纵坐标的值。同时,记录下画面总宽度,通过总宽度除以总行数,可以得到整体平均宽度值。有了头部线的值,之后我们可以得到更多信息,主要代码如下 for int s 0; s head_down - head_top; s try if as, 0 as - 1, 0 //换行操作 head_nop;p as - 1, 1; //记录上一行的尾 sum p - q; //宽度 q as, 1; //记录新一行的头 middle sum / 2 q; //每行的中间线head_sum head_sum middle; catch 通过前一步获得的头部线信息,我们可以循环读取出头颅部分图像每行的宽度值。middle记录头部图像每行的中间线值。head_sum记录头部图像每行的中间线值的总和。 head_middle head_sum / head_nop;通过,头部图像每行的中间线值的总和除以头部图像总行数计算出头部平均中线的值。head_lefty head_middle - intpj_sum;head_righty head_middle intpj_sum通过头部平均中线的值与整体平均宽度的二分之一值,可以得出头部左边界与头部右边界纵向的值。图5-6 人体模型图如图,我们得出了最高点线,最低点线,头部线,肩部线,头部左边界,头部右边界,整体中线,头部中线。有了这些信息,将会对我们下一步操作提供了十分有利的条件。根据意大利的著名画家达芬奇提出的人体黄金比例。1。 head_top;因此,我们可以计算出肚脐横向分割线的值。nop是图像总行数,head_top是图像起始点的横向分割线的值。hlx dqx - head_top - intdqx - head_top / 1.618 head_top;根据得到的肚脐横向分割线的值,又可以得出喉咙线(喉结的横向分割线),如下图所示。图5-7 人体模型图经测试,我们把各分割线之间的波动范围规定为,头部横向分割线的值与喉结横向分割线的约束范围不超过15个像素,头部纵向平均分割中线与整体纵向平均分割中线的约束范围不超过9个像素。并且为了减少误判,我们又加多了一个约束条件,只有同时图像的总点数超过1000时,才可以做出判定。5.4人形特征匹配测试下面我们给出一些图片的测试。第一组测试原图图5-8 示例图经过背景减和去杂处理后图5-9 示例图经过“按比例计算”后图5-10 示例图测试结果肩部线,喉咙线,头部下边界在规定阈值范围内头部中线,整体中线在规定阈值范围内判定结果符合人形特征第二组测试原图图5-11 示例图经过背景减和去杂处理后图5-12 示例图经过“按比例计算”后图5-13 示例图测试结果肩部线,喉咙线,头部下边界在规定阈值范围内头部中线,整体中线在规定阈值范围内判定结果符合人形特征第三组测试原图图5-14 示例图经过背景减和去杂处理后图5-15 示例图经过“按比例计算”后图5-16 示例图测试结果肩部线,喉咙线,头部下边界不在规定阈值范围内头部中线,整体中线在规定阈值范围内判定结果不符合人形特征第四组测试原图图5-17 示例图经过背景减和去杂处理后图5-18 示例图经过“按比例计算”后图5-19 示例图测试结果肩部线,喉咙线,头部下边界不在规定阈值范围内。头部中线,整体中线不在规定阈值范围内。判定结果不符合人形特征。经过人形特征的匹配判断,可以有效的把非人类的物体排除。喉咙线的位置和头部线和肩部线应该在某个阈值的范围里。头部的中线与整体的中线在某个阈值的范围里。依据人类的身体比例特征,形成了很好的比例约束。通过这些人体特征的约束,我们将可以把人类某个状态(自然站立)下的形状特征给检测出来。与其他系统比较本系统人形检测模块的特点(1) 良好动态响应特性,可及时发现可疑情况,并拥有人形检测功能,可迅速匹配人形特征。 (2) 其他系统只要画面发生改变既向用户报警,而本系统加入了人形检测模块,减少了因为画面异常既向用户发送报告。项目改进方向与商业运用(1)在人形检测方面,可以通过扩充特征库,加入更多人体行为动作的特征,让人形检测功能越加完善、准确和快捷。(2)优化算法,提高图片的处理速度,使系统的整体效率得到提高。在商业运用上, 可以把家庭监控软件与通讯运营商合作。比如用户只需要每个月在 上多扣除3块钱,就可以免费得到一个家庭监控系统,并且移动公司所提供的网络接口,可以让家里的计算机与 之间的联系变的更加简单,也越快速。随着3G 的出现,让 网络速度变的越来越快速。我们相信,只要有一定机遇的配合,家庭监控系统与通讯运营商之间肯定有不可估量的商机与合作。系统总结与心得体会本系统从实际出发,通过所学知识,仔细考虑每个功能的实用性、可靠性和简便性。软件创新方面,从传统的家庭监控出发,进行了创新,加入了人形检测功能,并运用通讯工具,实现了远程控制,切实做到随时随地掌握监控。人形检测模块作为整个系统的核心处理部分,依据意大利著名画家达芬奇提出的人体黄金比例约束规律进行分析。人形检测模块包含了画面收集,按比例计算,人形特征匹配三个部分。将从运动画面的捕获与处理模块得到的信息进行进一步处理,分析出是否含有疑似人类外形的图片,并将信息传递给下一个模块,做出相应的反馈。在毕业设计的制作过程中,遇到了很多难题,从找资料到询问指导老师,再到最后把问题解决,都从中学到了不少东西。因为我们的毕业作品属于多人组队合作的作品,所以在制作过程中,更加体会到分工合作,队友间沟通的重要性。在构思本设计上,我们以创新为前驱,以所学技术知识为后盾,以参考资料为补充的指导思想模式,在指导老师的引导下开展系统的设计和制作。四年的大学学习,让我对计算机知识有了一定的了解。毕业设计让我更深刻的体会到,唯有把理论与实践相结合,才能做出为人民服务,为社会服务的软件。通过此次毕业设计,也让我看到自己的不足之处。我会继续努力,完善自我,将自己学到的计算机知识转化为对社会贡献的力量。