张 洪,赵 平,伍 玲,牛新征
(1.电子科技大学 信息与软件工程学院,成都 610054;2.自贡市公安局交通警察支队,四川 自贡 643000;3.电子科技大学 计算机科学与工程学院,成都 611731)
近年来,社会经济发展的同时,推动了城市化道路的发展进程。城市道路中的车流量快速增长,促使智能交通系统(ITS,Intelligent Transport System)备受重视,基于视频的车流量检测[1-2]作为ITS的重要组成部分,它可以为城市道路的智能化调控(道路建设、红绿灯智能控制等)提供基础数据依据。将视频处理技术应用到车流量检测的方法主要有:帧差法[3]、背景差法[4]、光流法[5-6]等。
文献[5]检测精度高,但算法存在复杂度高以及计算量大等缺点。文献[3]改进传统帧差法实现检测车流量,在预设的检测带内检测出运动目标,并将运动目标转换成数据对象,根据数据对象的变化进行车辆检测。文献[6]采用改进的三帧差法与光流法结合实现检测运动对象的目的,从而减小处理的计算复杂度。文献[4]采用改进的背景差法实现运动目标检测,该算法对背景建模和阈值选取提出优化与改进,提升了检测准确率和应对复杂场景的能力。
交通视频数量的不断增加,无疑为车流量检测提出了更大的挑战。处理批量大视频数据的关键问题在于加快检测速度,随着云计算技术的不断发展,解决处理大视频数据的速度问题成为了可能,文献[7-8]将基于云的视频分析与GPU结合运用到交通监控系统中,成功的改善了视频监控的处理速度问题。同时,MPI、MapReduce[9]等并行计算模型以及Hadoop、Spark[10]等大数据分布式计算框架的出现,为庞大且复杂的视频数据在普通PC机上完成计算提供了较好的支持,也为视频大数据提供良好的解决方案。文献[11]将Spark运用到大规模视频处理中,能较好的解决视频处理速度问题。
本文创新性的将Spark分布式计算框架与传统运动目标检测算法(帧差法)结合,设计并实现一种准确率达90.5%,速度比传统帧差法快528%的检测方法。在保证准确率的同时,改善传统帧差法在检测批量交通视频出现的处理速率慢的问题。
分布式车流量检测系统分为数据存储层,数据计算层和系统应用层。数据存储层为数据计算层提供数据支持,数据计算层为系统应用层提供核心算法支持,系统应用层为系统提供应用服务支持。具体来说,数据存储作为数据输入层,提供车流量检测的数据输入。系统数据使用HDFS实现数据的分布式存储,以达到数据高可利用率和高容错性目的;数据计算作为数据逻辑处理层,提供车流量检测的核心算法实现。数据计算层使用帧差法完成车流量检测、目标跟踪与车辆统计功能,整个计算过程基于Spark分布式计算框架,将分布式车流量检测任务分配与计算节点选择都交给Spark,以达到简化系统编程实现,以及从系统结构层面提升车流量检测速度的目的;系统应用作为视频处理结果的基本运用,提供车流量检测的核心应用,包括车流量检测和车辆信息持久化。车辆信息持久化基于HBase数据库,以达到提升数据的高可用性与高可靠性的目的。系统结构如图1所示。
视频目标检测与跟踪通常包括:视频图像采集、图像预处理、运动目标检测、运动目标跟踪、运动目标提取等主要部分,如图2所示。
本文设计的分布式车流量检测方法将Hadoop生态系统中的HDFS和HBase分别作为视频文件和处理结果的存储平台。考虑到传统视频目标检测算法的复杂度,本文选择帧差法用于运动目标检测,并采用运动目标位移量作为车辆跟踪的依据。按照算法的处理流程,方法主要分为4个模块:分布式视频获取模块,视频预处理与车辆检测模块,车辆跟踪模块,车流量统计入库模块。
本文提出的方法可分为4个部分:视频获取、图像预处理与车辆检测、车辆跟踪与统计、车辆信息持久化。车流量检测算法流程如图3 所示,分布式任务执行流程如图4所示。具体实现步骤如下:
1)任务初始化:主控节点初始化车流量检测任务,并序列化任务发送给可用的计算节点;
2)视频获取:计算节点反序列化任务,获取待检测交通视频存储位置,并读取视频;
3)设置虚拟检测线:计算节点根据待处理视频大小设置虚拟检测线位置;
4)图像预处理与车辆检测:计算节点对待处理的两帧图像进行预处理,并完成车辆检测;
5)车辆跟踪与统计:计算节点根据当前帧的车辆位移实现车辆跟踪,并判断车辆是否经过虚拟检测线;
6)车辆信息持久化:计算节点将视频的检测结果返回主控节点,主控节点接收结果并持久化到HBase。
图3 车流量检测算法流程图
分布式车流量检测方法软件编程主要基于Java语言,并配合开源分布式计算框架Spark和开源视频图像库Java CV、FFmpeg。其中,视频文件编解码使用FFmpeg开源库实现;帧差法的车辆检测、跟踪与统计使用Java CV开源视频图像处理库实现;分布式数据获取、任务分配、车流量检测与检测结果汇总使用Spark框架实现;车辆信息持久化存储与获取使用HBase API实现。
图4 分布式车流量检测任务执行流程图
待处理的视频文件存储在HDFS中,Spark不能对视频实现简单的分割处理。因此,本文采用两种方案完成视频文件的获取,第一种为读取批量视频文件,每个计算任务处理一个完整的视频文件;另一种为读取批量视频,并采用视频帧分割方法完成视频读取,每个计算任务处理一定量的视频帧图像数据集合。
根据两种视频读取方案设计出两种分布式检测算法:基于视频帧分割的Spark分布式车流量检测算法(FBSVD,Frame-Based Spark Vehicle Detector)和基于完整视频处理的Spark分布式车流量检测算法(VBSVD,Video-Based Spark Vehicle Detector)。
第一种视频读取方案,只需获取HDFS中视频文件映射到本地的绝对路径集合,并将视频路径信息发送给计算节点。
第二种视频读取方案,必须切割视频帧图像数据。首先,传入任务总数,其中任务总数根据分布式集群中计算节点的CPU总核数进行设定,经验表明任务总数适宜为集群中CPU总核数的2-3倍;然后,根据任务总数计算出各节点需要获取到的视频帧区间;最后,计算节点在执行任务时解码视频获得需要处理的视频帧图像区间集合。具体操作伪代码如下:
BeginInput任务数量N获取待处理视频总帧数n;根据N计算每个任务需处理的视频帧数g;根据任务id获取本任务需要读取的视频开始帧s;ifs+g>nthen本任务需要读取的结束帧g=s+g;else本任务需要读取的结束帧g=n;Output处理帧图像集合End
本文通过使用图像预处理技术做基础操作,并使用帧差法检测运动目标。具体实现步骤如下:
1)预处理:使用图像二值化、高斯滤波、膨胀和腐蚀等方式完成待处理的两帧图像的预处理操作;
2)车辆检测:使用第a帧和第a-1灰度图像作差,根据差图像判断车辆目标的存在。
两帧差分法检测运动目标公式如下:
D=|I(x,y,a)-I(x,y,a-1)|
(1)
式中,I(x,y,a),I(x,y,a-1)分别表示第a帧和第a-1帧的灰度图像,D为差分结果图像。
检测出运动目标之后,对检测出的所有运动目标区域的面积记为Si,目标区域的宽高比记为a,然后使用阈值检测的方式,判断运动目标区域是否为车辆记为h,判断公式如下:
(2)
式中,T1,T2和T3为经验值,本文分别取为5000,2和0.5。
车流量跟踪与统计实现步骤如下:
1)虚拟检测线设置:实验设定为检测单向车道车流量,经过多次测试总结,检测线设置为视频高度的0.54倍,宽度的0.5倍;
2)车辆跟踪:将检测到的车辆加入待定车辆集合,并预计每个车辆在下一帧出现的可能方位。在检测到当前帧出现的车辆目标时,判断当前车辆的位移是否在待定车辆集合中某一车辆目标的合理位移范围内,从而实现目标跟踪;
3)车辆统计:当跟踪的目标经过了预设的检测线时,取消目标跟踪,并将车辆数加1。
通过车流量统计检测到的车辆信息,汇总检测视频中的车流量数量,以及检测的各车量信息,包括:车辆出现在视频中的哪一帧,以及在二维图像中的x,y坐标等,写入HBase分布式数据库。
算法实现按照分布式集群节点类型,分为Master节点主控功能和Worker节点任务计算功能。其中,Master节点作用为任务初始化、任务发起和任务结果回收入库的功能,Worker节点作用为任务接收、任务执行和任务结果回送的功能。具体实现的核心伪代码描述如下:
BeginInputV1,V2,…,VkMaster节点:初始化应用。序列化待处理视频存储位置,并将其发送给计算节点;Worker节点:反序列化任务处理视频Vi位置;获取视频Vi的帧数n;for1ton预处理相邻两帧图像;相邻两帧的差帧dFrame:dFrame=Is-In-1;获取差帧中的运动区域集合M;whileM≠φdo ifSmi≥T1&&α>T2then if检测该区域为已跟踪的车辆then if车辆经过了检测线then c=c+1;记录该车辆信息到车辆集合N;Output所有视频的车流量统计结果N’End
为了检验本文提出的VBSVD算法的性能和有效性,实验对两个交通路段的批量5 min交通视频进行测试,数据集名称和包含真实车数如表1所示(路段A的测试集记为A-x,路段B的测试集记为B-x)。设计了三组实验评价VBSVD:1)与本文提出的FBSVD算法和帧差法之间在测试集A-4和B-4的比较;2)VBSVD在不同测试集的比较;3)VBSVD算
表1 测试集信息表
法使用不同CPU核数测试B-4,相对于传统帧差法测试B-4的比较。
实验采用普通四台PC机作为实验测试的分布式集群平台,其中三台计算节点(Inter 4核,8 GB内存,CentOS 7操作系统),一台主控节点(Inter 2核,2 GB内存,CentOS 7操作系统)。
表2展示了本文提出的FBSVD、VBSVD以及传统帧差法针对A-4的准确率和检测时间结果,图5展示了3种检测算法在路段A的不同数据集的处理时间对比。结果表明,VBSVD算法与传统帧差法具有相同的检测准确率,VBSVD算法比FBSVD算法准确率高3.3%;VBSVD算法比传统帧差法检测速度快510%,传统帧差法比FBSVD快252%。
表2 传统帧差法、FBSVD、VBCVD测试A-4的结果表
图5 传统帧差法、FBSVD、VBCVD测试路段A的不同数据集的时间对比
算法检测车辆/辆准确率/%时间/s帧差法68794.62528.9FBSVD67292.56329.3VBSVD68794.6462.3
图6 传统帧差法、FBSVD、VBCVD测试路段B的不同数据集的时间对比
表3展示了本文提出的FBSVD、VBSVD以及传统帧差法针对B-4的准确率和检测时间结果。对于路段B的不同数据集,3种检测算法的处理时间对比如图6所示。结果表明,传统帧差法与VBSVD算法具有相同的检测准确率,传统帧差法比FBSVD准确率高0.9%;VBSVD算法比传统帧差法检测速度快547%,传统帧差法比FBSVD快251%。
表4 VBSVD算法测试路段A的不同测试集的结果表
表5 VBSVD算法测试路段B的不同测试机的结果表
表5展示了VBSVD算法针对路段A的不同测试数据集的检测时间和检测准确率结果。表6展示了本文提出的VBSVD针对路段B的不同测试数据集的检测时间和检测准确率结果。
图7展示了对于数据集B-4,在不同CPU使用数量的情况下,VBSVD算法相对于传统帧差法的处理加速比。
图7 VBSVD针对不同数据集B-4使用在不同CPU核数情况下的加速比
实验结果表明,本文提出的VBSVD算法比传统帧差法检测速度平均快528%,主要原因是:VBSVD算法充分利用集群中的计算节点的CPU和内存资源,采用分布式多路检测的方式提升检测速度。传统帧差法比FBSVD算法比快251%,主要原因是:FBSVD算法对视频帧进行切割,导致了时间消耗。
实验结果分析证明:视频文件具有不易切分的特点,宜将视频整体处理;VBSVD算法使用的分布式集群中CPU数量越多提升的检测速度越明显,当CPU核的数量为待处理数据集的1/3或1/2时,效果最好。
针对大规模交通视频下的批处理车流量检测存在计算开销大以及检测时间过长的问题,本文通过对Apache Spark的研究,并将Spark应用到车流量检测当中,实现了批量交通视频的车流量检测并行化。相对于传统检测方法,本文提出的VBSVD算法能依靠分布式集群的计算节点同时处理批量交通视频,完成检测任务。经实验表明,VBSVD算法简单可行,准确率高,检测速度快,为检测批量交通视频提供了较好的解决方案。
[1]TianB,YaoQ,GuY,etal.Videoprocessingtechniquesfortrafficflowmonitoring:Asurvey[A].IEEEInternationalConferenceonIntelligentTransportationSystems[C]. 2011, 1103-1108.
[2]PerkasaO,WidyantoroDH.Video-basedsystemdevelopmentforautomatictrafficmonitoring[A].IEEEInternationalConferenceonElectricalEngineering&ComputerScience[C]. 2014,240-244.
[3] 张 玲, 陈丽敏, 何 伟,等. 基于视频的改进帧差法在车流量检测中的应用[J]. 重庆大学学报:自然科学版, 2004, 27(5):31-33.
[4] 张 咏, 李太君, 李枚芳. 利用改进的背景差法进行运动目标检测[J]. 现代电子技术, 2012, 35(8):74-77.
[5] 杨国亮, 王志良, 牟世堂,等. 一种改进的光流算法[J]. 计算机工程, 2006, 32(15):187-188.
[6]HanX,GaoY,LuZ,etal.Researchonmovingobjectdetectionalgorithmbasedonimprovedthreeframedifferencemethodandopticalflow[A].IEEEInternationalConferenceonInstrumentationandMeasurement,Computer,Communication,andControl[C]. 2016: 580-584.
[7]AbdullahT,AnjumA,TariqMF,etal.Trafficmonitoringusingvideoanalyticsinclouds[A].IEEE/ACM7thInternationalConferenceonUtilityandCloudComputing[C]. 2014: 39-48.
[8]AnjumA,AbdullahT,TariqM,etal.Videostreamanalysisinclouds:anobjectdetectionandclassificationframeworkforhighperformancevideoAnalytics[J].IEEETransactionsonCloudComputing, 2016 (99):1-14.
[9]DeanJ,GhemawatS.Simplifieddataprocessingonlargeclusters[J].ProceedingsofOperatingSystemsDesignandImplementation(OSDI), 2004, 51(1):107-113.
[10]ZahariaM,ChowdhuryM,DasT,etal.Resilientdistributeddatasets:afault-tolerantabstractionforin-memoryclustercomputing[A].UsenixConferenceonNetworkedSystemsDesignandImplementation[C].USENIXAssociation, 2012.
[11]YangS,WuB.Largescalevideodataanalysisbasedonspark[A].IEEEInternationalConferenceonCloudComputingandBigData[C]. 2015:209-212.