- 1 -
中国科技论文在线
基于 Spark的人脸检测并行处理系统
武志平,傅慧源**
(北京邮电大学智能通信软件与多媒体北京市重点实验室,北京 100876)
5
作者简介:武志平(1991-),男,硕士研究生,主要研究方向:视频大数据
通信联系人:傅慧源(1986-),男,副教授,主要研究方向:多媒体信息处理
摘要:视频监控领域数据量显著增长的背景下,基于 Spark 搭建一套分布式视频监控系统变
得十分必要。本文提出了基于 Spark并行运行人脸检测算法的方法,并且基于 Spark 搭建了
一套分布式人脸检测视频监控系统。论文主要研究了人脸检测算法在 Spark的并行化实现,
并将该算法在由 3台服务器组成的 Spark集群上运行,并进行了性能测试。实验结果表明,
基于 Spark的分布式视频监控系统使人脸检测的处理效率有了较大提高。该系统可以应用于10
安防、金融、大型考试管理等领域。
关键词:计算机应用技术;Spark;分布式人脸检测
中图分类号:TP39
Parallel Processing System of Face Detection Based on 15
Spark
Wu Zhiping, Fu Huiyuan
(Beijing Key Laboratory of Intelligent Telecommunications Software and Multimedia, Beijing
University of Posts and Telecommunications, Beijing 100876)
Abstract: With the growth of data amount in the field of video surveillance, it becomes very necessary 20
to build a distributed video surveillance system based on Spark. In this paper, we present a method for
face detection parallel running based on Spark, and build a distributed video surveillance system for
face detection based on Spark. The paper mainly studies the parallelization of face detection algorithm
on Spark. We run the algorithm on Spark cluster composed of three nodes, and test the proposed
algorithm. The experimental results show that the distributed video surveillance system based on Spark 25
has greatly improved the efficiency of face detection. The system can be applied to security, finance,
large-scale test management and other fields.
Key words: Conputer Application Technology; Spark; Distributed Face Detection
30
0 引言
近年来,城市公安、交通、金融、环保、电力、医疗、教育等行业管理部门为提高管理
水平,对城市范围内大型联网安全与视频监控平台的需求大量增加,其中尤以城市公安和金
融领域的需求最为突出。这造成系统数据生成点的规模不断扩大,视频监控的覆盖范围和监
控点、卡口的数量都以 30%以上的增长率在快速增加。我国安装的监控摄像头目前已超过35
3000万个,每年产生数万 PB的数据量[1]。而且伴随着平安城市建设如火如荼地开展,视频
监控平台全面迈入了高清时代。如此大的码流值和数据量对视频监控平台的分析、存储和管
理提出了更高的要求[2]。
目前已经出现部分将视频处理相关算法移植到大数据处理平台上的应用,但这些应用基
本是运用MapReduce大数据处理平台,而今已经不太适用于现在超大规模的视频数据的处40
理,效率和性能都有待提高。Spark 是第二代大数据处理平台。业界曾经做过实验,即使在
- 2 -
中国科技论文在线
没有内存优势的情况下,Spark 也仅是MapReduce 的占用存储空间的 1/10,计算效率提高
2-3倍。所以利用 Spark平台来处理视频大数据,效率将会比原先的MapReduce 有较大的提
升。因此将已有的通用视频处理库和视频处理算法移植到更加先进性能更高的大数据处理平
台 Spark 上进行处理,基于 Spark 搭建一套分布式视频监控系统十分必要。
人脸识别是基于人的脸部特征信息进行身份识别的一种技术。目前在安防领域、金融领5
域、大型考试管理等领域都部署了用于身份识别的摄像头,如果能在数据中心部署搭建基于
Spark的分布式视频监控系统,接收这些摄像头传输的数据,并行处理其中的人脸信息,会
对处理效率有很大提高。
1 系统架构及处理流程
系统组件 10
本系统中涉及的系统组件包括 Spark和 JavaCV,数据存储系统基于 Hbase。本文对数据
存储系统不做深入介绍。
Spark
Spark是第二代大数据处理平台,效率比原先的 Hadoop MapReduce有较大提升[3]。
MapReduce是分步对数据进行处理的,会将中间计算结果多次写入磁盘,而 Spark 会在内存15
中将所有结果计算完毕后一次全部写入磁盘,如果集群有足够的内存,Spark的批处理速度
将比MapReduce快近 10倍,而内存中的数据分析速度则快近 100倍[4]。Spark 尤其适合于
迭代式数据处理和流式数据处理,而视频数据即为流式数据,也有相对应的许多用于视频处
理的机器学习算法,所以从理论上来说,Spark非常适合于处理视频数据。Spark 的实现语
言是 Scala,因为 Scala 编译器可以将 Scala程序编译成 JVM上运行的字节码,所以这种语20
言可以和 Java进行无缝衔接。
JavaCV
JavaCV是利用 Java 的 JNI技术对 OpenCV 封装后的一个开源视觉处理库。目前里面集
成了 OpenCV、FFmpeg 等常用的图像和视频处理库[5]。因为图像和视频处理的相关算法一
大部分都是用 C++语言实现的,而 Spark大数据处理平台和 Yarn资源管理平台上运行的代25
码均需要用 Java语言进行编写,所以 JavaCV 可以说是将两种语言结合的桥梁。
系统总体架构
本系统底层仍然采用 Hdfs存储数据,其上使用基于分布式 NoSQL数据库 Hbase的存储
系统存储视频数据和算法输出结果,其中算法输出结果可能为视频、图片或文本。存储系统
之上的数据处理平台采用 Spark,Spark上搭建了 JavaCV 用于处理视频数据。数据采集方面30
直接通过 IP 连接网络摄像头,接收摄像头传输过来的数据。具体系统架构如图 1所示。
- 3 -
中国科技论文在线
图 1 系统架构图
Fig. 1 System Architecture
系统总体处理流程
本系统首先通过 IP 取得多路摄像头的数据,并缓存到 Hdfs,然后通过自行编写的解码5
函数进行分布式解码,之后将视频文件的存储路径和帧号作为 Key,视频文件解码而成的帧
图像作为 Value,构成<Key,Value>二元组,每个二元组可以通过 Spark 的接口转换成 Spark
内置的数据结构 RDD(弹性分布数据集),然后通过 Spark Streaming程序处理每个 RDD
并从中取得帧图像,之后这些帧图像可以应用多种视频分析算法进行按需处理,例如目标检
测、目标识别、目标跟踪等算法,之后的处理结果可能是文本、图片或视频片段,之后将处10
理结果存入基于 Hbase的存储系统中,并将处理结果展示到前台。具体处理流程如图 2所示。
- 4 -
中国科技论文在线
图 2 系统处理流程图
Fig. 2 Flow Chart of System Processing
2 人脸检测算法并行化处理流程及实现
本文主要考虑了人脸检测算法的并行化处理的方法及其实现。 5
基于 JavaCV的人脸检测算法处理流程
基于 JavaCV的人脸检测算法使用了 Haar分类器,它使用 Haar-like特征做检测,使用
积分图对 Haar-like特征的求值进行加速,以提高检测速度,它是一系列强分类器的级联,
形成决策树,可以提高检测的准确率[6]。本文中不涉及分类器的训练,使用 JavaCV自带的
已训练完成的Haar分类器,它是一个XML文件,通过 JavaCV的接口CvHaarClassifierCascade10
加载这个文件来实现人脸检测。
JavaCV所实现的人脸检测算法处理流程如下:
1)将 RGB 帧图像转化为灰度图,并将图片缩小,以便于提取和对比特征;
2)加载已训练完成的 Haar分类器;
3)通过积分图对比图像的特征值,从而检测出人脸,并用矩形框标出检测结果[7]。 15
人脸检测算法并行化处理流程
本文中实现的系统可以通过 Spark Streaming程序实现同时接收不同路的摄像头传输的
数据,并对其中的人脸信息进行处理,并行运行人脸检测算法,从而提高人脸检测效率。本
系统从网络摄像头中取得视频流,通过分布式解码取得帧图像,之后构造二元组<Key,
Frame>,每个二元组可以在 Spark Streaming中转换成 Spark 内置的数据结构 RDD(弹性分20
- 5 -
中国科技论文在线
布数据集),其中 Key可以唯一标识一个摄像头传输数据中的一帧图像,可以是本地摄像
头的设备号或者网络摄像头的 IP 结合帧号标识,Frame表示该路摄像头传输的视频帧数据,
可以是 BufferImage类型或 IplImage类型。Spark Streaming 程序读取该二元组,通过继承实
现的接口取得帧图像,之后即可运行相应的人脸检测算法,最后可以将算法的输出结果存入
到存储系统或者展示到前台页面。具体的算法流程如图 3所示。 5
图 3 算法并行化处理流程图
Fig. 3 Flow Chart of Algorithm Parallel Processing
并行化处理流程的伪代码如图 4所示:
10
图 4 并行化处理流程伪代码
Fig. 4 Pseudocode of Parallel Processing Flow
3 实验和结果分析
实验环境
本文使用 3台服务器搭建的 Spark 集群进行实验,安装组件版本详见表 1,集群软硬件15
配置参数详见表 2。
20
- 6 -
中国科技论文在线
表 1 安装组件版本
Tab. 1 Installed Component Version
组件 版本
JDK _92
Apache Hadoop YARN
Apache Spark
Scala
JavaCV
表 2 集群软硬件配置参数
Tab. 2 Configuration Parameters of Cluster Hardware and Software
IP CPU 内存 硬盘 网卡 操作系统 角色
4 颗 2 核
Intel Xeon CPU
E5-2620 0 @
16G 1000M以太
网
ubuntu
LTS
64 位
主节
点
24 颗 6 核
Intel Xeon CPU
E5-2620 0 @
64G 1000M以太
网
ubuntu
LTS
64 位
从节
点
24 颗 6 核
Intel Xeon CPU
E5-2420 0 @
16G 1000M以太
网
ubuntu
LTS
64 位
从节
点
5
- 7 -
中国科技论文在线
实验和结果分析
实验将程序运行时间作为因变量(单位:ms),输入视频文件的数量(即为在本地 Hdfs
上处理视频文件的数量)作为自变量(单位:个)。输入视频文件格式为 mp4,每个时长约
为 12s,大小约为 1MB。具体实验结果如图 5、图 6、图 7、图 8所示。
5
图 5 人脸检测程序运行时间与集群节点数量的关系
Fig. 5 The Relationship between the Running Time of the Face Detection Program and the Number of Cluster
Nodes
图 6 人脸检测程序运行时间与运行方式的关系 10
Fig. 6 The Relationship between the Running Time of the Face Detection Program and the Mode of Operation
- 8 -
中国科技论文在线
图 7 人脸检测程序运行时间与集群类型的关系
Fig. 7 The Relationship between the Running Time of the Face Detection Program and the Type of Cluster
图 8 系统负载与输入视频数的关系 5
Fig. 8 The Relationship between the System Load and the Number of Inputed Video
由实验结果可以看出,人脸检测程序运行时间随 Spark集群节点数增加而减少,并且
Spark集群运行人脸检测算法的效率比单机运行人脸检测算法有较大提高。经实际测试,使
用本文中 3个节点的集群最多可以处理 90G 左右的视频片段数据,此时系统基本达到最大
负载。如果集群能添加更多节点,则可以推断出程序运行效率会进一步提高。 10
4 结论
本文提出并实现了基于 Spark的分布式视频监控系统,通过该系统可以接收多路摄像头
传输的数据,并且并行运行人脸检测算法。本文主要研究了人脸检测算法在 Spark上的并行
化实现,并将该算法在由 3台服务器组成的 Spark 集群上运行,并进行了性能测试。实验结
果表明,基于 Spark的分布式视频监控系统使人脸检测的处理效率有了很大提高。并且根据15
- 9 -
中国科技论文在线
实验结果可以分析出,算法的处理效率随着集群节点数的增加可以进一步提升。
该系统可以在安防领域(例如机场、车站、码头等)、金融领域(例如 ATM自助终端、
银行柜面系统、电子支付等)、大型考试管理等领域部署应用[8],在视频监控领域数据量显
著增长以及人脸检测广泛应用的背景下,对提高算法处理效率具有重要意义。
[参考文献] (References) 5
[1] 黄凯奇,陈晓棠,康运锋等. 智能视频监控技术综述[J]. 计算机学报,2015,38(6):
1093-1118.
[2] Apache. Hadoop YARN[OL]. [2016-2-12].
arn/hadoop-yarn-site/.
[3] Apache. Spark[OL]. [2016-7-14]. 10
[4] GitHub. JavaCV[OL]. [2016-12-12].
[5] Kyungjoong Jeong,Jaesik Choi,Gil-Jin Jang. Semi-Local Structure Patterns for Robust Face
Detection[J]. IEEE Signal Processing Letters,2015,22(9):1400-1403.
[6] Gee-Sern Hsu,Tsu-Ying Chu. A Framework for Making Face Detection Benchmark
Databases[J]. IEEE Transactions on Circuits and Systems for Video Technology,2014,24(2):15
230-241.
[7] Anas Amjad,Alison Griffiths,Mohammad N Patwary. Multiple Face Detection Algorithm
Using Colour Skin Modelling[J]. IET Image Processing,2012,6(8):1093-1101.
[8] Raphael Sznitman,Bruno Jedynak. Active Testing for Face Detection and Localization[J].
IEEE Transactions on Pattern Analysis and Machine Intelligence,2010,32(10):1914-1920. 20