APP下载

基于CamShift跟踪算法的塔吊监控系统设计*

2013-12-29张自嘉王慧敏

电子器件 2013年6期
关键词:吊钩塔吊终端

王 旭,张自嘉,王慧敏

(南京信息工程大学信息与控制学院,南京210044)

塔吊是现代建筑必不可少的吊运工具,但是由于塔吊吊臂较长,作业距离远,工地情况复杂,驾驶员作业过程中会出现不少视觉盲区,导致运行效率不高,而且安全事故频发。目前工地上主要通过地面指挥人员使用对讲机和信号旗手进行指挥,这种单一的人工模式并没有很好地解决塔吊作业中视觉盲区问题,有时甚至因为指挥人员表达不准确而导致操作失误,造成严重的后果。相关文献介绍了当前工地上使用的一些视频监控设备,它们主要是基于PC机平台,而且是供远程安监人员对工地实时监测,相对于本来就很狭小的驾驶室来说,PC机体积较大,安装使用起来很不方便。因此,设计了针对驾驶员使用的便携式监控设备,相比现有的视频监控系统,该系统还加入了CamShift跟踪算法,实现了对吊钩的实时跟踪,很大程度上减轻了驾驶员的视觉疲劳,对驾驶员的操作有一定的辅助作用。

1 系统总体设计

本论文要设计的是一个具有实时跟踪功能的无线视频传输系统。系统的整体结构框图如图1所示[1],该系统由视频采集终端、无线网络设备、以及视频接收终端组成。视频采集终端将USB摄像头采集到的实时视频数据传输到主控设备的视频管理模块中,对获取的视频数据使用CamShift跟踪算法并调用OpenCV库函数实现对吊钩的实时动态跟踪,然后对大量的视频数据采用H.264编码方式进行压缩编码处理,最后通过WIFI无线模块把数据信息和控制信号发送到无线网络设备。视频接收终端通过WIFI无线模块访问网络设备,将获取的视频数据信息进行解压缩处理,恢复出原始的视频数据信息,最终将视频图像显示在LCD上,实现驾驶员对塔吊的实时监控[2]。

图1 系统结构框图

2 系统硬件设计

该系统硬件主要由两部分组成,视频采集终端和视频接收终端。采集终端负责视频数据的实时采集、跟踪算法处理、压缩编码以及无线传输功能。接收终端负责视频数据的无线接收、解压缩以及实时显示的功能。下面分别介绍这两部分的硬件。

采集终端的硬件结构框图如图2所示,其核心部分由S3C6410微处理器和256M的DRAM、1GB的NAND Flash以及多种外设接口(如USB接口、SDIO接口、以太网接口等)组成的最小系统。USB摄像头与主控设备的USB HOST接口相连接,摄像头采用OmniVision公司的OV9650芯片,它支持的最大分辨率为1 300×1 028,可以输出 GRB(4 ∶2 ∶2)、YUV(4 ∶2 ∶2)和YCbCr(4∶2∶2)3种视频格式,这3种格式均符合CCIR601和CCIR656标准。WIFI无线模块采用Marvell公司低成本、低功耗的88W8686芯片[3],它通过SDIO接口与主控设备相连,遵循IEEE 802.11g标准,而且兼容802.11b协议标准,工作在2.4GHz频段,最高传输速率可达54 Mbit/s。

图2 采集终端结构框图

上述所说的采集终端安装在塔吊驾驶室前方的吊臂上,整个设备采用防护罩遮挡,避免恶劣天气影响,摄像头向下安装,对准吊钩,实时采集吊臂下方工地的视频数据。

接收终端的硬件结构图框图如图3所示,它与视频采集终端相比,减少了USB摄像头模块,添加了LCD液晶显示模块以及SD存储模块。LCD液晶显示模块用来显示无线网络传输过来的实时视频图像,而SD存储卡用于视频数据信息的存储,便于以后对视频的回显需求。该接收终端体积小巧而且操作简单,便于驾驶员在驾驶室中进行实时监控。

图3 接收终端结构框图

3 系统软件设计

3.1 软件环境介绍

Linux操作系统以其灵活性和高效性著称。它具有开放的源代码,用户可以根据自己的需求进行修改重新编译,同时支持多任务、多用户的功能,而且具有众多的硬件支持特性,是一个跨平台的系统。该监控系统的软件设计采用目标机和PC机相互结合的方式,挂载根文件系统,使得在PC机平台上可以直接操作目标机。

