摘 要:为解决因小区车库物业监管疏忽而造成的车辆被盗等问题,提出了一种安装在私家车上的视频动态检测监控报警系统。系统采用S3C6410微处理器芯片,将motion动态检测程序、嵌入式Boa服务器等移植到系统终端,通过帧差法实现对车内图像的动态检测,并由WiFi模块将系统接入小区网络。当有物体闯入车内时,系统即发出报警并发送邮件通知用户,用户通过邮件推送服务可在手机上得到实时图片信息,也可通过访问网页获得实时视频。测试结果表明,动态检测稳定可靠,视频流畅清晰,能够满足要求。
关键词:嵌入式;小区车库;motion;Boa服务器;帧差法
随着人们生活水平的不断提高以及安全意识的不断增强,人们对小区安全也越来越重视,而小区车库安全是小区安全中必不可少的一部分[1]。但是由于小区入住率低、小区车库管理混乱、环境复杂,私家车在小区车库易遭受偷盗,甚至抢劫,导致车主遭受巨大损失。目前小区车库主要由监控人员通过视频监控。然而由于视频监控存在盲区、车库监控设备易遭破坏以及监控人员疏忽等问题,此种方式不能有效地保障私家车在小区车库的安全。相关文献介绍的当前车库的监控系统主要是基于PC平台的监控,是对整个小区车库的监控,并且不具备主动报警的功能。为此,设计了一种安装在私家车内的监控报警系统。该系统不同于一般的汽车防盗报警系统,可以通过对车内图像的检测来判断车辆是否被偷盗,并可进行邮件通知和实时监控,通过对摄像头的控制可更加直观地观察到现场的情况,对于提高私家车在小区车库的安全性具有很大帮助。
1 系统总体设计
系统的整体结构简图如图1所示,该系统由视频采集终端、无线网络端以及视频接收终端组成[2]。整个系统通过WiFi模块接入小区网络。视频采集终端将USB摄像头采集到的实时视频数据传输到系统中,然后由motion对采集到的视频进行处理。当检测到有物体进入车内时即发出报警,并通过邮件把车内实时图片发送出去;视频接收终端通过网络以及CGI脚本与嵌入式Boa服务器进行交互,可实现对车内视频的实时监控。
2 系统硬件设计
2.1 系统硬件平台设计
该系统硬件主要包括32位的嵌入式微处理器、WiFi无线模块、USB摄像头等。系统的硬件结构框图如图2所示,其核心部分为S3C6410微处理器和256 MB的SDRAM、1 GB的NAND Flash以及多种外设接口(包括USB接口、SDIO接口、网卡接口等)所组成的最小系统。
2.2 USB摄像头
USB摄像头与微处理器的USB HOST接口直接相连。摄像头采用OV9650芯片,支持最大分辨率为1 300×1 028,可以输出GRB4:2:2、YUV(4:2:2)和YCbCr(4:2:2)三种视频格式,这三种格式均符合CCIR601和CCIR656标准。
2.3 WiFi无线模块接口电路
WiFi无线模块采用Marvell公司低成本、低功耗的88W8686芯片,它通过SDIO接口与主控设备相连。该模块遵循IEEE 802.11g标准,而且兼容802.11b协议标准,工作在2.4 GHz频段,最高传输速率可达54 Mb/s。内置天线,可适应不同的工作环境,设备可以方便地接入无线网络[3]。S3C6410 带有2 路SDIO 接口,其中 SDIO0 通常被用作SD卡接口使用,另一路在本系统中用于连接WiFi无线模块,其接口电路图如图3所示。
2.4 SD卡接口电路
SD存储卡用于对重要视频数据以及图片的存储。通过SDIO接口与系统相连,最大可支持32 GB。其接口电路图如图4所示。
3 系统软件设计
3.1 软件开发环境介绍
本系统采用Linux操作系统, Linux系统具有开源、内核可裁剪、对网络的支持比较完善等特点,用户可以根据自己的需求对内核进行裁剪并重新编译。在开发阶段,采用挂载NFS根文件系统进行开发,以方便软件的调试。本文完成的工作有:(1)在前面所述的硬件平台上构建最小嵌入式Linux系统,包括对UBOOT、内核、根文件系统的移植[4],在对内核进行移植时,将本系统所用到的USB摄像头和WiFi模块等相关的驱动编译到内核中。(2)在该系统平台上进行motion的移植及嵌入式Web服务器的搭建。编写基于motion的监控程序,通过CGI和motion中的Http API来编写Web控制页面并对该系统进行整体测试。
系统交叉编译环境:主机开发环境选择ubuntu9.10操作系统,主机工具链gcc-4.6.3,交叉编译工具链arm-linux- -gcc-4.3.2,内核版本采用Linux2.6.38内核。
3.2 移植motion到6410开发板
motion是一个用于移动图像监控的程序,本系统实现的视频动态检测功能就是基于motion的,使用的是motion-3.2.12版本。下面介绍motion的移植和相关的配置。
首先将motion-3.2.12源码解压到/work/tools目录下,接下来进行编译安装,进入解压后的目录,执行命令:./configure-prefix=${PWD}/_install-host=arm-linux,生成Makefile文件,由make进行编译,make install将生成的库和头文件安装到指定的./_install目录下。然后拷贝./_install/bin/下的可执行程序motion到开发板根文件系统的/usr/sbin目录下。另外需在开发板根文件系统目录中创建/var/run/motion/目录,用于存放motion进程。
接着进行motion的配置,根据./_install/etc/下的参考配置文件进行配置,修改后将配置文件放在开发板根文件系统的/etc/motion目录下。配置文件的主要参数设置如表1所示。
3.3 动态视频检测算法及报警实现
目前,在静态背景下,主要有三类运动目标检测算法:帧差法、背景减法和光流法。本系统调用的motion采用帧差法[5]。该方法基于图像序列中相邻图像中较强的空间相关性,直接将相邻两帧或多帧图像中对应的像素点逐一相减,各个像素对之间都会得到一个数值,如果这个数值的绝对值小于指定的阈值,则认为该点为背景像素点,反之为运动目标中的像素点。帧差法最大的特点在于算法实现简单,程序设计复杂度低,实时性好。此外,由于相邻帧的时间间隔比较短,因此该方法对光线的变化具有较强的鲁棒性,帧差法流程图如图5所示。
其中T为二值化阈值,Di(x,y)中的1表示运动目标,0表示背景。本系统的motion动态视频检测通过帧差法来判断是否有物体入侵,并通过2个脚本来响应motion事件,以实现监控报警和邮件通知。监控报警脚本通过判断motion配置文件中的参数设置决定在on_motion_detected事件触发时播放报警声。邮件通知脚本通过判断motion配置文件中的参数设置决定在on_event_start事件触发时发送最新捕获到的图片信息到指定的邮箱来通知用户。
3.4 Web服务器的搭建
为了方便服务器和浏览器通信,需要进行Boa服务器移植以及CGI程序编写和HTML网页设计。
Boa服务器通过建立http请求列表来响应多路http连接请求,可以大大节约系统资源,非常适用于嵌入式系统[6]。这里主要介绍Boa服务器的移植过程。首先将下载的Boa源码包解压到/work/boa目录下,进入解压后的目录/work/boa/boa-0.94.13/src执行./configure生成Makefile文件;接下来修改生成的Makefile文件,将CC=gcc改为 CC=arm-linux-gcc,将CPP=gcc-E改成CPP=arm-linux-gcc-E,保存后进行make;之后执行arm-linux-strip boa,可以去掉调试信息并进行优化,最终会在src目录下生成boa可执行文件。然后对Boa的配置文件boa.conf修改如下:
修改#ServerName www.your.org.here
为 ServerName www.your.org.here;
修改DoucmentRoot /var/www
为DoucmentRoot /www;
修改AccessLog /var/log/boa/access log
为#AccessLog /var/log/boa/access_log;
修改ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
为ScriptAlias /cgi-bin/ /gec/web/cgi-bin/。
接着在开发板上创建/etc/boa和其他相关的目录并将前面生成的boa和boa.conf拷贝过来,步骤如下:
创建目录mkdir /etc/boa;
创建HTML文档的主目录mkdir /www;
创建CGI脚本所在录 mkdir /www/cgi-bin;
将boa.conf拷贝到开发板根文件系统的/etc/boa下cp boa.conf /nfs_root /etc/boa;
将boa拷贝到开发板根文件系统的/etc/boa下cp src/boa /nfs_root /rootfs/etc/boa;
将ubuntu下/etc/mime.types拷贝到开发板根文件系统的/etc下cp /etc/mime.types /nfs_root /rootfs/etc。
接下来进行CGI程序的编写,其编程原理主要为:通过GET或者POST等方法获取表单中的数据,激活URL所指定的CGI应用程序,CGI应用程序将处理好的结果传送给服务器,服务器再把结果返回到浏览器。
系统的HTML页面包括4个界面,即系统设置、网页监控、查看图片和查看视频。将设计好的index.html页面拷贝到开发板www目录下,打开浏览器输入开发板地址,如http://172.16.72.93/index.html,可看到设计好的网页。
3.5 基于TCP/IP协议的视频流传输
本系统的视频实时传输是基于TCP/IP协议的流式套接字接口编程方式[7]。实现的该协议的设计基于分层模型,包括网络接口层、网络层、传输层、应用层,每一层都封装来自上一层的消息,加上自己的数据头和数据尾。它实现了网络中不同主机间的通信,属于典型的B/S模式。面向TCP的网络通信流程如图6所示。数据传输的步骤如下:首先服务器端创建Socket函数进行初始化并建立流式套接字,之后调用Bind函数进行端口绑定,接着调用Listen函数等待浏览器的请求。当浏览器向服务器发送连接请求时,通过Accept和Connet函数来建立连接,接着通过Send和Recv函数实现数据的通信功能,最后通过Close函数关闭套接字。
本文提出了基于视频动态检测的小区车库私家车监控报警系统。主要从motion移植、视频动态检测及报警、Web服务器搭建和视频传输等方面阐述了系统的设计思路。实验测试表明,系统运行稳定可靠,视频传输的清晰度高,传输流畅,能够满足需求,可以极大地提高私家车在小区车库的安全性。
参考文献
[1] 李红刚,张素萍,方佳,等.基于ARM的智能家居远程监控系统设计[J].现代电子技术,2009(5):134-128.
[2] 李昂,送海声,苏小芸.基于Android的视频监控系统设计与实现[J].电子技术应用,2012,38(7):138-140.
[3] 曹理发,尹勇,刘恒辉.基于ARM和DSP的视频监控系统设计与实现[J].电子器件,2009,32(1):213-217.
[4] 韦东山.嵌入式Linux应用开发完全手册[M].北京:人民邮电出版社,2008.
[5] 徐腾飞.视频序列中基于检测的多目标跟踪研究[D]. 南京:南京邮电大学,2011.
[6] 陈荣军,罗文聪.基于无线的物联智能家居控制系统设计[J].电子技术应用,2012,38(5):142-144.
[7] 代治国,李兴霞.基于ARM的智能小区远程视频监控系统[J].电子设计工程,2013(2):70-72.