APP下载

一种基于关键帧的分布式视频分析解耦机制

2015-10-20蔡晓东陈文竹

电视技术 2015年14期
关键词:分片关键帧分块

蔡晓东,华 娜,吴 迪,陈文竹

(桂林电子科技大学 信息与通信工程学院,广西 桂林 541004)

随着视频监控网络化的发展,视频数据量急剧增长。然而这些视频数据中,用户真正需要的信息只是少部分,或者说真正需要监视的只是发生概率很小的某些事件,因此通过海量数据获取有价值的信息面临巨大挑战。为了处理海量的视频数据,不仅要优化计算机视觉和机器学习的算法,而且需要强大的计算平台。近年来云计算在国内外进行地如火如荼,一些开源的云平台针对海量数据集的存储和计算能力等问题提出了解决方案[1-2],最著名的是MapReduce计算模型,它可以自动并行处理海量数据。因此将云计算技术引入视频处理领域,研究利用云计算处理视频技术的相关问题,具有十分重要的研究意义。

在计算机视觉方面应用MapReduce计算模型的研究越来越多。在文献[3]中,使用MapReduce框架搜索相似的图像并生成图像标签;文献[4]中,MapReduce框架被用来进行多媒体数据挖掘,并展示了k-means聚类和背景减除的结果。通常MapReduce框架是对由文件系统自动分割的数据块进行并行处理,但文献[5]中用第三方库FFMPEG解码视频块,文献[6]中用MapReduce处理的数据都是预分块后上传到文件系统中的视频块,均不是直接对文件系统中大尺寸的视频数据进行处理。

云计算中采用字节流的形式传输数据,而视频数据是非结构化的数据,视频的处理单位是视频帧,视频帧的大小并不固定,视频帧之间也没有明确的界限。因此,MapReduce框架可以直接对结构化数据如文本、日志等进行分块并行处理,但不能直接对文件系统中大的视频进行处理,无法通过字节大小判别视频帧,否则视频块会因为帧不完整、找不到关键帧、缺少头文件等情况而导致解码失败。

本文提出一种基于关键帧的分布式视频分析解耦机制,可直接对文件系统中大尺寸的视频数据进行并行化处理,避免视频块因找不到头文件、找不到关键帧而出现解码不成功的现象,提高了海量视频处理效率。

1 相关工作

Hadoop[5]是一个分布式系统基础架构,能够对海量数据以一种可靠、高效、可伸缩的方式进行分布式处理,Hadoop框架中最核心的设计就是HDFS和MapReduce,HDFS为分布式计算存储提供了底层支持,MapReduce提供了对数据的并行计算模式。

1.1 视频数据在HDFS中的存储

HDFS是根据Google的GFS设计而来的,HDFS可以容纳超大型的文件,它将海量数据分布式存储在集群的多个节点上,因此不受文件大小规定的限制,HDFS对客户端写入的大数据按照一定字节自动物理分割成数据块,然后把每一个数据块存储在集群中的某个节点上,块的大小默认为64 Mbyte,块是存储的最小单位。

HDFS对存储的数据按照字节大小进行分块,不考虑数据的存储格式,当存入视频数据时,视频数据分块效果如图1所示。图1中第1、6、11、16帧是视频的关键帧,而第2、8、14帧会被分割到两个不同的块中,是不完整的视频帧,且在一个视频块中会有部分帧找不到关键帧。

图1 HDFS中视频数据分块存储效果

1.2 视频数据在M apReduce中的并行处理机制

用MapReduce[7-9]处理一系列视频数据块如图2所示。MapReduce是一个数据并行处理模型,先读入HDFS中物理分割得到的数据块Block,然后对数据块进行逻辑分片,通常默认一个数据块就是一个数据分片Split,一个数据分片Split对应一个Map任务,即Split为Map提供计算数据源。

图2 MapReduce数据处理过程

2 分布式视频分析解耦机制的实现

对二进制输入数据进行并行处理,即需要将数据分成多个块同时进行处理。分块的目的是使视频数据的计算任务随着数据分块而分为几个小的计算任务同时进行。采用Hadoop默认的方式无法保证各数据块之间计算负载的均衡化,会出现Map任务失衡,整体效率下降。