PC 机选择在 ubuntu9.10 环境下运行[4],armlinux-gcc交叉编译工具链选用4.5.1版本,开发板使用linux2.6.38内核,同时本系统选择移植的计算机视觉库为OpenCV2.2.0版本,对于OpenCV2.0之后的版本,必须使用CMake创建Makefile文件,所以选用CMake 2.8.9的版本。完成上述几个平台环境的搭建之后就可以进行OpenCV2.2.0库的移植了。

3.2 移植OpenCV2.2.0到Tiny6410开发板

OpenCV计算机视觉库的移植对实现实时跟踪功能起到至关重要的作用。但是OpenCV在移植到开发板的过程中会碰到编译出错,下面就介绍下OpenCV的移植过程以及如何解决这些编译错误:

首先将opencv2.2.0源码解压到/work/tools目录下,并在该目录下建立opencv-source文件夹,在该文件夹下建一个list目录用来存放编译生成的文件,在/work/tools/opencv2.2.0目录下运行cmakegui,然后进行下面的环境配置:

然后进入下一页配置:

再进入下一页配置:

然后Finish完成基本配置。

接着修改默认配置选项,默认安装目录为/usr/local,但是对于交叉编译的库来说此路径并不合适,所以要把CMAKE_INSTALL_PREFIX变量改为/work/tools/install/,另外去掉WITH_TIFF选项,因为没有安装支持TIFF的图像。点击Generate就生成了Makefile文件。最后进入到/work/tools/opencvarm目录下运行make编译命令,在opencv编译时发现如下几个错误:

(1)编译错误1:

OpenCV-2.2.0/modules/ml/src/gbt.cpp:474:error:'expl'was not declared in this scope;因为代码中并没有声明“expl”,所以修改 gbt.cpp,注释掉//#if ANDROID和//#endlf,然后重新编译。

(2)编译错误2:

Linking CXX executable../../bin/opencv_createsamples;修改/work/tools/opencv-arm/目录下 CMake-Cache.txt文件,XE_LINKER_FLAGS选项为空,现在加上-lpthread-lrt,因为cmake不认识所定义的arm-linux系统标记,所以要加上库pthread和rt的链接选项,然后重新编译。

(3)编译错误3:

注释掉//#define ARM_NO_SIFT,然后重新编译成功。

运行make install,把opencv生成的头文件和库文件复制到交叉编译器中,测试下arm-linux-g++-lcv-lcxcore-lhighgui-lpthread-lrt-o CamShift CamShift.c,生成二进制文件。然后复制/opt/arm/lib下的库文件到S3C6410开发板的/lib/目录下。由于S3C6410开发板的linux不支持OpenCV自己的Highgui文件,所以不能在目标板上使用cvName-Widow(),cvWaitKey(),cvShowImage()等显示函数,但是可以利用OpenCV里面的cvLoad()等函数。正因为如此,选择安装支持OpenCV的GTK就会很复杂,所以我们选择用Qt界面来显示。最后复制CamShift执行文件到开发板中,结果执行正常,可以在开发板实现实时跟踪,说明OpenCV2.2.0移植成功了。

3.3 CamShift跟踪算法实现

驾驶员长时间在监控视频中寻找吊钩的位置,判断吊钩距离作业面高度,难免会产生视觉疲劳,造成判断失误,所以系统引入了CamShift跟踪算法,实时跟踪吊钩位置。CamShift是OpenCV中运动物体的动态跟踪算法[5],它将Mean-Shift算法扩展到连续的图像序列,利用吊钩鲜明的黄颜色特征信息进行追踪,并对视频所有的图像帧做Mean-Shift运算,把上一帧的搜索窗口作为下一次计算的初始值,如此迭代下去,即可实现对目标的跟踪。该算法的流程图如图4所示,它的实现主要有如下3个部分:

第1步为Back Projection计算,因为RGB颜色空间对光照变化较为敏感,为了减少这种影响,调用cvCvtColor()函数将获得的图像从RGB空间转换到HSV空间,然后调用cvCreateHist()函数计算其中的H分量的直方图,即可得到颜色概率查找表,最后通过调用cvCalcBackProject()函数将图像中每个像素的值用其颜色出现的概率对替换,得到颜色概率分布图。为后面的匹配跟踪提供了线索。

第2步为Mean Shift算法,它是利用概率密度的梯度爬升来寻找局部最优,通过1阶矩除以0阶矩来计算质心,用计算出的质心作为下一步的中心,然后向中心一直迭代,直到窗口的位置不再变化。通过调用OpenCV中cvMeanShift()函数实现上述过程的迭代。

