(商洛学院 电子信息与电气工程学院,陕西 商洛 726000)
摘要:针对目前视频分布式处理存在的问题,本文利用分布式计算框架,对分布式视频解码和视频图像处理常用算法库封装进行了研究,并利用平台提供的接口实现了体育视频的运动强度检测。实验结果表明,分布式视频处理相比于单机视频处理能够显著加快速度,减少处理所需时间,验证了使用分布式计算框架处理视频的可行性。
关键词:体育视频;分布式处理;Spark
当前我国体育事业处于快速发展阶段,体育视频数据呈现海量增长,面对数量庞大的体育视频数据,如何高效快速存储、管理及分析成为了一个亟需解决的难题。由于体育视频处理是计算密集型任务,单机已经很难满足大规模视频处理需求,借助广泛使用的大数据框架应对海量视频数据处理是一种可行的解决方案[1]。目前,借助于分布式计算框架如Hadoop、Spark搭建视频处理平台的研究越来越多,但主要集中在监控视频方面,针对体育比赛视频的处理平台研究还比较少[2-3]。因此,本文拟利用分布式计算框架,针对体育视频设计一个满足视频存储、图片存储、视频解码、镜头分割和精彩镜头检测等技术需求的通用视频处理平台,实现体育视频数据高效存储、管理及分析,该方法对体育视频处理具有重要的意义。
1视频分布式处理系统的整体架构
使用分布式计算框架Spark处理视频时,需要对常用的视频图像处理算法加以封装供 Spark直接调用。开发视频读取模块,使得Spark可以直接解码视频,解码得到的数据形式是,其中Key是图像帧编号,标识当前帧位于视频帧序列的位置,Value 是解码后图像数据,以二进制形式表示。同时对FFmpeg、OpenCV常用的视频图像算法加以封装,使得Spark可以直接调用相关算法对视频或者图像进行处理,视频分布式处理系统的整体架构如图1所示。
图1 视频分布式处理系统的整体架构
2视频解码的分布式实现
视频是非结构化数据,无法像文本文件被Spark直接读取和处理。本文设计了一种分布式视频解码方案,具体方案是按照一定的规则对视频进行逻辑分割,分片长度可以通过参数指定,并将逻辑分割得到的视频片段作为Map任务的输入,Map任务的数量与视频逻辑分片数相同,在每个Map任务内对视频进行解码,从而实现了视频的分布式解码[4]。分布式视频解码的整体结构如图2所示。
视频解码需要视频元数据和包含完整GOP的视频文件体,根据视频元数据大小,从存储在HDFS的视频文件读取需要提供给解码器的信息,同时根据逻辑分片在原视频文件中的偏移量和大小,从原视频文件中获取包含完整GOP的视频数据,最终将视频元数据和视频数据合并成一个完整的视频片段。借助FFmpeg接口,实现视频片段的解码,主要包括以下
项目基金:2021年陕西省体育局常规课题(2021324);商洛学院科研基金项目(19FK002);
通讯作者简介:何建强(1987-),男,硕士,讲师,主要从事无线通信技术研究。E-mail:hejianqiang@slxy.edu.cn。
几个步骤:
(1)根据视频文件格式注册对应的容器,同时注册与文件格式对应的编解码器。
(2)读取视频文件,提取流信息并找到对应的视频流。
(3)找到与视频流对应的解码器并打开解码器。
(4)从视频流中读取数据包并利用解码器对其进行解码。
(5)将解码得到的帧转换为指定格式并输出解码后的图像数据。
图2分布式视频解码整体结构图
3 特征提取的分布式实现
3.1 视频图像处理算法封装
由于平台只使用FFmpeg作视频解码,故只封装视频解码功能,具体做法是将视频数据以字节流形式传递给已经用C语言编写好视频解码程序,解码程序调用FFmpeg提供的接口对视频字节流进行解码,并将解码得到的视频帧以字节数组的形式返回给Java程序,在Java 程序中按照约定的数据格式解析字节数组中数据,解析得到一组包括视频帧序号和视频帧数据的键值对并将其打包成PairRDD,将PairRDD作为Spark的数据输入[5]。为方便使用OpenCV 进行图像处理,使用Spark对OpenCV中常用的算法进行封装,如灰度化、图像平滑和颜色直方图提取等[6]。
3.2 分布式运动强度检测
使用Spark进行分布式运动强度检测时需要将待处理的视频存储到HDFS,使用分布式视频解码方法对视频进行解码,解码后的数据以键值对形式存放在PairRDD[7]。初始PairRDD包含当前视频对应所有帧数据,它有多个分区,分区数量与设置逻辑分片大小和视频长度有关,同时分区数量决定了任务的个数,每个分区的数据处理都在一个任务内进行,除此之外,在每个分区内数据都是按照帧编号有序存放。解码完成后执行mapPair操作,将PairRDD内的每个元素对应的视频帧灰度化[8]。通过mapPartion处理灰度化后的分区数据,使用光流法计算相邻帧对应块的运动速度,处理完毕后将结果写入到HDFS。运动强度检测示意图如图3所示。
图3 分布式运动强度检测示意图
4 实验结果与分析
4.1分布式视频解码
1. 分布式/单机解码效率对比
为验证分布式解码的效率,在视频大小不同的情况下,分别统计单机解码和分布式解码耗费的时间。实验中分片大小设置为100,即一个视频逻辑分片中包含100个GOP,Spark任务使用的核数设置为5,即同时最多有5个任务并行处理,所有实验进行5次,取5次实验的平均时间作为解码最终时间,实验结果如表1所示。从表1中可以得出以下结论:
表1 单机解码和分布式解码耗费时间对比
文件大小(MB) | 分布式解码(s) | 单机解码(s) |
15 | 13.17 | 12.82 |
32 | 27.95 | 26.49 |
60 | 51.67 | 50.75 |
102 | 57.99 | 84.27 |
311 | 69.01 | 264.81 |
654 | 153.12 | 559.11 |
979 | 220.15 | 833.58 |
1300 | 282.65 | 1120.70 |
1. 在视频文件较小时,单机解码耗费的时间少于分布式解码,主要原因是分布式解码按照设定的分片大小对视频进行逻辑分割。当视频文件较小时,所包含的GOP数小于设定的分片数,整个视频就是一个逻辑分片,分布式解码退化为单机解码,同时视频逻辑分割和Spark任务创建都需耗费一定的时间,从而导致分布式解码时间长于单机解码。
2. 当视频文件大小大于100MB时,分布式解码耗费时间少于单机解码,且随着视频文件的大小增大,分布式解码和单机解码耗费的时间相差越来越大。当视频大小为1300MB,单机解码耗费时间是分布式解码的4倍,从而说明分布式解码对于长视频解码具有明显的加速效果。
4.2分布式运动强度检测
本次实验以两个视频作为输入数据,测试分布式运动强度检测耗费时间,视频详细信息如表2所示。其中视频video1的时长是80 分钟左右,视频video2的时长是138分钟左右。单机处理video1所耗费时间为1902秒,处理video2所耗费时间为3040秒。
表2 处理视频详细信息
视频编号 | 视频大小(MB) | 帧数 | 帧率 | GOP数 |
video1 | 595 | 120017 | 25 | 891 |
Video2 | 1015 | 207521 | 25 | 1429 |
验证分布式运动强度检测的加速效果,实验中视频逻辑分片大小设置为100,即一个逻辑分片包含100个GOP。测试分布式运动强度检测耗费时间随着Spark 使用的核数的变化,为避免网络波动或其他原因对实验结果的影响,所有实验均进行5次,取5次结果中平均结果作为最终结果,实验结果如表3所示。
表3 在不同核数下分布式运动强度检测耗时
时间(s) 视频编号 | 核数 | |||||||||
2 | 4 | 6 | 8 | 10 | 12 | 14 | 16 | 18 | 20 | |
video1 | 1098.2 | 614.4 | 495.3 | 377.3 | 310.7 | 309.7 | 309.2 | 304.4 | 306.0 | 307.1 |
Video2 | 1721.6 | 1023.8 | 761.9 | 612.9 | 610.1 | 556.1 | 401.3 | 409.1 | 393.2 | 400.8 |
从实验结果可以看出,在处理视频video1时,当设置总核数小于10的时候,随着核数的增加,处理耗时明显减少;当核数接近10的时候,增加核数,处理耗时基本不再减少。分析可知,视频video1共有891个GOP,而设置的视频逻辑分片大小为100,视频共切分成9个片段,从而读取视频的初始RDD共有9个分区。Spark 根据RDD的分区数来创建任务,一个分区对应一个任务,因此处理视频video1被分成9个任务。因此,当核数小于9时,任务在处理时能够充分利用硬件资源,从而使得处理耗时显著减少;当核数大于 9时,增加核数没有作用,无法使得处理耗时减少。说明分布式视频处理相比于单机视频处理能够显著加快速度,减少处理所需时间,验证了使用分布式计算框架处理视频的可行性。
5总结
本文设计了体育视频分布式处理系统。介绍了如何利用Spark进行视频分布式解码和如何封装FFmpeg和Opencv以供Spark使用。为测试处理系统的功能,使用系统提供接口实现体育视频中运动强度检测算法。实验结果表明,处理系统能够提升视频解码和运动强度检测的速度,显著降低处理耗时,验证了使用平台加速视频处理的可行性。
参考文献:
[1] 刘晓晨.大数据分析技术的运动视频内容分类算法[J].现代电子技术,2020,43(15):70-73.
[2] 李晓蕾.基于Hadoop的交通视频大数据监控方案[J].液晶与显示,2020,35(11):1204-1209.
[3] Rathore M M, Son H, Ahmad A, etal. Real-time video processing for traffic control in smart city using Hadoop ecosystem with GPUs[J]. Soft Computing, 2018, 22(5): 1533-1544.
[4] Ao L, Izhikevich L, Voelker G M,etal. Sprocket: A serverless video processing framework. in: Proceedings of the ACM Symposium on Cloud Computing[J]. ACM, 2018, 263-274.
[5] 靳明.基于大数据的智能视频分析系统的构建[J].电子设计工程,2020,28(04):142-146.
[6] Montagnuolo M, Platter P, Bosca A, etal. Realtime Semantic Enrichment of Video Streams in the Age of Big Data[J]. SMPTE Motion Imaging Journal, 2019, 128(1): 1-8.
[7] Iqbal B, Iqbal W, Khan N, et al. Canny edge detection and Hough transform for high esolution video streams using Hadoop and Spark[J]. Cluster Computing, 2019, 1-12.
[8] Jin L, Yan C. Research on Key Technologies of Massive Videos Management Under he Background of Cloud Platform[J]. Journal of Advanced Computational Intelligence and Intelligent Informatics, 2019, 23(1): 72-77.