APP下载

基于ARM11的移动图像检测与监控系统的研究

2013-08-13

电视技术 2013年15期
关键词:配置文件网页嵌入式

康 乐

(哈尔滨工程大学核科学与技术学院,黑龙江 哈尔滨 150001)

责任编辑:魏雨博

随着科技的发展,图像检测技术的应用越来越广泛,而传统上多采用PC机作为图像检测的通用平台,这不但对工作环境要求高,而且这样的系统体积庞大、不利于维护、成本高,更难满足某些领域对实时移动方面的要求[1]。由于电子技术的飞速发展,导致以之为基础的嵌入式技术得到了大力的发展。嵌入式处理芯片因其结构简单、体积小、性能高和功耗低的特点被广泛应用于各种系统中[2-4]。如能将先进的嵌入式技术与图像检测技术完美结合在一起并得到应用,将对图像检测系统的开发与应用具有积极的推动作用。

基于上述思想,本文利用市面上处理速度最快的ARM11处理器,结合无线传输技术和嵌入式开发技术,设计具有图像检测与监控功能的智能系统。所设计的系统不仅在开发周期上节省了时间,而且也在很大程度上实现了检测平台的通用化,有着非常广阔的应用空间。

1 系统方案与主体设计

1.1 系统总体架构

系统采用B/S架构[5-7],在嵌入式设备中嵌入一个小型服务器BOA,可以在上网机中利用浏览器进行相关操作,具体系统架构如图1所示。从图中可见该系统共分五大功能块,每个功能块都由相应的软件实现。第一部分是系统软件的主程序,这里通过将开源软件即图像检测软件motion移植到嵌入式硬件平台上,并编写motion的配置文件,将其作为系统后台运行程序;第二部分为网页监控。通过在嵌入式设备中建立Boa Web服务器,并在服务器目录下建立html监控主页,利用cgi接口和motion的http API的网页控制功能,实现cambozola在主页上显示监控视频流;第三部分为移动图像监测报警。可根据实际需要设置移动图像监测阈值,当摄像头监控区域图像像素变化超过监测阈值后产生相应事件,利用madplay播放报警音作为事件的响应,该功能可以通过网页启动或禁止移动图像监测;第四部分为邮件通知功能。当检测到移动物体进入监控区域时发送邮件通知,邮件可将即时获取的图片和视频文件作为附件,邮件通知准确的捕获时间,也可以通过网页进行启动、禁止、设置邮件格式和邮件收发等操作;第五部分为监控影像信息存储功能。在本地采用SD卡作为存储介质,将重要的监控信息以jpg图片格式和avi视频格式存储在本地存储介质中,也可以通过网页决定是否存储影像信息。

1.2 系统总体软件结构

图1 系统架构图

根据实际的要求,使系统性能和效果达到最好,在嵌入式设备中移植了最新版本的软件,它是本系统研究的最主要部分,具体的移植设计过程将在下面进行研究,这里主要对系统的总体软件体系结构进行介绍,其具体结构如图2所示。在系统嵌入式终端的软件设计中,使用UBoot_nand-ram256进行整个硬件与外围设备的初始化,并引导启动Linux内核;使用最新内核版本Linux 2.6.38来管理整个系统资源和协调所有程序;通过编写或者移植各硬件设备的驱动程序;使用性能优越的Ubifs文件系统来管理目录和文件信息。

图2 系统总体软件体系结构图

1.3 系统硬件规划

考虑到实际应用以及功能可扩展的要求,这里需要分辨率较高的USB摄像头,以及能够满足无线数据传输的SD-WiFi模块、音频输入输出模块等。其具体的系统硬件结构如图3所示。可见,该系统在服务端硬件实现简单,体积小巧轻便。可以很好地与现有的信息网络结合,完成某些特殊环境下对移动图像检测与视频监控的需要。利用系统的终端设备将摄像头所采集到的视频数据经过ARM11处理,再由SD-WiFi无网网卡连接到网络热点,发送给网络。就可以利用远程上网机的浏览器进行处理操作。本系统入网方式灵活,可以同时兼顾无线和有线两种方式,这与传统技术相比可以大大减少成本以及设备的复杂度。

图3 系统硬件结构图

1.4 基于motion的系统设计

该系统的主要功能是为了检测摄像头所摄区域内移动的物体,并对检测到的结果进行实时处理操作。该功能的实现在软件上主要是基于motion的监控检测程序,具体基于motion的软件设计的实现过程如图4所示。从图中可见该软件从功能上分为三大部分,即通过Web服务器的实时网页控制部分、motion影像信息处理部分和基于http的控制模块部分。只要在监控区域内有图像移动超过了所设定的像素阈值38 400,就会触发motion事件。检测监控系统主要通过图中所示的3个脚本来完成motion事件的功能,即监控报警、邮件通知和存储文件数限制的控制功能。对于监控报警功能的实现在软件上是通过脚本motion_alarm来实现的,即通过判断配置文件中enable_alarm参数是否设置为on,来决定是否在on_motion_detected时调用madplay播放报警声。对于邮件通知功能的实现是通过脚本email_notice实现的,即通过分析配置文件中的参数设置,判断是否在motion产生on_motion_start事件时进行邮件发送。发送邮件的前提是用户设置了完整的邮件信息,如果相关信息完整则发送一封将最新捕获图片或视频作为附加的通知邮件。对于最大文件数限制功能的实现是通过files_limit脚本实现的,它是将在motion产生on_picture_save或on_movie_start事件时调用,通过分析配置文件中的参数设置,判断是否进行存储文件数限制,如果设置了此限制,则会在指定存储路径中文件超过阈值的时候删除掉最旧的部分文件。

