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