一种基于ARM-Linux的Web远程放射源实时视频监控系统
2014-03-03何剑锋何月顺叶志翔
何剑锋,罗 敏,何月顺,叶志翔
(1.核技术应用教育部工程研究中心,江西 南昌 330013;2.江西省计算技术研究所,江西 南昌 330002)
一种基于ARM-Linux的Web远程放射源实时视频监控系统
何剑锋1,罗 敏2,何月顺1,叶志翔1
(1.核技术应用教育部工程研究中心,江西 南昌 330013;2.江西省计算技术研究所,江西 南昌 330002)
针对放射源监控的实时性和网络多媒体远程访问的新要求,提出一种基于嵌入式ARM-Linux有线和无线传输的B/S模式Web远程放射源实时视频监控系统。系统采用ARM920T内核的微控制器S3C2440版和UVC格式/YUV编码标准USB摄像头构建Web服务器端,详细设计嵌入式Linux下摄像头的驱动程序,分析视频数据采集与传输的开源MJPG-Streamer视频服务软件,结合Vedio4Linux2接口和socket网络编程,并将其移植到嵌入式Web服务器端。监控系统的测试表明:经过压缩与编码处理后其图像数据流信息能稳定、可靠的显示在监控终端的浏览器中,在放射源和核设备实时监控中取得优良的效果。
ARM-Linux;视频;Web技术;放射源监控;移植
0 引 言
远程视频监控系统是应用现代计算机技术进行图像采集、编/解码、存储、传输并通过计算机控制有关设备的监控系统。计算机网络技术、图像处理技术与通信技术的快速发展极大的推动了视频监控技术的不断更新。近年来,核技术被广泛应用于工业、农业、医疗、重点实验室及教学科研等各个领域,其放射源安全监控也越来越受到重视。在辐射监测技术日趋成熟的今天,人们已经可以利用仪表对有危险的、环境恶劣的采集工作实现远程操作,大大降低危险性[1-2]。为了满足放射源安全监控的实时性、可靠性、网络多媒体远程访问等需求,本文设计并实现一种基于嵌入式ARM-Linux有线和无线传输的B/S模式Web远程放射源实时视频监控系统。
1 系统设计方案
系统的服务器端硬件解决方案由基于ARM920T内核的RISC-16/32微控制器S3C2440A构成的视频信号处理传输模块来完成,该模块的接口带有128M SDRAM,1G的Nand Flash,3通道的UART,3个USB Slave型接口、320×240分辨率的3.5英寸TFT真彩液晶触摸屏等;USB输出的数字摄像头可实现VGA级(640×480)的压缩视频信号输出[3],内置有专用DSP芯片对视频信号处理与压缩;服务器端用于采集视频数据和网页服务器的开发设计。客户端使用自带浏览器的PC、智能手机或平板电脑等通过无线Wi-Fi或有线网进行数据传输,也可连接外网传输。
系统的软件构架主要由驱动程序模块、视频数据采集模块、嵌入式Web服务器模块、无线传输模块和视频监控模块等个模块组成。其中驱动程序模块主要实现在Linux下识别摄像头和无线网卡设备;视频数据采集模块负责从USB摄像头中获取图像信息且获取过程符合Video4Linux接口标准,并采用MJPG-Streamer软件设计和实现;嵌入式Web服务器模块接收客户端浏览器的连接请求并分析,通过访问嵌入式平台读取视频流信息;无线传输模块通过Wi-Fi构建局域网,系统可在局域网内访问网络服务器。视频监控模块通过访问嵌入式网络服务器获取视频数据,实现视频信号的接收、存储及播放程序。
2 摄像头驱动程序设计
目前,摄像头主要有CCD(charge coupled device)和CMOS(complementary metal oxide semiconductor)两种类型。由于CMOS的功耗要比CCD小,较CCD便宜,且满足图像质量要求,因此本系统采用输出格式为UVC的摄像头、YUV编码方式、标准USB接口的CMOS摄像头。针对不同摄像头的驱动,将驱动程序分共性模块和特性模块,共性模块包括设备注册、设备初始化、设备卸载、上层接口函数等。特性模块用于调用摄像头设备的具体操作函数。当USB摄像头设备插入时,共性模块执行,并获取摄像头设备的型号和相关参数,根据参数确定该芯片的具体操作函数,挂载该设备驱动程序。
2.1 Linux设备驱动程序
Linux系统内核以设备文件方式通过调用接口函数使用底层的硬件设备[4-5]。上层应用程序通过获得设备的文件描述符,然后调用如open()、close()、read()、write()、ioctl()等来操作设备。
USB设备驱动程序需要针对USB内核层和文件系统定义两个不同的数据结构,分别用于提供信息和操作函数。主要包含描述自身特性的USB核心层数据结构模块、设备初始化和卸载模块、上层软件接口模块、数据传输模块等。
1)描述自身特性的数据结构模块,模块定义了配置摄像头硬件所需的参数和数据交换的接口方式。
2)设备初始化和卸载模块,分别调用init_module()和cleanup_module()实现。并通过初始化函数和卸载函数完成设备的注册和注销,usb_init()函数中调用设备注册函数usb_register(&usbcamer_driver);卸载模块调用注销函数usb_deregister(&usbcamer _driver)。
3)上层软件接口模块,主要是针对文件系统,应用程序把设备当成普通的设备文件进行访问。通过填充file_operation数据结构实现USB设备的系统调用,采用 V4L协议规范,对摄像头的DSP输出视频信号进行传输和相应的处理。主要完成open()、close()、read()、mmap()、loctl()等函数功能模块。
2.2 驱动程序编译与加载
Linux内核的编译过程是通过内核源代码根目录和各个子目录中的Makefile分级管理。由于Linux操作系统中对驱动编译常存在静态和动态两种编译方式,对于一个调试好的驱动程序而言,通常将其直接编译到了内核中,在配置内核时就可以自由裁剪,即静态编译方式。将USB摄像头驱动程序usbcamera编译到内核的具体操作如下[6]:
1)将驱动程序选项加入到menuconfig的menu中以供配置内核时选择该驱动模块。在drivers/usb/ config.in文件中,配置在“$CONFIG_VIDEO_DEV”选项下。
2)根目录下修改MAKEFILE。将“CC=gcc”改为“/opt/EmbedSky/4.4.3/bin/arm-gcc-linux”。保存使用该交叉编译器。
3)配置内核编译参数。在配置内核时(如“makemenuconfig”),选择 Multimedia device下的 Video for linux,usb suppor目录下选择support for usb和选择相应的摄像头驱动模块,保存退出。执行编译命令make modules可编译内核中所有配置为模块的驱动程序,make modules命令完成后会在/driver/usb下生成sPCa5xx.o,sPCadecoder.o,sPCa_core.o文件。最后通过insmod挂载驱动模块。
4)内核配置,完成了驱动程序的编译和加载,需要配置内核,通过make menuconfig命令配置:Device Drivers →Multimedia devices →Video capture adapters→V4L USB devices→USB SPCA5XX Sunplus/Vimicro/sonix jpeg Cameras。配置完成后,保存配置单,重新编译内核镜像,并烧写到ARM9视频板,然后插入USB摄像头,启动系统,系统将自动识别该摄像头,并在文件系统的“/dev”目录下生成“video0”的设备名。
3 视频数据采集模块设计
视频数据采集模块主要用于将USB摄像头所采集到的数据流读出,并交由其他模块处理,当摄像头驱动程序加载完成后,需要添加Vedio4Linux模块。Vedio4Linux(V4L)[6]是Linux中有关视频设备的内核驱动程序,为视频设备提供与应用程序的相关接口函数。在Linux中视频设备作为文件形式进行读写,对应于/dev/video0。通过提供的API程序实现对/dev/ video0的各种操作。Vedio4Linux的主要数据结构包含基本信息capabilities,采集图像属性pictures,信号源属性channels,捕获区信息windows,利用mmap映射帧信息mbufs,内存映射mmaps等。Vedio4Linux视频采集的流程如图1所示。
图1 V4L视频采集流程图
MJPG-Streamer可获取网络摄像头的JPEG格式图像信息,传送到浏览器或移动设备。其主要是通过Vedio4Linux2接口,从单一输入组件获取图像后传输到其他多个输出组件使用的应用程序。“MJPGStreamer”通过模块化方式设计各个组件(plug-in),在设计中用户根据自行需要选择各个功能模块。常用的组件有input_uvc输入组件及output_http输出组件。input_uvc.c文件中包含该组件的接口函数的定义,获取视频图像数据,包含有提供给外部接口使用的函数。output_http输出组件主要完实现了对客户端的请求相应要求,发送信息返回给客户端output_http输出组件中的http.c文件内定义了服务器对客户端请求的响应。其他相关组件包括input_control、input_file、input_testpICture、input_gspcavl、output_autofocus、output_file、out_viewer等。通过脚本文件start_uvc_yuv.sh中包含有执行语句#./start_uvc_yuv.sh,即使用编译完成后的MJPG-Streamer可执行文件。
4 Boa软件与CGI C库的移植
Boa软件是专门为嵌入式设备设计的Web服务器,以达到满足嵌入式设备资源条件的目的。由于Boa服务器小巧、性能较高、且源码开放、支持CGI编程而被广泛采用[7]。而CGI(common gateway interface)称为通用网关接口,可实现客户端和服务器端信息的交互。CGI作为一种规范,可使用任何一种语言来编写CGI程序[9]。下面主要阐述Boa软件与CGI C库的移植过程。
4.1 Boa软件的移植
首先,从Boa的官方网站下载完毕后解压到相应目录:#tar xvfz Boa-0.94.13.tar.gz-C/opt/EmbedSky/。进入Boa解压文件夹,修改src目录下的Makefile文件:#cd/opt/EmedSky/Boa-0.94.13/src。将CC=gcc和CPP=gcc-E修改成CC=arm-linux-gcc,CPP=armlinux-g++-E保存退出即可。
其次,修改src/compat.h文件中120行为:#define TIMEZONE_OFFSET(foo)foo->tm_gmtoff。
最后,完成上述编译条件的设置后即可编译出Boa的可执行文件,并对可执行文件进行优化。通过执行配置#make arm-linux-strip Boa命令后,在文件系统中新建一个名为“Web”的目录,/etc/目录下新建一个“Boa”目录,复制刚才移植的Boa可执行文件到sbin/目录下,复制Boa的配置文件“Boa.conf”到文件系统的etc/Boa/目录下。同时,修改配置Boa.conf文件。
4.2 CGI C库的移植
首先,下载cgic库后,解压到“/opt/EmbedSky/”目录。进入cgic205目录修改Makefile文件参数,CFLAGS=-g-Wall;CC=arm-linux-gcc;AR=arm-linux-ae;RANLIB=arm-linux-ranlib;LIBS=-L./-lcgic等。同时,修改Makefile文件中install:libcgic.a语句:cp libcgic.a/opt/EmbedSky/4.3.3/arm-none-linuxgnueabi/libc/armv4t/lib;cp cgic.h/opt/EmbedSky/4.3.3/ arm-none-linux-gnueabi/libc/usr/include,以保证静态库的正确调用。
其次,完成makefile文件的修改后,需将CGIC库移植到视频信号处理板上,通过NFS挂载,将文件capture和测试脚本cgictest.cgi移植到NFS文件目录的Web下。
最后,编写cgi脚本执行,通过测试脚本cgictest. cgi以及编写cgictest2.c编译生成cgi脚本的过程来测试cgi。编写CGI测试程序后,编译文件:#armlinux-gcc-o cigctest2.cgi cgictest2.c。编译完成后便会生成cgictest2.cgi脚本,使用chmod+x cgictest2.cgi修改测试文件权限。
5 远程视频监控系统应用
测试环境说明:测试环境包括硬件环境、软件环境及放射源环境。1)硬件环境:S3C2440 ARM视频板及组件,UVC输出格式摄像头,Tenda A6无线路由器,TL-WN321G+型号USB无线网卡,PC机,智能手机或iPad;2)软件环境:嵌入式Linux操作系统,安装有视频采集插件浏览器。测试方法是通过有线模块或无线模块,在PC机或智能手机上连接该网络,通过浏览器访问开发板的Boa服务器中网页,进行视频监控;3)放射源环境:监控具有铅箱体屏蔽防护条件下60Co、137Cs、241Am、232Th等放射源。
视频监控测试过程:开启无线模块,ARM视频板和PC机连接无线模块,同时将USB摄像装置连接至视频板,开启视频服务器软件,在PC机或智能手机的浏览器上输入开发板IP、端口及监控页面地址,实现远程B/S模式的监控。
测试设备中本文对摄像头采取特殊的结构设计保护,且放射源均放入在防护箱体内,其目的是为了避免辐射对视频监控设备辐射敏感器件的损伤[10-11]。测试过程分别通过PC机浏览器实现远程视频监控,安卓智能手机登入Wi-Fi模块并通过浏览器实现视频监控的效果。测试结果表明该系统将嵌入式和无线网络技术相结合,视频监控与辐射剂量监测相结合,通过无线模块传输,实现了B/S模式的网络视频监控效果,并可通过客户端PC机登入页面实现监控,同时可使用智能手机登入监控页面实现监控。
6 结束语
本文提出一种基于嵌入式ARM-Linux有线和无线传输的B/S模式Web远程放射源实时视频监控系统。该系统很好地实现了无线监控,可完整保存监控现场信息,且能够摆脱有线的束缚;同时,基于Web远程放射源实时视频监控系统的便捷性也得到了有效的提升。
[1]孙钊.基于WinCE的远程辐射监控终端的设计[D].南昌:东华理工大学,2012.
[2]赵书朵,谌海云,高凤水,等.基于ARM的嵌入式多路远程视频监控系统的设计[J].中国测试,2010,36(10):66-68.
[3]Samsung Corp.User Manual S3C2440A[EB/OL].http:// wwv.Samsung.com,2008.
[4]张光建,刘政.嵌入式Linux驱动程序开发实例教程[M].北京:清华大学出版社,2011.
[5]何剑锋,李祥,何月顺.基于S3C2410的嵌入式Linux下OLED模块驱动设计[J].液晶与显示,2010(5):90-93.
[6]驴性天下.V4L和V4L2的区别[EB/OL].http://blog.csdn. net/dulin201004/article/details/7864762,2012.
[7]百度百科.Boa服务器 [EB/OL].http://baike.baidu.com/ view/2373126.htm,2012.
[8]dfhf2007.嵌入式CGI开发之旅[EB/OL].http://blog.chinaunix.net/uid-24810608-id-330976.html,2011.
[9]Gordon D.Automatic motion detection in reconnaissance imagery and other applications of real time orthorectification[J].Airborne Intelligence,Surveillance,Reconnaissance(ISR)Systems and Applications II,2005(6):5-7.
[10]罗霞,陈琳,赵小鹏.一种视频监控设备防辐射结构设计[C]∥第十六届全国核电子学与核探测技术学术年会,2012:164-167.
[11]毛从吉,毋琦.可用于远程辐射探测系统的数据采集与监控平台的开发 [J].核电子学与核探测技术,2012(6):728-731.
System designing of web remote real-time video radioactive monitoring based on ARM-Linux
HE Jian-feng1,LUO Min2,HE Yue-shun1,YE Zhi-xiang1
(1.Engineering Research Center of Nuclear Technology Application,Ministry of Education,Nanchang 330013,China;2.Jiangxi Institute of Computing Technology,Nanchang 330002,China)
For the new requirements for radioactive sources monitoring such as real-time,networked multimedia remote access etc.,the radioactive sources real-time video monitoring system of B/S model with remote web access is presented,which is based on wired and wireless transmission of the embedded ARM-Linux.It uses the S3C2440 controller board with ARM920T core and USB camera of UVC format and YUV coding to build web server,the camera driver on embedded Linux is designed in detail,the video data acquisition and the open source MJPG-Streamer video service software are analyzed,and the port of Video4Linux2 and the network programming of socket are combined and ported into the embedded web server.The monitoring system test results show that the image data flow information can display stably and reliably on the monitoring terminal browser after compressing and encoding process,and achieve excellent results on the real time monitoring of the radioactive sources and the nuclear equipments.
ARM-Linux;video;Web technology;radioactive monitoring;porting
TL929;X837;TP334.2+5;TP391.413
:A
:1674-5124(2014)05-0100-04
10.11857/j.issn.1674-5124.2014.05.026
2014-02-23;
:2014-04-17
国家自然科学基金项目(11365001);江西省自然科学基金项目(20114BA211026);江西省教育厅科学技术研究项目(GJJ13464);核技术应用教育部工程研究中心开放基金项目(HJSYB2011-08)
何剑锋(1977-),男,江西婺源县人,副教授,博士,研究方向为嵌入式系统应用开发、核数据采集与信号处理。