本文提出的分布式视频解耦和机制可以用MapReduce框架对HDFS中存储的大视频数据直接进行并行处理,HDFS将存储的视频自动切割成视频块,用MapReduce对视频块进行处理时,对视频块进行边界检测,因为关键帧是独立的编码帧,解码时不依赖于其他视频数据,因此在视频块的首尾边界位置进行关键帧检测,若边界位置是关键帧,则将该视频块作为一个视频分片,否则继续读取下一个视频块的帧,直到遇到关键帧,并作为一个视频分片,用MapReduce对数据分片进行并行的解码、计算机视觉处理等,实现了对大尺寸视频数据自动分片,并直接从存储位置中读取视频分片进行并行处理。分布式视频分析解耦策略设计如图3所示。

2.1 获取视频数据并建立视频索引

为了在云平台上处理视频数据,视频解码器必须能够从HDFS中读取视频。有两种方法可以将视频数据读入解码器,一是由MapReduce框架读取HDFS中的视频后传给解码器,二是将指定的视频数据直接读入解码器,为了提高处理速度,本文采用第二种方法,但是Xuggler只能读取本地文件,因此扩展了Xuggler与HDFS进行通信的接口,通过扩展的接口读取数据更加稳定、快速。

分布式视频解耦合机制是按照关键帧的位置对视频进行分片,因此本文用Xuggler对HDFS中存储的视频数据建立基于关键帧的索引,索引格式为“FrameNum,FramePosition”,FrameNum是当前帧帧数,FramePosition是每帧在视频中的字节位置。

图3 视频分布式解耦流程

2.2 FrameRecordReader解析

RecordReader是插入MapReduce作业的输入文件格式中。它将输入流中的数据解析成key-value对,并将key-value对传入map和reduce任务中进行处理。

FrameRecordReader要实现两个函数分别是initialize()和nextKeyValue()。结构如图4所示。

在initialize()中,先读取视频块,每个视频块大小为64 M,获取视频块起始字节位置和终止字节位置,读取已建立的视频帧索引,根据索引判断视频块的起始字节位置和终止字节位置处是否是关键帧,若不是,则自适应调节视频分块起始字节位置和终止字节位置,并按照起始字节位置和终止字节位置直接从HDFS中读取视频数据,并给每个流数据追加视频头信息,写成Xuggler可以读取的视频流形式AVInputStream。

AVInputStream是完成视频块分片的数据流,需要将AVInputStream传入nextKeyValue()中进行键值对解析,因此AVInputStream也需要实现能与HDFS进行通信的接口。

在nextKeyValue()中,读取initialize()中按关键帧分片得到的视频分片AVIputStream,并对AVInputStream进行解码,得到AVPacket,将AVPacket转换得到的Buffered Image作为value,将当前视频帧对应的帧数作为key。这样就解析出了key-value对,并将key-value对传入Map进行处理。

图4 FrameRecordReader的结构

3 实验分析

3.1 实验环境

硬件环境:华硕服务器,CPU为2个6核Intel(R)Xeon(R)CPU E5-2620处理器,内存为64 Gbyte,通过KVM虚拟化技术搭建Hadoop集群,集群中设置1个主节点和3个子节点。

软件环境:操作系统为64位的Centos6.6,在每个节点安装JDK1.7.0,Hadoop2.2.0,FFMPEG,对FFMPEG封装的Java开源库Xuggler。

3.2 并行创建索引实验结果分析

3.2.1 均衡性分析

该测试实现的功能是对HDFS中的视频数据进行解码,测试视频是AVI视频,分辨率为1 920×1 080,测试使用的视频具有不同的时长,分别是30 min、60 min、90 min和120 min,对视频进行并行处理时,使视频分片含有不同数目的GOP,即视频分片具有不同的长度,GOP是图片组,表示两个关键帧之间的图片序列。