第3步为CamShift算法[6],它的算法思想主要由如下5个步骤完成:①确定初始化目标大小和位置以及搜索区域;②计算出目标的H分量直方图;③通过直方图计算出图像的反向投影图;④运行Mean Shift;⑤以上一步搜索窗口的中心位置以及计算出新的窗口大小为参数,进入到下一帧的目标跟踪。以上算法的实现通过调用cvCamShift()函数完成。

图4 CamShift算法流程图

3.4 基于TCP/IP协议的视频传输

该USB摄像头采用 V4L2的框架[7],V4L2的Video设备在用户空间通过调用各种ioctl()函数来实现对摄像头的设置,然后将采集的视频数据进行H.264压缩编码,将压缩后的视频数据经过WIFI模块发送到无线网络设备,然后采集终端的WIFI模块通过访问该无线网络设备来获得视频数据,再经过H.264解压缩之后就可以恢复出原始视频数据。

该无线模块的实时视频传输是基于TCP/IP协议[8],协议采用了层级结构,分别是网络接口层、网络层、传输层、应用层,每一层都呼叫它的下一层所提供的网络来完成自己的需求。它主要是完成对远程客户端的连接以及取消连接的功能,并根据远程客户端的请求,将所需数据信息传输到远程客户端。在Linux下基于TCP的HTTP协议的数据传输流程如图5所示。该数据传输的具体步骤如下:首先要服务器创建socket()套接字函数,调用bind()函数指定本地地址后监听并等待浏览器的请求,然后浏览器向服务器发送连接请求,这时候建立套接字的连接函数Accept()和Connet(),接着通过write()和read()函数实现数据的写入和读出功能,最后关闭套接字函数close()。

图5 TCP协议的流程图

4 上位机测试

Qt是一个跨平台的C++图形用户界面应用程序框架。它主要应用于嵌入式Linux系统的PAD或者智能手机平台。本系统接收终端的上位机软件就采用Qt开发,选择的开发环境是QtE-4.7.0版本。为了能够让视频窗口和按键窗口在程序上显示,编写应用框架类QWidget,接着通过QPainter类将接收过来的视频数据不断写入,让视频实时显示。最后按照信号与槽的机制编写控制按键,控制视频的打开、CamShift跟踪、保存、停止、退出等按键功能,驾驶员通过选择上位机界面上的按钮来查看工地实时场景。实验模拟测试跟踪吊钩如图6所示。

图6 吊钩跟踪视频截图

5 结束语

本文提出了基于CamShift跟踪算法的塔吊无线视频监控系统。主要从视频采集、CamShift跟踪算法以及视频无线传输等方面阐述了系统设计思路。该系统的优点在于接收终端的便携式设计相对于体积庞大的PC机来说使用起来十分方便,同时价格优势也相当明显,为整个系统的设计节省了很大成本。在显示效果方面,视频传输稳定可靠,实时跟踪准确,有效地解决了驾驶员的视觉盲区以及视觉疲劳问题,对操控塔吊起了很大的辅助作用,不但提高了作业的安全性,同时也提高了作业效率。

[1]曹理发,尹勇,刘恒辉.基于ARM和DSP的视频监控系统设计与实现[J].电子器件,2009,32(1):213-217

[2]李文江,王红飞,侯玉峰.基于S3C6410的嵌入式胶带运输机监控系统[J].仪表技术与传感器,2010(12):74-79

[3]蒋昌茂,刘洪林.基于WIFI的无线IP摄像头的设计与实现[J].微型机与应用,2010,21:55-57

[4]郭巧云,许雪梅,李岸.基于ARMll的无线视频监控系统的设计[J].计算机测量与控制,2010,18(8):1786-1791

[5]伍友龙,朱志勇.基于CamShift与Kalman的目标跟踪算法.[J]微计算机信息,2010,26(3):23-25

[6]冀治航,陈家新,黎蔚.基于空间直方图的CamShift目标跟踪算法.[J]微电子学与计算机,2009,7(26):194-197

[7]王刚,毛剑飞,田青.基于ARMll的无线视频监控系统[J].计算机系统应用,2011,20:18-22

[8]何鹏举.基于Web服务的无线网络节点传感器研究[J].传感技术学报,2009,22(11):1634-1638

猜你喜欢

吊钩塔吊终端
儿童主动学习行为的分析及支持策略——以扭扭积木《塔吊》为例
X美术馆首届三年展:“终端〉_How Do We Begin?”
多标段工程群塔布置与安装
起重机吊钩定位装置
通信控制服务器(CCS)维护终端的设计与实现
塔吊检查
超高层建筑塔吊选型和布置分析
GSM-R手持终端呼叫FAS失败案例分析
Q48 悬链式抛丸清理机爬坡吊钩的结构设计
起重吊钩防脱装置的原理及应用