嵌入式无线视频监控系统的设计与实现
2015-11-08王越庞振营王帅范先星
王越,庞振营,王帅,范先星
(重庆理工大学a.计算机科学与技术学院;b.电子信息与自动化学院,重庆400054)
嵌入式无线视频监控系统的设计与实现
王越a,庞振营a,王帅b,范先星a
(重庆理工大学a.计算机科学与技术学院;b.电子信息与自动化学院,重庆400054)
以搭载S3C2440微处理器的ARM9开发板为硬件平台,使用USB免驱摄像头作为视频图像采集设备,通过Linux内核提供的统一接口V4L2实现视频图像的采集。系统使用MJPEG算法压缩技术实现视频数据的编解码,使用无线WiFi技术将视频数据传输给客户端。嵌入式设备终端采集视频数据软件是基于Linux开源的MJPG-streamer软件,针对本系统的需要进行了重新编写,并使用多线程技术。PC机端的监控管理平台是基于Qt和OpenCV开发的一款具有友好图形用户界面的客户端软件。同时,在手机移动端基于Android开发了一款易安装、易操作的APP客户端。实验结果表明:该系统运行稳定,在视频监控客户端能获得清晰流畅的视频流数据。
嵌入式;Linux;视频监控;V4L2
视频监控是对人们无法直接、即时观察的场所提供实时、形象、真实的被监控对象的画面作为即时处理或事后分析的一种手段[1]。随着经济建设的发展,无论是在银行金融行业,还是在公司楼宇、仓储管理等行业,视频监控技术都发挥着不可替代的作用[2]。传统有线视频监控系统需要复杂的网络布线,并且无法在手机移动端随时随地查看监控效果。本文克服了传统有线视频监控系统中存在的不足,设计并实现了在PC客户端和手机APP客户端均能通过无线WiFi实时监控的嵌入式无线视频监控系统,并获得了较好的监控效果。
1 系统总体设计
系统主要包括基于ARM硬件平台的无线视频监控终端[3-4]、PC机Windows系统下的Qt客户端和手机移动端的APP客户端。无线视频监控终端使用以S3C2440微处理器芯片为核心的ARM9开发板为硬件平台,并搭载所需的Linux操作系统。首先,使用开发板上连接的USB免驱摄像头采集视频数据,然后将采集到的数据传输到ARM开发板,由开发板上服务器端的图像采集处理软件对数据进行处理,最后通过开发板上连接的USB无线网卡发出的无线WiFi信号将视频数据传输给客户端。PC机Windows下的监控管理平台是基于Qt和OpenCV开发的一款具有友好图形用户界面的客户端,能实现实时监控、实时视频录像等功能;手机移动端是基于Android开发的一款易操作的APP客户端,能实现实时监控、实时录像、拍照等功能。二者通过特定客户端连接无线视频监控终端的无线WiFi后,均能获得清晰流畅的视频流数据,系统稳定性较好。无线视频监控系统框图见图1。
2 无线视频监控硬件及底层系统实现
本系统选用jz2440开发板作为无线视频监控系统设计的硬件平台。jz2440开发板是以S3C2440微处理器为核心的开发平台。S3C2440处理器是具有ARM920T内核的一款16/32-bit RISC处理器,指令执行效率最高可达300 MIPS。该处理器内带16 Kb指令缓存和16 Kb数据缓存,并采用12 MHz的系统外部时钟源。系统存储扩展了512 MB的NAND Flash(K9F1208U0M芯片)和64 MB的SDRAM(K4S561632E芯片)[5],其快速的数据处理能力和丰富的存储空间为系统高效稳定地运行提供了硬件保障[6-7]。
运行在硬件平台之上的Linux系统主要包括4个层次[8]:引导加载程序(Bootloader)、Linux内核、根文件系统、应用程序。
图1 无线视频监控系统框图
2.1U-boot移植
在嵌入式操作系统中,Bootloader是连接操作系统和硬件平台的桥梁,它在系统上电时开始运行,初始化硬件设备,准备软件环境,最后调用操作系统内核。U-boot(universal boot loader)是遵循GPL条款的开放源代码项目,为Bootloader中较为流行、功能强大的引导加载程序[9]。U-boot移植需要修改与开发板相关的配置文件和底层接口文件,然后才可以在目标开发板上运行。限于篇幅,移植过程本文省略。
2.2Linux内核移植
开发板使用linux-3.4.2内核版本,需要修改内核中的时钟频率使其支持系统外部时钟源,修改网卡驱动使其支持网络功能,以及修改MTD设备分区使其可以挂接文件系统等。
2.3NFS启动根文件系统
新内核具备了网络功能后,可通过设置开发板U-boot控制界面命令行参数自动从NFS启动系统或者从NAND Flash启动系统后手动挂接NFS文件系统。本文考虑方便性,选择前者。
启动开发板至U-boot控制界面,设置U-boot的环境变量,使开发板从网络文件系统(NFS)启动。本文使用的开发板IP为192.168.2.17,PC端虚拟机VMware中Linux有线网卡IP为192.168.2.30,NFS目录为/work/nfs_root/fs_mini _mdev_new,在U-boot控制界面进行如下设置:
set ipaddr 192.168.2.17
set bootcmd'nfs 32000000 192.168.2.30:/ work/nfs_root/uImage_new_wifi;bootm 32000000'
set bootargs console=ttySAC0,115200 root=/ dev/nfs nfsroot=192.168.2.30:/work/nfs_root/fs_ mini_mdev_new ip=192.168.2.17
3 无线视频监控服务器端实现
在完成视频监控系统所需的设备硬件平台的搭建和底层Linux系统的设计后,接下来继续在嵌入式设备上构建一个视频监控服务器,以实现视频数据的采集和传输功能。
3.1服务器端视频数据采集
视频服务器软件从USB免驱摄像头获取视频数据,并将采集到的视频数据使用MJPEG算法压缩技术进行数据处理,然后通过无线方式发送给客户端。服务器端采集视频软件是基于Linux开源的MJPG-streamer软件,针对本系统的需要进行了重新编写。该软件使用多线程技术,输入线程实现采集视频数据功能,输出线程用来响应来自客户端用户的请求,并向用户发送视频数据。重新编写后的服务器软件使用Linux内核向应用程序提供访问音频、视频的统一接口V4L2,以实现视频图像的采集。V4L2接口采集视频数据的工作流程见图2。
3.2服务器端视频数据传输
传统有线视频监控系统中的数据传输需要复杂的网络布线,并且无法随时随地地保证移动端视频监控的效果[10]。本系统克服了传统有线视频监控系统的不足,使用无线方式实现数据的传输。
为了实现无线数据传输,将开发板外接的USB无线网卡设置为AP(access point)工作模式,产生供客户端连接的WiFi无线信号,并设置DHCP等服务使开发板每次连接上USB无线网卡后都能自动分配无线IP和自动设置网关。同时,为连接到开发板服务器端的客户端分配一个识别IP,用于区分不同的客户端。当摄像头采集到视频数据后,服务器端将通过无线网络通信的方式将摄像头采集到的视频数据传输给连接至服务器的客户端。
图2V4L2接口采集视频数据的工作流程
在Linux中,网络通信是基于Socket编程实现的。服务器端通过Socket建立一个通信连接端口,客户端通过此端口与服务器建立连接,并进行通信。服务器与客户端之间的通信传输过程描述如下[11]:服务器端先调用Socket()函数创建一个套接字,接着调用bind()函数给套接字绑定一个端口号,然后再调用listen()函数监听客户端用户请求;如果客户端有connect()请求,服务器端则调用accept()函数与之建立TCP可靠连接,二者通过send()函数和recv()函数进行网络数据通信。具体的TCP网络通信流程见图3。
4 无线视频监控客户端实现
完成开发板上视频监控服务器端的搭建后,即可实现视频数据的采集和TCP协议无线网络传输。由于在客户端通过网页显示视频流延迟明显,实时传输效果差,故在PC机的Windows系统下基于Qt和OpenCV开发了一款可移植性好、可操作性强的客户端,实现实时监控、实时视频录像等功能。在手机移动端基于Android系统开发了一款易安装、易操作的手机APP客户端,实现实时监控、拍照、实时视频录像等功能。
图3 服务器与客户端TCP网络通信流程
4.1PC客户端实现
OpenCV是开源的计算机视觉库[12],包含一系列C函数和少量C++类库,可实现图像处理和计算机视觉方面的很多通用算法。本文主要采用OpenCV中广泛使用的图形交互和媒体接口High-GUI库对图像和视频进行读写处理。
Qt是用C++编写,支持多操作系统平台的应用程序开发框架[13]。Qt与其他GUI开发工具最大的不同在于它自行定义了信号与槽这种通信机制,该通信机制独立于标准的C/C++语言。在传统的GUI工具包中,窗口部件一般通过指向某个函数指针的回调函数来响应它们所触发的每个动作。但是,在Qt中信号与槽取代了这些复杂的函数指针,使得编写的这些通信程序更为明了。信号可以与槽进行单个连接,也可以将多个信号与单个槽进行连接,还可以将单个信号与多个槽进行连接。系统调用connect()函数将信号与槽连接起来。当信号被某一对象发射后,与其相关联的槽将被立刻执行,类似普通的函数调用。当槽函数执行结束后,系统将调用disconnect()函数断开发射者中的信号与接收者中的槽函数之间的关联。
4.1.1PC端客户端界面设计
Qt Creator是用Qt开发的轻量级跨平台集成开发环境。它包含了一套用于创建和测试基于Qt应用程序的高效工具,包括高级的C++编辑器、上下文感知帮助系统、可视化调试器、源代码管理工具、项目和构件管理工具[13]。本文使用Qt Creator设计用于接收视频数据的客户端。
在Windows操作系统下,打开Qt Creator创建一个工程,在Qt Creator的Design模式下编辑客户端界面。在主编辑界面放置2个Line Edit:一个用于输入服务端IP,另一个用于输入服务端Port;5个Push Button分别用于连接、断开服务器,开始、停止录制视频和关闭客户端;2个Label分别用于显示视频数据和当前状态。
4.1.2视频图像显示过程分析
在服务器端使用TCP协议传输视频数据,故在客户端也应使用TCP协议来建立网络连接和实现视频数据传输。Qt中自带的QTcpSocket类提供TCP套接字并实现TCP连接。在QTcpSocket类下创建1个tcpSocket对象,调用tcpSocket->connectToHost()连接至服务器。服务器端接受客户端连接请求后,与客户端建立TCP连接,并调用send()函数将摄像头采集到的视频数据通过无线网络以帧为单位传输给客户端。在客户端用connect()函数将readyRead()信号与read()槽函数进行连接。当缓冲区有数据要读的时候,会触发readyRead()信号,从而自动调用read()槽函数读取视频数据。PC客户端视频图像显示流程如图4所示。
4.2手机APP客户端实现
Android是以Linux为基础的开源的移动设备操作系统,目前广泛应用于智能手机和平板电脑[14]。本研究基于Android[15]开发了一款手机APP客户端,用来实现实时监控、实时录像、拍照、浏览图片等功能。
1个Android应用通常会包含多个Activity,但只有1个Activity会作为程序的入口。在Android中,通常使用Intent作为连接不同组件的通信载体。
图4 PC客户端视频图像显示流程
在本系统中,当打开App客户端时会首先执行FlashActivity作为程序的入口。在FlashActivity的界面布局文件flash.xml中放置2个EditText,一个用于填写服务器的IP,另一个用于填写服务器Port。1个Button按钮用于与服务器建立连接。连接成功后,执行startActivity(new Intent(FlashActivity.this,MainActivity.class)),启动MainActivity进入视频监控主界面。在MainActivity的界面布局文件main.xml中使用相对布局RelativeLayout进行UI布局。在Palette的Custom Views文件夹下创建一个本系统中使用名为MjpegView的View,并将MjpegView放置在main.xml中,同时放置与RadioGroup一起使用的一组RadioButton。RadioGroup有OnCheckedChangeListener事件,而对于该事件的处理则使用onCheckedChanged()方法。在该方法中,根据RadioButton所分配的值来判断是执行拍照、录像还是浏览等操作。手机APP客户端视频监控流程如图5所示。
5 系统测试
测试在整个产品开发过程中占有非常重要的地位,通过测试能检测出系统及其稳定性是否符合要求。本系统的ARM开发板有线网卡IP设置为192.168.2.17,PC机Windows系统有线网卡IP设置为192.168.2.10。因为开发板设置为网络文件系统(NFS)启动,所以VMWare虚拟机中Linux系统的有线网卡IP设置为192.168.2.30,三者在同一网段。
图5 手机APP客户端视频监控流程
5.1启动视频监控系统的服务器端
根据系统需求,对MJPG-streamer软件进行重新编写。将编写后的文件通过CuteFTP软件上传到VMWare虚拟机中Ubuntu系统下的任一文件夹里,然后执行make命令,生成可执行文件mjpg_ streamer。使用命令sudo cp mjpg_streamer/work/ nfs_root/fs_mini_mdev_new/bin/将该可执行文件拷贝到开发板所使用的网络文件系统中。
启动开发板,使用SecureCRT终端仿真软件登陆到开发板,连接USB摄像头和USB无线网卡。经过之前的设置,USB无线网卡已工作在AP模式下。只要连接上USB无线网卡,开发板就会自动发出WiFi无线信号“CQUT_B204”,如图6所示。
在终端使用命令#cd bin进入到bin目录。在bin目录下,使用#ls命令可以查看拷贝过来的可执行文件mjpg_streamer。输入“#./mjpg_streamer”命令并回车,可以看到串口终端显示出的视频设备、视频像素大小、帧格式、端口号等信息,并等待客户端的连接。
5.2启动视频监控系统的客户端
在PC机windows下,通过无线网卡连接“CQUT_B204”。打开Qt Creator软件,点击菜单栏Build下的Run,程序自动编译后开始运行,并弹出连接服务器界面。输入服务器IP和服务器Port,点击“连接”按钮连接到服务器。
图6 AP模式下的WiFi信号
在手机移动端,打开WiFi,连接“CQUT_ B204”。打开预先安装好的APP客户端软件,输入服务器IP和服务器Port,点击“连接”按钮连接到服务器。
成功连接服务器后,服务器与客户端建立TCP连接,并将摄像头采集到的数据通过无线网络传输给客户端。客户端可实时、稳定地显示视频流数据,并根据需要进行视频拍照、视频录像、浏览图片等操作。PC客户端、手机客户端与服务器视频数据的传输效果见图7、8。
图7 PC客户端与服务器的视频数据传输效果
图8 手机客户端与服务器的视频数据传输效果
6 结束语
本系统使用V4L2接口技术完成USB摄像头视频图像的采集,利用MJPEG算法压缩技术实现视频数据的编解码,通过TCP网络实时无线传输视频数据,并设计了分别适用于PC机和手机移动端的客户端。测试结果表明,系统能实时、稳定地传输视频流数据,对现场视频图像具有较好的监控效果。存在的不足之处:系统还不能实现对监控现场音频的支持,也无法远程操控摄像头进行任意角度的视频监控,还需要在本系统的基础上做进一步研究开发。
[1]牛温佳,刘银龙.移动网络视频监控系统[M].北京:电子工业出版社,2013.
[2]陈峰,赵欣.基于QT和嵌入式的视频监控系统[J].通信技术,2011(10):109-111.
[3]唐人财,刘连浩.基于嵌入式Linux远程图像监控系统的设计[J].计算机与现代化,2010(11):31-34.
[4]汪洋,郑连清.基于网络的校区视频监控设计与实现[J].重庆理工大学学报:自然科学版,2011(10):82 -85.
[5]韦东山.嵌入式Linux应用开发完全手册[M].北京:人民邮电出版社,2012.
[6]王溢琴.基于嵌入式的智能家居之视频监控系统设计[J].计算机测量与控制,2014,22(11):3623-3626.
[7]毛剑飞.基于改进的H.264的视频监控系统[J].计算机系统应用,2014,23(4):84-90.
[8]张爱芹.基于ARM的嵌入式视频交通系统平台研究[D].重庆:重庆理工大学,2009.
[9]李军,张华春.U-Boot及Linux2.6在S3C2440A平台上的移植方法[J].电子器件,2008(10):1667-1670.
[10]刘艳娇.基于嵌入式Linux的无线视频监控系统设计与实现[D].黑龙江:哈尔滨工程大学,2012.
[11]赵克佳.UNIX程序设计教程[M].北京:清华大学出版社,2002.
[12]于仕琪,刘瑞帧.学习Open CV[M].北京:清华大学出版社,2012.
[13]陈爽.Linux与Qt程序设计[M].北京:清华大学出版社,2011.
[14]郑海洲.基于Android平台的嵌入式视频监控系统设计[J].自动化仪表,2013,34(9):30-33.
[15]杨飞,黄国宏.基于Android智能终端的移动视频监控系统研究[J].计算机技术与发展,2013,23(2):195-198.
(责任编辑杨黎丽)
Design and Implementation of Embedded Wireless Video Monitoring System
WANG Yuea,PANG Zhen-yinga,WANG Shuaib,FAN Xian-xinga
(a.College of Computer Science and Engineering;b.College of Electronic Engineering and Automation,Chongqing University of Technology,Chongqing 400054,China)
This system was equipped with S3C2440 ARM9 microprocessor development board for the hardware platform and the Linux system was built on the platform.Using the USB camera-free drive as a video capture device,using the Linux kernel to provide a uniform interface for V4L2 video image capture and the algorithm of MJPEG to compress and decode the video data,and transmit these to client through WiFi technology.Server-side MJPG-streamer video data acquisition software was based on Linux open source software and this system needed to be overhauled and used multithreading technology.The client that based on Qt and OpenCV has a friendly graphical user interface and is easily installed and operated APP client based on Android for mobile phone.The experimental results show that the system runs stably and both clients can get a clear and smooth video streaming data.
embedded;Linux;video monitoring;V4L2
TP393
A
1674-8425(2015)04-0067-06
10.3969/j.issn.1674-8425(z).2015.04.013
2015-01-02
重庆市科技攻关计划项目(cstc2009AC2068)
王越(1961—),男,重庆人,博士,教授,主要从事嵌入式技术、数据挖掘、数据库技术研究;庞振营(1987—),男,河南商丘人,硕士研究生,主要从事嵌入式技术研究。
王越,庞振营,王帅,等.嵌入式无线视频监控系统的设计与实现[J].重庆理工大学学报:自然科学版,2015(4):67-72.
format:WANG Yue,PANG Zhen-ying,WANG Shuai,et al.Design and Implementation of Embedded Wireless Video Monitoring System[J].Journal of Chongqing University of Technology:Natural Science,2015(4):67 -72.