李 颜,仇洪冰,李燕龙
(桂林电子科技大学 信息与通信学院,广西 桂林541004)
近年来,随着我国公路交通事业的迅猛发展,机动车辆的规模和流量不断增大,由此引发的车辆违章和肇事现象给交通监管部门的工作带来了巨大挑战。传统的车辆检索[1]方法一般有两种:一种是通过人工观看交通监控视频来搜索和追踪违章肇事车辆,该方法不仅效率低下,而且长期观看监控视频会引起工作人员的视觉疲劳,造成误判或遗漏重要信息等问题;另一种是利用车牌识别系统来搜索监控视频中出现的违章肇事车辆以获取车牌号码,受到单机硬件条件的限制,传统的车牌识别系统无法高效、快速地处理大型监控视频数据。随着监控视频数据量的不断增长,如何高效、快速地分析和处理交通监控数据成为一个亟需解决的问题[2]。
云计算是一种新兴的高效分布式计算模型,能有效解决大型数据的存储和处理问题[3]。Hadoop 作为开源的云计算平台,凭借其强大的系统伸缩性、廉价性以及在大型数据处理与分析能力上的显著优势被广泛应用于各个领域。例如,文献[4]提出了一种基于Hadoop 的快速视频处理方法,其在集群下执行运动检测比单机节省25%的时间;文献[5]提出一种基于Hadoop 架构的视频监控系统,解决了大型监控数据的存储问题;文献[6]利用MapReduce 实现了分布式视频转码,大大提高了视频的转码效率;文献[7]提出了一种基于MapReduce 的分布式图像检索方法,用实验证明了分布式检索的效率远高于集中式检索。
以上研究工作均表明基于Hadoop 的分布式处理技术能有效提高系统的处理效率。鉴于该技术在视频检索领域尚未得到广泛应用,本文提出一种结合Hadoop 平台、车牌识别技术和FFMPEG 的分布式视频车辆检索方法,用于解决大型交通监控视频[5]的高效处理与检索问题。
Apache Hadoop[8]是一个开源的分布式计算框架,它提供了一个简单的编程模型,让用户能通过跨集群的计算机完成大型数据集的分布式处理任务。用户可利用该框架在大量廉价计算机上构建一个具有高可靠性和良好扩展性的分布式处理系统。HDFS 存储系统和MapReduce 计算模型是Hadoop平台的两大核心技术,用于完成大规模数据集的分布式存储和并行计算。
HDFS[9]作为Hadoop 平台的分布式文件系统,具有高吞吐量数据访问能力、高容错性、高可靠性和高扩展性等特点,可用于存储海量级别的数据(Tbyte 甚至Pbyte 级)。
MapReduce[10]是一种用于处理大规模数据集的计算模型,它可以将一个应用程序分解为多个并行计算指令,跨大量的计算节完成数据集的分布式计算。用户通过编写Map 和Reduce 两个函数来完成对应的逻辑功能,用以实现数据的分布式处理,其编程模型如图1 所示。
图1 MapReduce 编程模型
车牌识别技术结合了数字图像处理、模式识别、计算机视觉等高科技技术,主要通过车牌定位、字符分割、字符识别3个阶段来完成车辆牌照的提取和识别。本文设计的车牌识别方法为:首先采用Sobel 边缘检测[11]与水平/垂直投影分析相结合的方法将车牌从原始图像中定位出来,然后利用Radon变换对车牌进行倾斜校正[12],再通过垂直投影法完成车牌字符的分割,最后使用模板匹配法[13]将车牌字符一一识别出来,具体识别流程如图2 所示。
图2 车牌识别流程图
FFMPEG[14]是一个集音频/视频采集、编解码、格式转换等功能于一体的开源多媒体框架,它支持多种传输协议、媒体格式和各种音/视频编解码标准,并提供一个统一的数据结构用于存储从多媒体中提取出的信息[15]。FFMPEG 可在Linux和Window 系统下运行,支持MPEG、AVI、FLV 等40 多种编码标准,以及Matroska、GXF、MOV 等90 多种解码标准,能够对音频或视频进行快速的格式转换、无损切割、合并以及抓图等操作,其基本使用语法如下:
ffmpeg[options]{[input_options]-i input_file}…{[output_options]output_file}
此外,FFMPEG 还提供了大量命令参数,能够满足用户对视频的各种处理需求,用户可根据需要设置不同参数以获得相应的处理结果。本文中采用FFMPEG 对监控视频进行自动分割[16]和视频帧提取[17]。
视频在HDFS 上是以Block(块)为单位进行存储的,Block 的大小可根据需求灵活配置,默认为64 Mbyte。当视频超出 Block 的大小(如64 Mbyte)时,Hadoop 将会以字节(byte)为单位将视频切分成多个小于64 Mbyte 的Block 存储于各节点中,由此会出现如图3 所示的情况。
图3 视频数据切分问题
当出现如上情况时,对视频分块进行帧提取会引发如下问题:1)缺少视频头数据,FFMPEG 解码器无法初始化;2)缺少关键帧I 帧,导致相邻的P 帧和B 帧无法提取;3)帧数据不完整或已损坏,导致提取失败。
为解决该问题,本文在帧提取之前先用FFMPEG 将监控视频自动分割成多个小于Block 的视频分块,再对视频分块进行帧提取。采用此方法的好处在于,既能保证每一个视频分块都包含完整的头数据,又能避免GOP 或帧数据被切断的问题,并且视频被切分成多个分块后,能更充分地利用MapReduce 的分布式处理优势,大大提高了视频帧提取的效率。此外,FFMPEG 带有按时间切分和自动编号功能,可为后续实现视频时间定位提供便利。
在此通过JAVA 提供的Runtime 类来调用本地FFMPEG 命令实现视频的自动分割。调用的视频分割命令格式如下:
ffmpeg-ss StartTime-i VideoPath-vcodec copy-acodec copy-t DurTime OutputPath_Num
其中,StartTime 为视频分割的起始时间,VideoPath 为目标视频,DurTime 为分割间隔,OutputPath_Num 为视频分段编号。
监控视频根据时长间隔DurTime 进行连续分割,并按顺序编号,DurTime 与视频编号OutputPath_Num 将作为后续时间定位的输入参数。视频分割完成后,程序自动调用Hadoop shell 将其上传至HDFS。
监控视频经过分割处理后,由一段长视频变成若干个时长相等的短视频块存储于HDFS。在此采用MapReduce 框架对视频块进行分布式帧提取[6],即将多个视频块分散到不同节点上进行处理后再将结果汇总到HDFS。
在整个处理过程中,MapReduce 框架负责将视频块缓存到本地,然后通过JAVA Runtime 类中的exec(String cmd[])方法调用本地FFMPEG 命令对缓存视频进行帧提取,最后将提取出的图像帧上传至HDFS。执行过程如图4 所示。
图4 视频帧提取过程
其中,Map 的输入Key_in 和Value_in 分别对应于视频分块的文件名和视频数据本身。当Map 接收到Key_in 和Value_in后,将Value_in 缓存到目标节点,并调用FFMPEG 执行视频帧提取操作,之后将提取出的图像帧数据及其文件名分别写入Value_out 和Key_out。调用的FFMPEG 命令格式为:
ffmpeg-i VideoPath-r FrameRate FileName_%3d.jpg
其中,VideoPath 为目标视频,FrameRate 为提帧频率(帧/秒,f/s),FileName_%3d 为图像帧命名规则。提取的每一帧图像以视频编号加上图像编号作为输出文件名。例如,视频切割间隔DurTime 为60 s,提帧频率FrameRate 为5 f/s,则每一段视频经过帧提取后将输出300 帧图像,其中第5 段视频提取出的第53 帧图像命名为output05_053。
视频经过分割和帧提取操作后已经转换成带特定编号的图像帧。本文结合MapReduce 框架和车牌识别技术对图像帧进行分布式图像识别,具体的Map 函数数据流设计如图5 所示。
图5 Map 数据流设计
其中,Map 函数用于实现车牌号识别和视频时间定位两个功能。
当Map 从图像帧中识别出车牌号码时,立即获取其帧编号并进行计算,采用的计算公式为
式中:VideoTime 为最终定位结果;DurTime 为视频切分间隔(s);VideoNum 为视频分段编号;PictureNum 为图像帧编号;FrameRate 为提帧频率(f/s)。例如,分割间隔为60 s,提帧频率为5 f/s,且从编号为output05_053 的图像帧中识别出车牌号码,则根据计算公式,该车辆出现在视频4 分10 秒处。具体执行流程如图6 所示。
图6 Map 执行流程
Reduce 函数获取<Key,Value >之后,合并相同的车牌号,将车辆出现时间排序后输出到HDFS。Reduce 函数数据流设计如图7 所示。
图7 Reduce 数据流设计
在Linux 环境下,搭建由4 台PC 组成Hadoop 集群,其中1 台作为管理节点(Master),其余3 台作为计算节点(Slave),并为每个节点安装FFMPEG。Hadoop 集群节点配置情况如表1 所示。
表1 Hadoop 集群节点配置情况
上传一段交通监控视频后,采用基于Hadoop 的分布式视频检索方法对车辆进行检索,其检索结果如图8 所示。由图8 可知,检索结果较为准确。
图8 视频车辆检索结果(截图)
采用大小分别为100 Mbyte,500 Mbyte,1 000 Mbyte 的视频进行分布式帧提取测试,DurTime 设置为60 s,FrameRate 设置为5 f/s。分别测试帧提取在单机、1 个节点、2 个节点、3 个节点条件下的系统耗时,结果如图9 所示。
图9 视频帧提取系统耗时
由图9 可知,当视频大小在100 Mbyte 左右时,单机提取和分布式提取耗时接近,当视频超过500 Mbyte 时,分布式视频帧提取速度要比单机提取快1 倍以上,并且随着节点数增多和数据量增大,分布式提取的速度优势越来越明显。在实际测试过程中,当视频大小达到2 Gbyte 时,单机提取出现了明显的卡顿和死机现象,而分布式提取则运行稳定且性能良好。
分别对100,500,1 000,2 000 帧包含车辆信息的随机视频帧进行车辆检索和时间计算,测试系统在单机、1 个节点、2个节点、3 个节点条件下的耗时,结果如图10 所示。
图10 车辆检索系统耗时
由图10 可知,在单机和一个节点情况下,车辆检索的耗时接近,且单机检索速度稍快,这是由于单机环境下省去了主机与节点间通信和数据交换的时间开销。随着节点数的增加,分布式检索的速度显著提升,并且视频帧的数量越大,分布式检索的优势越明显。
仿真结果显示,基于Hadoop 的分布式视频车辆检索方法能有效地从交通监控视频中检索出车辆并定位其出现时间,而在大型视频的检索性能上也优于传统单机检索方式。
本文设计了一种基于Hadoop 的分布式视频车辆检索方法,可高效、快速地从大型交通监控视频中检索出过往车辆,并定位其在视频中出现的时间。首先采用FFMPEG 将大型视频分割成若干个视频分块,然后结合MapReduce 对视频分块进行分布式帧提取,再使用车牌识别算法将视频帧中包含的车牌号码识别出来,最后计算该车辆在视频中出现的时间。实验结果显示,相比于单机检索方法,基于Hadoop 的分布式检索方法大大提高了系统对大型视频的处理能力,并且随着节点数的增加,其检索效率也大幅提升。
[1]朱丽英,梁辰,张鸿洲.基于运动目标的监控视频检索方法[J].计算机应用与软件,2011,28(12):96-98.
[2]徐鹏飞. 交通视频监控平台软件发展趋势浅析[J]. 中国交通信息化,2012(5):82-83.
[3]陈康,郑纬民. 云计算:系统实例与研究现状幸[J]. Journal of Software,2009,20(5):1337-1348.
[4]TAN H,CHEN L. An approach for fast and parallel video processing on Apache Hadoop clusters[C]//Proc.2014 IEEE International Conference on Multimedia and Expo(ICME). [S.l.]:IEEE Press,2014:1-6.
[5]ZHOU L,LI Z,CHEN Y,et al.The video monitoring system based on big data processing[C]//Proc. 2014 7th International Conference on Intelligent Computation Technology and Automation(ICICTA).[S.l.]:IEEE Press,2014:865-868.
[6]SONG C,SHEN W,SUN L,et al. Distributed video transcoding based on MapReduce[C]//Proc. 2014 IEEE/ACIS 13th International Conference on Computer and Information Science(ICIS).[S.l.]:IEEE Press,2014:309-314.
[7]ZHANG J,LIU X,LUO J,et al. Dirs:distributed image retrieval system based on mapreduce[C]//Proe.2010 5th International Conference on Pervasive Computing and Applications(ICPCA).[S.l.]:IEEE Press,2010:93-98.
[8]Apache Hadoop[EB/OL].[2015-01-01]. http://hadoop.apache.org.
[9]AZZEDIN F. Towards a scalable HDFS architecture[C]//Proc.2013 International Conference on Collaboration Technologies and Systems(CTS).[S.l.]:IEEE Press,2013:155-161.
[10]DEAN J,GHEMAWAT S. MapReduce:simplified data processing on large clusters[J].Communications of the ACM,2008,51(1):107-113.
[11]袁春兰,熊宗龙,周雪花,等.基于Sobel 算子的图像边缘检测研究[J].激光与红外,2009,39(1):85-87.
[12]吴丽丽,余春艳.基于Sobel 算子和Radon 变换的车牌倾斜校正方法[J].计算机应用,2013,33(A01):220-222.
[13]顾晨勤,葛万成.基于模板匹配算法的字符识别研究[J]. 通信技术,2009(3):220-222.
[14]FFMPEG[EB/OL].[20150-01-01].http://ffmpeg.org/.
[15]LEI X,JIANG X,WANG C.Design and implementation of a realtime video stream analysis system based on FFMPEG[C]//2013 Fourth World Congress on Software Engineering(WCSE).[S.l.]:IEEE Press,2013:212-216.
[16]纪丽婷,赵柳,苑全兵,等. 视频分割算法的研究[J]. 电子测试,2010(2):9-13.
[17]瞿中,高腾飞,张庆庆. 一种改进的视频关键帧提取算法研究[J].计算机科学,2012,39(8):300-303.