摘 要: 为实现区域管理的智能化和科学化,结合实际项目,设计了一套基于ARM的嵌入式智能入侵检测系统。系统采用低成本、低功耗的ARM11芯片作为处理核心,利用嵌入式Linux实现远程实时的视频监控以及入侵检测功能,具有部署方便、稳定性高、抗干扰强、价格低廉以及智能管理的特点。
关键词: ARM;Linux;远程监控;入侵检测
0 引言
随着嵌入式技术和网络技术的飞速发展,视频监控技术正向着数字化、网络化和智能化方向前进。本文结合嵌入式技术提出了一套基于ARM的智能入侵检测方案,系统通过远程实时的视频监控和智能的入侵检测实现对监控区域的自动化管理,从根本上实现无人值守或少人值守,从而有效节省人力资源,提高安全等级,实现区域智能化和科学化管理。因此,系统的研发具有较大的实用价值和现实意义。
1 系统总体设计
本文设计的智能入侵检测系统采用C/S通信模式,由基于ARM实现的嵌入式视频监控端和基于PC或移动平台运行的客户端两个部分构成[1]。其中,监控端的设计目标是能够实时采集监控区域的视频信息,并对其压缩后利用实时传输协议进行网络传输,同时能够对实时图像序列进行运动检测,发现异常后立即记录入侵物体的运动轨迹,并向客户端发出警报;客户端可以通过操作平台的监控程序进行远程实时监控,并对监控数据进行存储和回放,以便日后查看或取证。
2 系统硬件设计
智能入侵检测系统的硬件包括主控模块和扩展模块两大部分。主控模块是整个系统的控制中心和信息枢纽,选用了三星的ARM11芯片作为微处理核心,主要负责系统电源管理、存储管理、I/O管理以及多媒体信息处理等。扩展模块的视频采集部分可选用低电压COMS图像传感器,直接与主控模块的Camera接口连接,若选用BNC接口的模拟摄像头,则通过TVP5150模块完成A/D转换,同时也可选用USB接口的家用摄像头;视频输出可选用电视机、PC显示器或专用监控仪,通过AV-OUT与主控相连。网络传输部分则通过路由器与局域网相连,利用网络中的工作站、平板电脑或智能手机等设备实现监控。硬件系统框图如图1所示。
3 系统模块设计及实现
基于C/S模式的入侵检测系统由ARM智能检测端和远程视频监控端组成。其中,基于嵌入式ARM实现的主要功能在于完成视频信息的处理、运动物体的检测以及非法入侵的处理,模块处理流程如图2所示。
3.1 视频处理模块
视频处理模块包括视频采集、视频压缩以及视频回显三个功能,主要利用Linux内核提供的Video4Linux2视频设备驱动来实现[2]。V4L2框架为开发人员提供了通用的程序接口,Video设备的访问路径为/dev/video/videoX,用户空间可通过ioctl函数对Video节点进行控制,并可通过mmap函数将硬件空间与内存空间进行映射,以提高访问速度。
在视频采集过程中,CMOS摄像头经Camera接口驱动后映射成video0和video1两个设备节点。其中,video0通过Codec通道可将YCbCr4:2:2格式的数据转换成YCbCr4:2:0格式存放至Codec DMA分配的内存中,最大分辨率可以达到4 096×4 096;video1通过Preview通道可将数据转换为RGB(24 bit)格式并存放于Preview DMA分配的内存中,如果将该内存地址设置为Framebuffer,就可实现LCD的本地回显。如果采用支持MJPEG格式的USB摄像头,系统则需要利用ARM11芯片提供的JPEG硬件解码形成YCbCr4:2:0数据并保存至内存。
转换后的实时流格式包括YCbCr4:2:0和RGB-24 bit。前者将被映射至MFC模块的输入缓存,经硬件编码后形式H.264数据,通过RTP协议传送至互联网络;后者将用于本地监控、视频输出以及入侵检测模块的输入源。
3.2 入侵检测模块
入侵检测模块的主要功能是对监控区域实时采集的图像信息进行智能检测,一旦发现入侵物体立即启动警报,并在本地设备的Flash中自动记录有关入侵物体的运动场景。
目前,常用的运动物体检测方法包括帧间差分法、光流法和背景减除算法。根据实际应用的需求,不同的检测算法都是在可靠性、实时性以及准确性之间取舍而来的。由于采用的是嵌入式硬件系统,其运算能力和处理性能相对有限,因此本文选择了帧间差分法和背景减除法相结合的Surendra背景更新算法作为入侵检测算法[3]。
Surendra算法能够实现自适应的背景更新,其实现的基本思想是通过帧间差分法获得入侵物体的运动区域,保持该区域内的背景不变,使用当前帧来更新非运动区域的背景,经过有限次的迭代运算后就可以较为准确地建立起背景图像,从而实现自适应更新。算法实现步骤如下:
(1)通过V4L2框架读取摄像头的第一帧图像,并将其设置为背景B0,即:B0=I0。
(2)设置最大迭代次数为MAX,当前迭代数为m=1。
(3)利用帧间差分法计算当前帧图像与前一帧图像的帧差,并由此得到二值化图像Di,即:
其中,Ii代表当前帧图像,Ii-1代表上一帧图像,|Ii-Ii-1|为帧间图像差分,T为设置的二值化阈值,Di(x,y)为帧间差分的二值化图像在像素点(x,y)处的灰度值。
(4)由二值图像Di更新背景图像Bi,即:
其中,Bi(x,y)表示背景图像在像素点(x,y)处的灰度值,a为迭代更新速度系数。实验证明,当迭代系数小于0.005时可以得到效果良好的背景图像。
(5)迭代次数m=m+1,如果m≤MAX,返回步骤(3)继续执行;如果m>MAX,结束迭代,此时的Bi可视为当前的背景图像。
(6)获得背景图像Bi后,将其与当前帧Ii进行背景减除运算得到差分图像的灰度值di。同时,为进一步强化运动区域,减少像素灰度带来的干扰,对di进行二值化后得到DBi,即:
(7)设置认定为入侵物体的像素个数最小值MIN,即选定阈值,当灰度值等于255的像素个数大于MIN时则判定为入侵物体,系统将启动警报,然后以图片格式保存当前帧Ii。
在模块实现过程中,移植了Intel开源计算机视觉库——OpenCV。利用IplImage数据结构来存储图像信息;利用IplImage*cvCreateImage(CvSize size,int depth,int channels)函数为图像创建首地址并分配存储空间;利用void cvReleaseImage(IplImage**image)函数来释放为图像所分配的内存空间;利用CvMat*cvCreateMat(int rows,int cols,int type)函数可将图像信息转换成数组存放;利用void cvCvtColor(const CvArr*src,CvArr*dst,CV_BGR2GRAY)函数可以将视频帧转换成灰度图像;利用void cvAbsDiff(const CvArr*src1,const CvArr*src2,CvArr*dst)函数可以计算两帧之间的差分灰度值;利用void cvThreshold(const CvArr*src,CvArr*dst,double threshold,double max_ value,int threshold_type)函数可对灰度图像进行阈值操作得到二值图像[4]。同时,为了有效降低微处理器的占用率,对Surendra算法进行了简化[5],使系统在每3帧图像之间进行一次更新运算,在30 f/s的采集帧率下背景图像更新的时间间隔为0.1 s,从而在保障检测质量的同时大大提高了系统性能。
3.3 网络传输模块
基于监控的实时性考虑,网络传输控制采用了实时流媒体协议(Real Time Streaming Protocol,RTSP),该协议能够实现对实时媒体流进行控制,按需传输实时数据,有效降低嵌入式系统的资源占用率。编码后的H.264数据则采用稳定可靠的TCP协议进行传输,由于视频帧信息的大小不一,需对其进行传输前的封装,具体的封装流程如图3所示。
4 结论
结合项目实际,本文设计了一套基于ARM的嵌入式智能入侵检测系统。系统采用C/S架构进行设计,其创新之处在于利用普通核“芯”做专业平台,实现了通用接口,从而有效降低设备成本。其次,系统引入了智能入侵检测,利用帧间差分和背景减除相结合的算法进行背景更新设计,优化后的算法既可以提高入侵检测的准确性,也可以保障系统监控的实时性。测试结果表明,本方案适用于小区、仓库以及停车场等环境的区域监控,可实现基于以太网的远程多点监控,也可实现基于无人值守的智能监控。
参考文献
[1] 赵苍明,穆煜.嵌入式Linux应用开发教程[M].北京:人民邮电出版社,2014.
[2] 韦东山.嵌入式Linux应用开发完全手册[M].北京:人民邮电出版社,2008.
[3] 莫林,廖鹏,刘勋.一种基于背景减除与三帧差分的运动目标检测算法[J].微计算机信息,2009(12):274-276.
[4] 刘瑞帧,于士琪.OpenCV教程——基础篇[M].北京:北京航空航天大学出版社,2007.
[5] 梁艳.基于OpenCV的ARM嵌入式网络视频监控系统[J].微型机与应用,2013,32(9):29-31.