图4 基于motion程序的系统图

2 关键技术研究

为了使系统功能更加优越,移植了与之相匹配的最新版本软件,这也是本系统设计的重点与难点。下文将对关键模块的驱动与应用软件库的移植过程做具体研究。

2.1 madplay播放器移植

为了保证音频的质量,采用madplay播放器程序,该程序主要依赖于提供数据压缩用的函数库zlib,MP3文件id3标签分析库libid3tag和高精度MPEG音频解码库libmad,该库支持 MPEG-1(LayerⅠ,LayerⅡ和 LayerⅢ),即MP3。将这些程序依次安装到根文件系统中。

1)编译和安装zlib

(1)将对应的库解压到相应的目录下,并使用命令:./configure-shared-prefix=_install,生成 Makefile。其中-shared指明可生成动态库,-prefix=_install指明后面执行make install后库和头文件的安装路径,如果指定的_install先前不存在,可以先创建该目录。

(2)修改Makefile

(3)分别使用make和make install编译和安装该库,随后将生成的库和头文件安装到指定的目录下,最后将生成的动态库分别拷贝到根文件系统中的lib和交叉编译工具安装目录下的库中,将生成的头文件拷贝到交叉编译工具安装目录下的头文件目录下。

2)编译和安装libid3tag

(1)进入程序目录并使用:./configure-host=armlinux-prefix=MYM{PWD}/_install,生成 Makefile。其中-host指明交叉编译工具前缀,-prefix=MYM{PWD}/_install指明后面执行安装库和头文件的路径,这里指定目录可以不存在,当被执行安装命令后会自动创建。

(2)分别使用编译和安装命令。将生成的库和头文件分别安装到指定的目录下。

(3)将生成的动态库拷贝到根文件系统的lib目录下。随后在交叉编译工具安装目录下的库和头文件中分别安装生成的动态库和头文件。

3)编译和安装madplay

由于上面已经将madplay所依赖的动态库都安装到了根文件系统库中,这里只需要编译动态连接的madplay程序即可。使用命令:./configure-host=arm-linux,生成Makefile。随后通过编译madplay即可在相应目录顶层找到生成的播放器主程序madplay。最后将madplay拷贝到开发板根文件系统的sbin中。

2.2 Boa 服务器移植

在嵌入式设备的管理与交互中,基于Web方式的应用成为目前的主流,这种程序结构也就是大家非常熟悉的B/S结构,即在嵌入式设备上运行一个支持脚本或CGI功能的Web服务器,能够生成动态页面,在用户端只需要通过Web浏览器就可以对嵌入式设备进行管理和监控,这样非常方便且实用。Boa是一个非常小巧的Web服务器,在存贮空间和运行时所占有的内存空间上都会非常适合于嵌入式应用场合,下面列出Boa的移植步骤:

1)解压源码后进入相应目录,使用命令:./configure,生成Makefile,修改Makefile文件,找到CC=gcc,将其改成CC=arm-linux-gcc,再将 CPP=gcc-E,将其改成CPP=arm-linux-gcc-E,并保存退出。

2)这里关键修改生成的config.h文件,注释掉如下两行:

3)使用编译命令编译源码,还可以通过命令:armlinux-strip boa,将调试信息剥去,可得到的最后程序只有60 kbyte大小,将Boa拷贝到开发板根文件系统的/usr/sbin目录下。

4)为了能够支持CGI程序的执行,关键是要编写Boa的配置文件。也就是需要在/etc目录下建立一个Boa目录,里面存放Boa的主要配置文件boa.conf,这里编写的配置文件boa.conf主要内容如表1所示。

表1 配置文件boa.conf的关键参数的设置

2.3 FFmpeg的移植和安装

FFmpeg是一个开源免费跨平台的视频和音频方案,它提供了录制、转换以及流化音视频的完事解决方案。移植FFmpeg的目的主要是为了使motion能支持将捕获到的视频流转换成avi格式的视频文件进行存储,因此,这里仅需要移植FFmpeg中的以下几个库。

Libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能。

Libavcodec:用于各种类型声音/图像编解码。

Libavutil:包含一些公共的工具函数。

下面具体介绍编译和安装FFmpeg过程。

1)进入相应目录,使用命令:./configure--prefix=./_install--arch=arm--cross-prefix=arm-linux-enableshared,将生成Makefile,其中-prefix指明生成的库和执行程序的安装目录。

