武志平
【摘要】在視頻監(jiān)控領(lǐng)域數(shù)據(jù)量顯著增長的背景下,基于Spark搭建一套分布式視頻監(jiān)控系統(tǒng)變得十分必要。本文提出了基于Spark并行運行人臉檢測算法的方法,并且基于Spark搭建了一套分布式人臉檢測視頻監(jiān)控系統(tǒng),并進行了性能測試。實驗結(jié)果表明,基于Spark的分布式視頻監(jiān)控系統(tǒng)使人臉檢測的處理效率有了較大提高。該系統(tǒng)可以應(yīng)用于安防、金融、大型考試管理等領(lǐng)域。
【關(guān)鍵詞】計算機應(yīng)用技術(shù);Spark;分布式人臉檢測
引言
人臉識別是基于人的臉部特征信息進行身份識別的一種技術(shù)。目前在安防領(lǐng)域、金融領(lǐng)域、大型考試管理等領(lǐng)域都部署了用于身份識別的攝像頭,如果能在數(shù)據(jù)中心部署搭建基于第二代大數(shù)據(jù)處理平臺Spark的分布式視頻監(jiān)控系統(tǒng),接收這些攝像頭傳輸?shù)臄?shù)據(jù),并行處理其中的人臉信息,會對處理效率有很大提高。
1、系統(tǒng)組件及總體架構(gòu)
1.1 系統(tǒng)組件
1.1.1 Spark
Spark是第二代大數(shù)據(jù)處理平臺,效率比原先的Hadoop MapReduce有較大提升。Spark尤其適合于迭代式數(shù)據(jù)處理和流式數(shù)據(jù)處理,而視頻數(shù)據(jù)即為流式數(shù)據(jù),也有相對應(yīng)的許多用于視頻處理的機器學習算法,所以從理論上來說,Spark非常適合于處理視頻數(shù)據(jù)。Spark的實現(xiàn)語言是Scala,因為Scala編譯器可以將Scala程序編譯成JVM上運行的字節(jié)碼,所以這種語言可以和Java進行無縫銜接。
1.1.2 JavaCV
JavaCV是利用Java的JNI技術(shù)對OpenCV封裝后的一個開源視覺處理庫。目前里面集成了OpenCV、FFmpeg等常用的圖像和視頻處理庫。因為圖像和視頻處理的相關(guān)算法一大部分都是用C++語言實現(xiàn)的,而Spark大數(shù)據(jù)處理平臺和Yarn資源管理平臺上運行的代碼均需要用Java語言進行編寫,所以JavaCV可以說是將兩種語言結(jié)合的橋梁。
1.2 系統(tǒng)總體架構(gòu)
本系統(tǒng)底層仍然采用Hdfs存儲數(shù)據(jù),其上使用基于分布式NoSQL數(shù)據(jù)庫Hbase的存儲系統(tǒng)存儲視頻數(shù)據(jù)和算法輸出結(jié)果,其中算法輸出結(jié)果可能為視頻、圖片或文本。存儲系統(tǒng)之上的數(shù)據(jù)處理平臺采用Spark,Spark上搭建了JavaCV用于處理視頻數(shù)據(jù)。數(shù)據(jù)采集方面直接通過IP連接網(wǎng)絡(luò)攝像頭,接收攝像頭傳輸過來的數(shù)據(jù)。
2、人臉檢測算法并行化處理流程
2.1 基于JavaCV的人臉檢測算法處理流程
基于JavaCV的人臉檢測算法使用了Haar分類器,它使用Haar-like特征做檢測,使用積分圖對Haar-like特征的求值進行加速,以提高檢測速度,它是一系列強分類器的級聯(lián),形成決策樹,可以提高檢測的準確率。
JavaCV所實現(xiàn)的人臉檢測算法處理流程如下:
1)將RGB幀圖像轉(zhuǎn)化為灰度圖,并將圖片縮小,以便于提取和對比特征;
2)加載已訓(xùn)練完成的Haar分類器;
3)通過積分圖對比圖像的特征值,從而檢測出人臉,并用矩形框標出檢測結(jié)果。
2.2 人臉檢測算法并行化處理流程
本文中實現(xiàn)的系統(tǒng)可以通過Spark Streaming程序?qū)崿F(xiàn)同時接收不同路的攝像頭傳輸?shù)臄?shù)據(jù),并對其中的人臉信息進行處理,并行運行人臉檢測算法,從而提高人臉檢測效率。本系統(tǒng)從網(wǎng)絡(luò)攝像頭中取得視頻流,通過分布式解碼取得幀圖像,之后構(gòu)造二元組,每個二元組在Spark Streaming中即為一個RDD,其中Key可以唯一標識一個攝像頭傳輸數(shù)據(jù)中的一幀圖像,可以是本地攝像頭的設(shè)備號或者網(wǎng)絡(luò)攝像頭的IP結(jié)合幀號標識,F(xiàn)rame表示該路攝像頭傳輸?shù)囊曨l幀數(shù)據(jù),可以是BufferImage類型或IplImage類型。Spark Streaming程序讀取該二元組,通過繼承實現(xiàn)的接口取得幀圖像,之后即可運行相應(yīng)的人臉檢測算法,最后可以將算法的輸出結(jié)果存入到存儲系統(tǒng)或者展示到前臺頁面。
3、實驗及結(jié)果分析
實驗將程序運行時間作為因變量,輸入視頻文件的數(shù)量作為自變量。輸入視頻文件格式為mp4,每個時長約為12s,大小約為1MB。實驗結(jié)果如圖1所示。可以看出,人臉檢測程序運行時間隨Spark集群節(jié)點數(shù)增加而減少。如果集群能添加更多節(jié)點,則可以推斷出程序運行效率會進一步提高。
4、結(jié)論
本文提出并實現(xiàn)了基于Spark的分布式視頻監(jiān)控系統(tǒng),通過該系統(tǒng)可以接收多路攝像頭傳輸?shù)臄?shù)據(jù),并且并行運行人臉檢測算法。本文主要研究了人臉檢測算法在Spark上的并行化實現(xiàn),并將該算法在由3臺服務(wù)器組成的Spark集群上運行,并進行了性能測試。實驗結(jié)果表明,基于Spark的分布式視頻監(jiān)控系統(tǒng)使人臉檢測的處理效率有了較大提高。
該系統(tǒng)可以在安防領(lǐng)域(例如機場、車站、碼頭等)、金融領(lǐng)域(例如ATM自助終端、銀行柜面系統(tǒng)、電子支付等)、大型考試管理等領(lǐng)域部署應(yīng)用,在視頻監(jiān)控領(lǐng)域數(shù)據(jù)量顯著增長以及人臉檢測廣泛應(yīng)用的背景下,對提高算法處理效率具有重要意義。
參考文獻:
[1] 黃凱奇,陳曉棠,康運鋒等. 智能視頻監(jiān)控技術(shù)綜述[J]. 計算機學報,2015,38(6): 1093-1118
[2] Shalince Dominic,C. Aparna,Aswin S Nath,et al. A review of face detection system[C]. 2016 International Conference on Electrical, Electronics, and Optimization Techniques (ICEEOT),2016,3536-3539