摘 要:基于ARM9处理器S3C2440芯片硬件平台,设计和开发了一种家庭视觉智能防盗监控系统。服务器以裁剪的Linux为软件平台,移植了多种设备驱动程序,综合利用多线程、socket等编程技术,通过调用OpenCV图像处理库、Libjpeg内存数据编解码库设计摄像头应用程序,着重分析了Linux下V4L的工作原理以及基于特征脸的人脸识别原理。该系统实现了在嵌入式Linux开发板上的人脸识别与身份验证主系统,实现在PC上Web浏览功能,提高了防盗系统的安全性。
关键词:嵌入式Linux;ARM9;人脸识别;OpenCV
随着智能视频监控系统的快速发展,通过对摄像机拍摄的图像序列进行自动分析,对视频图像中的运动对象进行检测、跟踪和识别,并在此基础上对其进行行为分析,从而做到预警、日常信息的管理,及在异常情况发生时发出告警,提高视频监控的效率成为可能[1]。本系统将智能视频监控系统应用于家庭防盗,实现了一个以图像处理技术为核心的家庭视觉防盗报警系统,包括摄像机图像采集分析、图像信息编码、压缩及PC端解码显示的图像处理设计、控制电路设计、GSM短信发送模块。其目标是提供一套成本低、功能全面的家庭视觉防盗系统,解决长期以来防盗系统对于机械锁的过度依赖,变传统的被动式消极防盗为报警式积极防盗,提高安全性。
1 系统构架
该系统包含一个服务端和两个客服端,服务端主要负责人脸识别图像处理、编码压缩及无线发送图像信息。一个客服端通过GSM模块实现服务端与业主手机通信,服务端通过对摄像机采集信息的一系列图像处理,对采集图像作人脸识别处理,判断是否为家庭成员并发送报警短信到业主手机。服务端将压缩图像信息打包,通过TCP协议发送到PC客户端,实现在PC端的实时显示。家庭视觉智能防盗系统结构如图1所示。
相对于传统的机械锁防盗与人工监视的传统视频监控系统,本系统在效率上有了大大的提高,并且更加智能化、自动化。本系统具有以下功能:
(1)可创建、更新家庭成员人脸头像库文件;
(2)服务端将前端设备采集图像作人脸识别图像处理;
(3)服务端判断是否发送报警短信给业主;
(4)前端设备采集图像信息在PC端实时显示;
(5)前端设备采集图像信息在服务端LCD实时显示;
(6)服务器端存储可疑人图片信息;
(7)可通过Web网络查看前端设备采集信息。
2 系统硬件设计
2.1 系统硬件平台
系统硬件结构如图2所示。硬件平台采用了ARM9嵌入式开发套件,它由核心板和底板组成,核心板上集成Samsung S3C2440处理器。该芯片采用ARM920T处理内核,主频为400 MHz,内部带有全性能MMU体系结构,支持Linux、WinCE等嵌入式操作系统,集成了外部存储器控制器、LCD控制器、一个5线异步串行口(波特率最高为115 200 b/s)、一个10 MHz网口、2个USB1.1接口(一个Host接口,一个Device接口)以及5 V电源接口[2]。
2.2 系统硬件框架
2.2.1 前端设备
在Linux下,使用开发板与摄像机相连,通过摄像机捕捉头像画面。为方便图像传送,系统采用中星微301P摄像机,其驱动需事先编译进Linux内核。中星微301P芯片采用了最先进的算法加速硬件方式,占用CPU资源一般为百分之十几,使开发板LCD显示屏在320×240模式下图像表现优异,并能达到30 f/s的速度[3],动态画面流畅,实时还原真实场景。采集图像数据经摄像机硬件编码通过USB接口与服务端实现传输,采集图像数据为JPEG格式图片。服务端通过软件解码实现在服务端LCD上实时显示。
2.2.2 GSM模块
GSM模块是可用单片机控制的以TC35I为核心的GSM系统终端,支持数据、语言、短信传输等功能,利用信令信道传输,是GSM通信网所特有的功能,不用拨号建立连接,直接把要发送的信息加上目的地址发送到短消息服务中心,由短消息服务中心再发送给最终的信宿,短消息的收发不影响通话[4]。编码后单条短消息最大长度为140 B,可以承载160个英文字符或70个汉字;编码后每页消息长度为82 B,最大页数为15页。GSM模块短消息业务的优点在于其无需建立连接,服务费用低。
3 系统软件设计
3.1 软件系统设计框架设计
本系统软件框架分为服务器端主机控制、显示系统、GSM手机呼叫系统和PC终端显示系统。核心部分为服务端主机系统,以嵌入式Linux为基础,建立交叉编译环境,完成引导加载程序Supervivi、Linux系统内核Linux-2.6.32的编译移植,其中包括无线网卡、通用USB摄像头和LCD触摸屏等驱动的移植,最后移植通用yaffs文件系统。基于系统设计的需要,采用Framebuffer作为底层图形接口,还需要在宿主机上交叉编译Zlib、JPEG、OpenCV等多种库,这使得系统环境具有丰富的控件资源和良好的可移植性,最终形成基于ARM的嵌入式Linux平台,在此软件平台上可进行嵌入式应用程序的开发。
3.2 服务器端主机程序设计
主机程序设计采用C与C++语言相结合的方式进行开发,C部分主要用于开发视频播放程序和socket网络程序,主要内容包括初始化摄像机设备和创建线程1采集视频图像。然后主程序创建一个套接字监听,阻塞等待客户端的请求连接。连接成功后再创建线程2发送采集到的图像数据给客户端。线程1的作用是采集视频图像,线程2的作用是发送图像数据给客户端。内嵌自定义的传输协议,自行编写简易系统,在不减少功能及系统稳定的情况下,减少代码数量,精简代码,设定算法,提高系统稳定性、安全性。
当主机设备启动以后,系统进行初始化,采集前端设备摄像机一帧图像,作图像识别处理,判断是否为家庭成员。为非家庭成员时,主机与客户端建立联系,通过GSM模块发送报警短信给业主手机,并通过TCP协议发送至终端,在PC上实时显示,业主可登录Web网页查看门口监控。程序流程图如图3所示。
3.3 图像数据的编解码实现
系统在网络传输前,必须要对处理后的图像数据重新进行压缩处理。系统采用了IJG(Independent JPEG Group)提供的Libjpeg库实现在内存中图像数据的编解码,库中函数必须从文件中读取数据,再将压缩数据存成JPEG文件,增加了不必要的文件I/O操作,减慢了CPU的数据处理速度和网络传输。为克服其缺点,改写Libjpeg库内jdatasrc.c及jdatadst.c两个源文件,重新定义struct stdio_src_mgr及struct stdio_dest_mgr,并设计增加图像操作函数,实现输入和输出数据的重定向到内存中,利用修改后的Libjpeg库可以很好地实现在内存中直接对图像数据编、解码。
3.4 人脸识别与身份验证
本系统的特点是能实现人脸的检测识别与身份验证。系统所采用的人脸检测算法主要来源于Vioal等提出的基于AdaBoost的实时人脸检测算法,该方法能实现Harr-like特征表示图像。采用AdaBoost方法选择少量特征组成强分类器,引入“积分图”概念,提高对特征的计算速度,使用“cascade”策略,提高人脸检测速度,并通过预先建立家庭成员人脸头像库文件的方式,将识别后取得的人脸图像与库中图像匹配,以此判定身份[5]。该方法能取得较好的检测效果。
在此理论基础上,本文人脸检测算法的实现是基于OpenCV开源代码库,该库实现了图像处理和计算机视觉方面的很多通用算法。利用其开源性设计基础的数据类型和实现函数,借助交叉编译器等工具,在服务器主机端实现人脸检测及身份验证。系统人脸识别步骤如图4所示,人脸识别图像处理效果显示图如图5所示。
3.5 信号忽略机制算法
因本系统需实现远程PC端的网页观看视频功能,图像数据要以TCP/IP协议的形式在互联网中进行传输,因此需考虑多个远程PC端同时访问服务器端请求数据的情况,由此产生了如下问题:若目前有多个客户端正在访问服务器端,其中一个客户端关闭了与服务端的连接,但服务端依然试图发送图像数据给客户端(write to pipe with no readers),系统就会发出一个SIGPIPE信号,默认对SIGPIPE的处理是终止(terminate),此时即使还有别的客户端仍连接,负责发送图像数据的服务器端还是会被终止。这当然不是所想要的,因此本文采用了SIGPIPE信号忽略机制算法。
信号是UNIX/Linux进程间通信的一种标准方式,又称软中断信号(signal,简称为信号),是一种简单的通信方式,由于信号相对简单和有效而被广泛使用[6]。信号主要用来通知进程发生了异步事件。但信号只是用来通知某进程发生了什么事件,并不给该进程传递任何数据,收到信号的进程对各种信号有不同的处理方法,其中有一种处理方法是,忽略某个信号,对该信号不作任何处理,就像从未发生过一样,而进程是通过调用signal来指定进程对某个信号的处理行为。在本系统中,在建立一个socket时便设定好客户端的信号处理机制,设定为信号忽略。这种情况下,即使其中一个客户端关闭与服务器的连接,服务器端也不会终止,从而提高了系统的可靠性。
随着人民生活水平的日益提高,人们对居住生活的安全性愈加重视,家庭防盗系统的作用更加突出,克服家庭防盗系统对于机械锁的过度依赖,本系统变传统的被动式消极防盗为报警式积极防盗,提高了防盗系统的安全性。该系统使用简单,价格低,市场应用前景广阔,值得进行大量的探索和深入的研究。
参考文献
[1] 钟海涛.基站智能防盗监控系统视频智能分析技术的研究[D].北京:北京邮电大学,2011.
[2] 吴嘉彦.基于ARM的JPEG图像处理技术研究与应用[J].梧州学院学报,2010(6):67-72.
[3] 宋乐,林玉池,吴颖,等.基于视觉传感的嵌入式自动读尺系统[J].传感器与微系统,2009(8):86-88.
[4] 吴玉田,王瑞光,郑喜凤,等.GSM模块TC35及其应用[J].计算机测量与控制,2002(8):557-560.
[5] 公衍宇,郭琦,于超.Android系统下OpenCV的人脸检测模块的设计[J].电子设计工程,2012(20):52-54.
[6] 郑尚志,赵小龙,昌杰.Linux信号机制的分析与研究[J].科技资讯,2008(11):98-100.
[7] 李明学,田由辉,张雅若.ARM平台嵌入式网络视频监控系统的实现[J].电子产品世界,2012(12):62-64.
[8] 王桂林.监控领域背景下远距离人脸识别系统探究[J].信息通信,2012(6):9.