2)编译后再使用安装命令将生成的库和头文件安装到指定的目录下。拷贝./_install/include/libavcodec/和./_install/include/libavformat/下的头文件以及./_install/lib/下共享库分别到交叉编译工具安装路径的对应目录和开发板根文件系统对应目录下。

2.4 motion的移植和安装

motion是一个开源的用于移动图像监控程序。下面是motion的移植安装和配置方法。

1)编译和安装motion

(1)在对应目录下使用命令:./configure--prefix=MYM{PWD}/_install--host=arm-linux,生成 Makefile。随后使用编译命令,并用安装命令,将生成库和头文件安装到指定的./_install目录下。

(2)拷贝./_install/bin/下的可执行程序motion到开发板根文件系统的/usr/sbin目录下。另外,还需在开发板根文件系统目录中创建/var/run/motion目录,因为默认/var/run/motion/motion.pid文件将用来存放运行中的motion进程。

2)配置motion

(1)将./_install/etc/下的官方参考配置文件motiondist.conf拷贝到开发板根文件系统/etc/motion/目录下,命名为 motion.conf。

(2)参考提供的配置文件并将之修改内容如表2所示。

表2 配置文件

2.5 Web 服务器搭架

根据boa的配置文件,这里需要将开发板根文件系统的/web作为boa web服务器的主目录。下面是搭建web的服务器步骤:

1)将所用web目录下的html网页和cgi脚本拷贝到开发板根文件系统的根目录下。

2)在开发板的根目录下创建如下链接,假定开发板根目录在/nfs/rootfs/下,则

3)编译、安装cgi编写的动态网页。在cgi目录下存储编写好的 images.cgi,movie.cgi和 setting.cgi三个动态网页的源码。这里可以用make命令分别进行编译,再将它们拷贝到开发板根文件系统的/web/cam/目录下。

4)编译、安装处理motion事件的脚本中需要引用的几个工具程序。这里在tools目录下提供了getip,getval和mailsender三个工具的源码,可使用make命令分别编译,再将它们拷贝到开发板根文件系统的/web/bin/目录下。

5)安装cambozola。将对应目录下的cambozola-latest.tar.gz解压,找到 cambozola.jar,直接将它拷贝到开发板的/web/cam/目录下。

3 系统测试与分析

这里由于采用无线网络进行系统测试,所以需先将开发板文件系统rootfs制作为Ubifs镜像,再将其镜像烧写到Nand Flash中。开机自动运行服务启动脚本,在PC机上通过网页测试开发板上监控系统的性能。经过实际测试,当在浏览器地址栏中输入开发板的IP地址后,能成功地访问系统网页,对网页中各个功能进行测试性能均良好,达到了设计预期。如在网页标题栏中点击“查看图片”的链接马上就会进入图片浏览页面,该页面如图5所示,可以在该页面中看到按捕获时间排列的系统检测到的最新的16张移动图像。其中每张图像都是由当前帧和前一帧(背景帧)进行比较,如果不同像素点的点数超过了阈值38 400,会判断图像有变化,就会触发motion事件产生相应图像。可以根据实际情况,合理设置相应阈值。

4 小结

本文在Linux环境下充分利用开源代码的优点,极大地提高了软件开发效率,并结合现代图像检测和通信传输技术,对能够处理实时视频图像的软件进行了详细设计分析。经过测试该系统软件性能可靠、稳定且监控系统的监控画面清晰、流畅、实时性好,克服了软件在工作过程中遇到常见问题。所以,此系统可以应用于很多领域,如为日常生活提供智能家居的服务,也可应用于军事、工业等相关领域。

图5 系统检测结果(截图)

[1]张壮暑,蔡晓东,张学敏.监控视频中运动目标识别分类系统研究[J].电视技术,2012,36(23):165-167.

[2]宋宝华.Linux设备驱动开发详解[M].北京:人民邮电出版社,2009.

[3]康维新,刘立才.基于ARM11的移动多线程循环监控服务器设计[J].应用科技,2012,39(5):40-44.

[4]车进,康彩,吴丹.基于SOPC技术的实验室智能视频监控系统[J].电视技术,2012,36(23):142-145.

[5]李广.基于B/S模式的嵌入式监控平台设计与实现[J].武汉理工大学学报:信息与管理工程版,2009(1):102-105.

[6]张海俊.嵌入式监控系统 Web服务器设计[D].杭州:浙江大学,2008.

[7]王秋实.嵌入式瘦Web服务器研究[D].沈阳:沈阳航空工业学院,2010.

猜你喜欢

配置文件网页嵌入式
互不干涉混用Chromium Edge
TS系列红外传感器在嵌入式控制系统中的应用
基于Zookeeper的配置管理中心设计与实现
忘记ESXi主机root密码怎么办
基于CSS的网页导航栏的设计
基于HTML5静态网页设计
搭建基于Qt的嵌入式开发平台
为View桌面准备父虚拟机
基于URL和网页类型的网页信息采集研究
嵌入式软PLC在电镀生产流程控制系统中的应用