表1是在Hadoop默认的分片方式下,不同长度的视频解码所需时间;表2是在按关键帧对视频块分片方式下,不同长度的视频解码所需时间。

表1 不同长度的视频在Hadoop默认分片方式下解码时长 s

表2 不同长度的视频在按关键帧分片方式下解码时长 s

比较表1、表2中的实验数据,当视频时长相同时,随着GOP数目的增加,在本文提出的基于关键帧的分布式视频解耦机制下对视频分片后进行解码所需时间明显减少,当GOP数目相同时,随着视频时长的增长,用本文提出的方法对视频进行解码所需时间更短,有效提高了视频处理速度。同时按照关键帧对视频块进行分片,视频分片含有不同的GOP数目,有效提高了计算负载的均衡性。

3.2.2 性能分析

图5示出了该分布式解耦合机制在不同节点数的集群上的性能。测试视频是AVI视频,分辨率为1 920×1 080,实验表明,相同数据量的情况下,随着集群节点个数的增加,处理视频数据所需的时间近似线性减少,因此可以通过增加集群节点个数来有效减少响应时间。

图5 基于关键帧的分布式解耦机制在各集群上的性能

3.2.3 与FFMPEG解码作比较

本实验将本文所采用的分布式解耦机制与文献[5]中所使用的分布式视频解码方式进行比较,文献[5]中是采用第三方库FFMPEG对视频分片进行解码,由于FFMPEG不能直接处理HDFS中的数据,因此读取数据占用了一定时间。实验中测试视频是H264格式的视频,分辨率为640×360。如图6所示,采用本文方法对同等大小的视频进行解码,所需时间明显少于文献[5]中的视频解码方法,说明本文方法能够有效地在Hadoop平台上进行视频处理。

图6 本文方法与文献[5]方法对比

4 小结

经过以上分析,基于关键帧的分布式视频分析解耦机制通过对视频块按关键帧进行分片后并行处理,解决了在云平台上处理海量视频数据出现的帧不完整、不能解码的问题,提高了计算负载的均衡性,并在整体上提高了视频处理效率。

[1] 方权亮,余谅.基于云计算的智能高清视频监控系统研究[J].微型机与应用,2013,32(3):90-92.

[2] 孙伟.基于云计算的视频监控和资源整合优化系统[J].电视技术,2015,39(8):44-46.

[3] 刘炳均.基于超算平台和Hadoop的并行转码方案设计[J].电视技术,2014,38(7):123-126.

[4]WHITE B,YEH T,LIN J,et al.Web-scale computer vision using MapReduce for multimedia data mining[C]//Proc.the 10th International Workshop on Multimedia Data Mining.Washington DC:[s.n.],2010,7:1-10.

[5] 重庆大学.一种基于Hadoop的视频大数据分布式解码方法:中国,201310203900.1[P].2013-09-04.

[6]KIM M,CUI Y,HAN S,et al.Towards efficient desion and imple-mentation of a hadoop-based distributed video transcoding system in cloud computing environment[J].International Journal of Multimedia and Ubiquitous Engineering,2013(2):213-224.

[7]DEAN J,GHEMAWAT S.MapReduce:simplified data processing on large clusters[C]//Proc.Symposium Conf.Opearting Systems Design & Implementation.[S.l.]:IEEE Press,2004:107-113.

[8] 李建江,崔健,王聃,等.MapReduce并行编程模型研究综述[J].电子学报,2011,39(11):2635-2642.

[9] 李成华,张新访,金海.MapReduce新型的分布式并行计算编程模型[J].计算机工程与科学,2011,33(3):129-135.

猜你喜欢

分片关键帧分块
上下分片與詞的時空佈局
钢结构工程分块滑移安装施工方法探讨
自适应无监督聚类算法的运动图像关键帧跟踪
分片光滑边值问题的再生核方法
CDN存量MP4视频播放优化方法
分块矩阵在线性代数中的应用
基于模糊二分查找的帧分片算法设计与实现
基于改进关键帧选择的RGB-D SLAM算法
反三角分块矩阵Drazin逆新的表示
基于相关系数的道路监控视频关键帧提取算法