任安虎,窦玉春
(西安工业大学电子信息工程学院,西安710021)
·微机应用·
基于塔吊的视频监控系统设计❋
任安虎,窦玉春
(西安工业大学电子信息工程学院,西安710021)
塔吊是现代建筑领域不可替代的重要施工设备,但是因为各种原因,作业往往是在“盲操作”下进行的,针对这个问题,设计了一套对应的视频监控系统。对其关键部分进行研究,首先提出视频监控系统的总体方案设计并进行器件选型;分析视频监控系统的组成部分,介绍了硬件平台以及软件平台的搭建;视频采集程序的设计以及对视频数据用H.264进行优化编码;在网络传输模块中,使用TCP/IP进行网络通信;最后利用MJPG-streamer视频流工具显示在PC上。通过实验调试,本系统可提供稳定的实时视频监控。
塔吊;盲操作;视频监控;实时
塔吊是我国建筑业的重要施工设备之一,主要用于城市高层建筑施工、桥梁建设等,随着我国房地产行业的蓬勃发展,对塔吊的需求量也愈来愈大。由于塔吊的司机驾驶室一般在高处,在高层的现场施工中会不可避免地遇到视觉难题,比如在塔吊吊运、卸载、移动建筑材料时,楼体可能会阻挡操作人员的视线。还有就是操作人员从强光区移动到阴暗区时,在光线的强烈对比下,操作人员并不能看到具体操作过程,这时只能凭借以往经验进行盲操作,这一严峻问题不可避免的存在于大部分高层建筑施工中,如何安全高效的进行施工,成为一项急需解决的问题。
近年来计算机、电子通信等行业步入快速发展的时代,嵌入式系统作为多个行业结合的产物,以其专用性强等特点得到了广泛应用,尤其在视频监控方面,不仅在计算机上实现了这些功能,还能在更小巧的开发板上实现。无线化是其今后发展的重要方向,因此将WIFI无线通信技术、嵌入式技术和监控技术相结合,可使现场监控摆脱线缆的束缚,真正享受在任何时间、任何地点、以多种方式接入现场,得到实时的性能优良的视频监控画面。
为了解决塔吊在施工中的限制及其带来的不利影响,该课题利用嵌入式技术设计了一套视频监控系统,通过安装在塔吊起重臂上的摄像头监视吊运施工现场,视频信号经过处理后,通过WIFI传输到位于操作室的控制终端上,这样便于操作人员监视现场情况,进行合理操作。
确定系统的总体设计方案,基于ARM9处理器和Linux系统平台建构,利用IEEE802.11无线局域网完成视频图像的网络传输,并在塔吊驾驶室对场景视频图像进行显示和控制。采用模块化的结构设计思想,其组成模块包括:前端部分、无线网络传输模块以及视频显示模块。在前端,实现好摄像头驱动后,用VideoForLinux接口从摄像头中读取视频数据,调用H.264编码库对采集到的视频数据进行编码。在无线网络传输部分,通过WIFI发给终端,终端接收数据后,进行解码,最后在界面上显示出来,整个系统的总体设计方案如图1所示。
图1 系统总体设计方案Fig.1 The overall design of the system
系统采用的硬件是ARM9开发板MINI2440,其所用的微处理器是三星公司的S3C2440,S3C2440是基于ARM920T核心的RISC处理器,以ARM9处理器为硬件核心,并扩展了视频图像采集模块、WiFi模块等,系统硬件框图如图2所示。
嵌入式系统中一般有多个应用程序,因此,需要移植操作系统来管理这些应用程序。该开发板可运行多种操作系统,例如嵌入式Linux、uCOS以及WindowsCE等,这里选用开源的嵌入式Linux操作系统,该操作系统可以分为几个模块,系统上电后依次运行的是Bootloader、Linux内核、Linux文件系统以及应用程序。在应用程序开发之前,首先搭建系统操作环境,包括构建交叉编译环境、Bootloader的开发、Linux内核以及根文件系统的开发,然后进行模块化的应用程序设计,方便进行加载、卸载。
3.1 视频数据采集
完整的视频采集解决方案包括硬件设备驱动程序和视频采集应用软件两部分。摄像头属于视频设备,VideoForLinux是关于视频设备的驱动标准,这个标准定义了一套接口,内核、驱动和应用程序都是依靠这个标准来进行交流的。该课题选用的Linux2.6.32内核中,已经包含了UVC驱动,因此只要在编译内核时将相关配置选项选中并编译到内核中,就完成了摄像头的驱动设计了。配置内核,支持摄像头的程序如下:
完成了系统级软件设计后,接下来便可以进行用户级软件的开发。嵌入式图像视频采集是基于V4L函数库设计的,在Linux内核中有关于视频设备的API接口。V4L实际上可以分为两层,下层为视频设备在内核中的底层驱动,而上层则是为系统提供的API函数。在上层进行应用程序开发,完全可以通过API函数,就可以对视频设备进行操作了。V4L接口提供了Linux下标准的操作函数:open,read,ioctl,close,mmap等,通过这些函数就能完成图像视频的采集。
系统的视频采集原理流程图如图3所示。
图3 视频采集原理流程图Fig.3 The principle of video capture processmap
(1)开启视频设备
打开指定的采集设备,插入USB2.0摄像头会自动生成该硬件设备的相应文件。当嵌入式Linux内核检测到新设备时,该设备驱动程序将设备注册到内核中,摄像头对应的设备文件名是/dev/video0,采用open()函数来实现:
cam_fd=open(USB_VIDEO,O_RDWR);/*打开摄像头设备*/
(2)初始化
init_video(intw,int h,int bpp)函数可以获取视频设备信息,并设置图像参数,以及申请内存映射。
(3)获取设备信息和视频信息并进行设置
在程序中首先定义两个数据结构:struct video_capability cam_cap代表亮度、对比度以及分辨率等;struct video_picture cam_pic代表摄像头存储缓冲区的帧信息。cam_cap函数通过调用ioctl()函数来取得设备文件的相关信息,并将取得的信息放到video_capability结构里,相关程序如下:
ret=ioctl(cam_fd,VIDIOCGCAP,&cam_cap);/*读取摄像头的基本信息*/
取得设备信息后,还要再取得图像信息,cam_pic()函数也是通过调用ioctl()函数来取得图像的相关信息,并将其存放到video_picture结构中,相关程序如下:
ret=ioctl(cam_fd,VIDIOCSPICT,&cam_pic);/*设置摄像头缓冲中voideo_picture信息*/
(4)图像获取
V4L提供两种方式访问内核数据,第一种方式是内存拷贝,将视频数据从内核空间中拷贝到指定空间。这种方式容易造成目标板数据大量操作,与嵌入式处理器有限内存资源相抵触;第二种方式是内存映射,即从内核的内存空间映射到相应程序的内存空间,特别适合大量数据访问。通过mmap函数实现,返回程序的地址指针,本系统采用的是内存映射的方法。
ret=ioctl(cam_fd,VIDIOCGMBUF,&cam_mbuf)函数初始video_mbuf,获得摄像头存储缓冲区的帧信息,接着把摄像头对应的设备文件映射到内存区,使用的是函数cam_data=(char*)mmap(0,cam_mbuf.size,PROT_READ|PROT_WRITE,MAP_SHARED,cam_fd,0)。mmap():返回值是系统实际分配的起始地址;
通过调用该函数,可以将设备文件的内容映射到内存区,该映射内存区可读可写,并且不同进程间可共享。
3.2 视频数据编码
采集的视频数据太大,直接传输,会造成时延,由于整个系统是应用在塔吊上,因此对实时性要求很高,需要将这些视频信息进行压缩编码,以保证质量不变的前提下大大降低对带宽的需求,尽可能的减少延时。
该课题使用的是avc-src-0.14版本的H.264编码库,视频编码库在这里主要是将USB摄像头采集的视频信息进行编码压缩。首先利用SSH软件将视频编码库h264-lib.tar传到相应的目录解压,进入avc-src-0.14/avc/build/linux/目录下,修改Makefile,CC=/usr/local/arm/4.3.2/bin/armlinux-gcc,保存Makefile后退出,执行make,成功编译。进入avc-src-0.14/avc/build/objs/下删除T264.o文件,具体的编码过程有:初始化;数据转换;开始编码。H.264编码库的初始化主要是对编码器的初始化,首先打开编码库,接下来分配用于存放一帧数据的内存,之后对视频缓冲区进行读取,USB摄像头采集过来的图像格式是JPEG,若读到数据,先把JPEG转换为YUV格式,再编码,发送。
(1)初始化
初始化:init_encoder()
获取配置文件信息:const char*paramfile="fastspeed.txt"(fastspeed.txt中存放的是一些配置信息)。打开T264编码:m_t264=T264_open(&m_param)分配好编码后存放数据的内存:m_pDst=(uint8_t*)T264_malloc(m_lDstSize,CACHE_SIZE)。由于我们选择的是一帧一帧来处理图像信息,所以先分配好存放一帧数据长度的内存:
m_pPoolData=malloc(m_param.width*m_param.height*3/2);
(2)数据转换
将摄像头采集到的数据转换成亮度、色度差YUV格式的数据;
(3)开始编码
经过上述的初始化过程后,就可以将前端采集到的视频信息进行压缩编码:
iActualLen=T264_encode(m_t264,cam_data,m_pDst,row_stride)。
经过以上三步,原始视频数据就已经被编码压缩成符合传输标准的视频信息并进行传输了。
3.3 视频数据的传输
(1)无线传输工具WIFI的驱动配置
该课题所使用的开发板采用Linux-2.6.32内核,它已经包含了多种型号的USB无线网卡驱动,如TP-Link系列、VIA系列等,本课题选用的是TP-Link系列的WIFI无线传输装置。首先在内核中配置无线网卡驱动协议,其具体配置过程:打开内核源码,输入操作命令makemenuconfig进入图形配置界面,在主菜单上,选择[*]Networking support,回车进入[*]wireless,回车进入[*]Generic IEEE802.11Networking stack(mac80211),选择所用的WIFI无线装置的型号。
退回到内核配置主菜单,选择Device Drivers并进入,开始配置无线网卡驱动。在Device Drivers菜单里面,选择Network device support,回车进入。在Network device support菜单里面,选择Wireless LAN,回车进入。在Wireless LAN菜单里面,选择Wireless LAN(IEEE 802.11),回车进入,即完成了驱动协议的配置。
(2)Linux下的网络通信
TCP(Transmission Control Protocol)是一种传输层的传输控制协议,应用于TCP/IP体系。该协议是面向连接(连接导向)的,可以提供可靠的、顺序传送的数据流,内核中已经配置了该协议的支持,如图4是在该协议下的通信流程图。
进程间的通信是网络通信的本质所在,在网络中,首先要唯一标识一个进程,否则无法通信,TCP/IP协议可以做到,在网络层IP地址可以唯一标识网络中的主机。这样,当两个进程进行通信时,必须要先确定进行通信双方的IP地址。同一台PC机一般具有多个网络进程,因此仅仅通过IP地址是不能对单个进程进行确定的,还需要Socket提供其他的一些相关信息,比如端口号,只有将IP地址和端口号绑定起来,才能够对整个Internet中的网络进程进行确定。在该课题中使用的Socket是流式套接字(Stream Socket),Stream Socket使用的就是TCP协议。
图4 TCP/IP协议下的通信流程图Fig.4 Communication flow chart of the TCP/IP protocol
3.4 视频显示
MJPG-streamer是一款基于IP的开源视频流服务器,它的输入插件从摄像头读取视频数据,这个输入插件产生的视频数据将其复制到内存中,它本身带有多个输出插件,可以将这些视频数据进行处理,其中最重要的输出插件是网站服务器插件,它将视频数据传送到用户浏览器中,通过下载源码、解压、修改源码、编译等之后,将其用Secure CRT等工具把文件下载到开发板上。
将MJPG-streamer视频服务器在开发板上安装好以后,再在客户端下载一个火狐网页浏览器,设置客户端的IP地址:222.25.8.22,子网掩码为:255.255.255.0,默认网关为:222.25.8.124,开发板的IP地址为:222.25.8.168,将开发板与客户端ping通,在Secure CRT设备控制终端上,输入如下命令:
在浏览器中输入:http://222.25.8.168:8080/stream_simple.html即可看到摄像头的动态画面了,如图5所示。
图5 视频监控测试画面Fig.5 Videomonitoring test picture
该课题基于ARM/Linux平台并结合无线局域网技术设计并实现了一套塔吊机载视频监控系统,通过在ARM-Linux操作系统下设计摄像头的驱动及应用程序,无线WIFI的驱动及应用程序,以及移植了MJPG-streamer视频流服务器,利用video4 Linux完成本地视频数据的采集、编码等工作,然后通过WIFI发送数据包,最终在PC机上n进行接收、显示。该系统实时性强,方便移植,且有利于系统的二次开发及升级,应用前景广阔。
[1] 郭寒竹,王明忠.建筑起重机械安全现状与任务[J].市场观察,2009(8):72-75.
[2] 王晨营.基于ARM9的嵌入式远程监测系统的设计与实现[D].北京:北京邮电大学,2009:7-8.
[3] 韦东山.嵌入式Linux应用开发完全手册(第一版)[M].北京:人民邮电出版社,2009:475-493.
[4] 宋宝华.设备驱动开发详解(第一版)[M].北京:人民邮电出版社,2010:356-368.
[5] The Linux UVC Project.Linux UVC driver and Toola[EB/OL].http://www.ideasonboard.org/uvc/#documentation.
[6] W.Richard Stevens.TCP/IP详解(卷1:协议)[M].北京:机械工业出版社,2007:245-267.
[7] Sonenberg Fray Deeny,Mc.F.ROb.Automating cranesforstorageandRetrivalOperation[J].Iron and Steel Engineer.1998,25(11):75-77.
[8] ChristopherHallinan.Embed-dedLinux Primer Second Edition A Practical Real-World Approach[M].Boston:Prentice Hall,2010:5-10.
Design on Video Monitoring System Based on Tower Crane
Ren Anhu,Dou Yuchun
(Electronic Information Engineering Institute,Xi'an Technological University,Xi'an 710021,China)
Tower crane,as an important and irreplaceable equipment in modern building construction,often carries out some blind operations in the construction.A corresponding videomonitoring system is designed and the key part is researched to solve the problem mentioned above.Firstly,the overall project of videomonitoring system is put forward and the device is selected,the hardware platform and software platform of the system are introduced and analyzed,and the video acquisition algorithm is designed and the coding is optimized by H.264 for the video data.In the network transmission module,the TCP/IP network communication protocol is used.Finally,it is displayed in PC bymeans of MJPG-streamer video.After the experimental debugging,the system can provide real-time videomonitoring.
Tower crane;Blind operation;Video surveillance;Real time
10.3969/j.issn.1002-2279.2015.03.018
TN919.8
A
1002-2279(2015)03-0064-05
西发工业大学校长基金(XAGDXJ1214)
任安虎(1974-),男,西安宝鸡人,硕士生导师,主研方向:信号及信息处理。
2014-07-17