陳文竹,陳岳林,蔡曉東,王 迪
(桂林電子科技大學,廣西 桂林 541004)
一種多路海量視頻流數(shù)據(jù)并行化處理方法研究
陳文竹,陳岳林,蔡曉東,王 迪
(桂林電子科技大學,廣西 桂林 541004)
針對視頻監(jiān)控系統(tǒng)中傳統(tǒng)的處理方法計算機資源能力不足,無法滿足海量高效的視頻流數(shù)據(jù)內(nèi)容分析的問題,引入Storm并行計算平臺,提出了一種彈性的基于多路視頻流的并行化處理方法,并通過一種高效的內(nèi)存共享機制,集成人車分類算法到分布式處理平臺,使算法與高性能并行計算資源有效融合。通過對比實驗表明,該并行化處理方案高效穩(wěn)定,集群運行良好,負載均衡,能滿足大規(guī)模視頻流數(shù)據(jù)處理的需要。
視頻流;Storm;內(nèi)存共享;人車分類;并行計算
智能視頻監(jiān)控[1]是圖像處理領域一個重要研究課題,廣泛應用于智能交通、智能安防等領域。對攝像頭記錄的視頻數(shù)據(jù)內(nèi)容進行智能分析,對其中的行人和車輛等信息進行檢測分類,進而實現(xiàn)基于視頻內(nèi)容的檢索,在視頻監(jiān)控中具有重要意義。目前有許多有關人車分類算法的研究,文獻[2]提出了一種基于多粒度感知SVM的復雜場景人車分類方法,有效避免光照、色彩目標等變化對目標檢測分類造成的影響。文獻[3]提出了一種基于視頻的行人車輛檢測與分類方法,解決了目標分割不完整、檢測準確率低的問題。文獻[4]提出了一種基于運動區(qū)域的行人檢測與跟蹤算法,能夠快速準確地對行人進行檢測跟蹤,然而當視頻數(shù)據(jù)為海量時,計算資源的瓶頸往往限制了算法的應用,基于串行的算法優(yōu)化無法明顯提高海量視頻圖像處理的高效性,因此有必要引入并行化計算。
基于Hadoop的開源分布式計算架構是當前并行處理平臺的代表,文獻[5]詳細介紹了Hadoop的分布式計算框架。文獻[6-7]提出了基于Hadoop的分布式海量視頻處理方法,對非結構化視頻數(shù)據(jù)去耦合處理,實現(xiàn)了海量視頻的分布式轉碼。文獻[8]提出了一種基于Hadoop的分布式視頻離線處理方法,并應用于視頻監(jiān)控系統(tǒng)中。不過Hadoop只適用于海量文件的批處理,數(shù)據(jù)一次寫入多次讀取,雖然具有高容錯、可擴展、吞吐量大的特性,但是實時響應差且數(shù)據(jù)處理延遲較長,當處理數(shù)據(jù)為連續(xù)不斷的視頻流時,Hadoop平臺無法滿足流式處理的需求。不同于Hadoop的批處理特性,基于內(nèi)存的Storm[9-10]流式計算平臺,數(shù)據(jù)通過網(wǎng)絡直接導入內(nèi)存,減少了磁盤IO時耗,從根本上提升了海量數(shù)據(jù)處理的響應能力,為海量視頻處理提供了新的途徑。
1.1 Storm簡介
Storm是實時的并具備高容錯的分布式計算系統(tǒng),主要由一個主節(jié)點(Nimbus)和一群工作節(jié)點(Worker)組成,同時每個工作節(jié)點上運行一個監(jiān)督節(jié)點(Supervisor),通過Zookeeper進行協(xié)調(diào)。主節(jié)點負責任務分配,并監(jiān)控狀態(tài)。監(jiān)督節(jié)點會監(jiān)聽所分配子節(jié)點機器的任務狀態(tài),根據(jù)需要啟動/關閉工作進程。
Storm中,各個組件間的消息流動形成邏輯上的拓撲結構,故運行一個實時應用程序通過提交拓撲(Topology)完成。如圖1所示,Spout是消息的生產(chǎn)者,負責數(shù)據(jù)的抓取,從來源處讀取數(shù)據(jù)放入拓撲,然后以元組(Tuple)的形式發(fā)送到數(shù)據(jù)流中,Bolt封裝了所有的消息處理邏輯,通過流分組(Stream Grouping)將Spouts與Bolts連接起來。
圖1 拓撲圖
1.2 人車分類
人車分類主要分為4個部分:感興趣前景區(qū)域的提取,目標跟蹤預測,特征提取,目標分類。流程如圖2所示。前景區(qū)域的提取是視頻分析的最初階段,將運動目標從背景中分離,為下一階段的跟蹤與識別做準備。目標跟蹤是對場景中的感興趣目標進行預測與定位,可以更準確地得到目標的運動狀態(tài)。通過特征提取與目標識別對運動信息進行篩選,對人車信息進行識別。
圖2 人車分類流程圖
在Storm集群中每個處理的元組相互獨立,算法的并行實際是基于文件的并行實現(xiàn)。本文使用多幀差分法提取前景區(qū)域,卡爾曼濾波實現(xiàn)目標跟蹤預測,采用HOG算子與SVM算法實現(xiàn)目標的識別分類,在實現(xiàn)每段視頻數(shù)據(jù)處理完整性的前提下也能準確檢測出人車目標。
本文利用Storm并行化處理框架實現(xiàn)基于海量視頻流的人車分類,核心思想是將計算任務分配給多個節(jié)點,通過任務并行化達到提升性能的目的。主要包括如下步驟:緩存視頻流獲取、自定義VideoStreamSpout類組件、算法融合。
2.1 緩存視頻流獲取
遠程攝像頭捕捉到的視頻數(shù)據(jù),通過網(wǎng)絡傳輸?shù)奖镜卦破脚_處理。流媒體在傳輸?shù)倪^程中,由于帶寬等的影響,不可避免地會出現(xiàn)數(shù)據(jù)丟失或失序的現(xiàn)象,而且數(shù)據(jù)采集的速度和數(shù)據(jù)處理的速度不一定同步,會造成數(shù)據(jù)堵塞。RTSP[11-12](實時流媒體協(xié)議)能夠提供可控制的、按需傳輸?shù)膶崟r數(shù)據(jù),監(jiān)控攝像頭產(chǎn)生的視頻流通過本地RTSP流轉服務器,可以獨立實現(xiàn)多路管道中的視頻流數(shù)據(jù)的緩存。
視頻流為幀與幀之間連續(xù)相關的非結構化數(shù)據(jù)流,物理分割會造成幀不完整、分割后缺少關鍵幀(I幀)的問題,因此需要對視頻流數(shù)據(jù)解耦合。提出了一種基于關鍵幀的視頻流緩存方法,如圖3所示,視頻圖像以序列為單位進行組織,一個序列是一段圖像編碼后的數(shù)據(jù)流,以關鍵幀開始到下一個關鍵幀結束。根據(jù)關鍵幀的位置進行緩存,可以保證所有的緩存塊都有必要的幀信息,不會出現(xiàn)缺少關鍵幀無法解碼的問題。
圖3 視頻流緩存方法
2.2 自定義VideoStreamSpout類組件
自定義VideoStreamSpout類組件,通過繼承BaseRichSpout接口實現(xiàn)數(shù)據(jù)讀取,數(shù)據(jù)讀取流程如圖4所示。如2.1節(jié)所述獲取獨立的緩存視頻流,當緩存流達到元組要求就以隊列形式推送。open()方法打開緩存流,將數(shù)據(jù)封裝成一個個Tuple,通過nextTuple()方法不間斷發(fā)送新的Tuple到消息隊列。為保證數(shù)據(jù)的連續(xù)性,每個Tuple會隨機分發(fā)唯一的ID。拓撲提交后會一直運行直到被手動殺死。
圖4 數(shù)據(jù)讀取
此外,Storm在檢測到一個元組被成功處理時調(diào)用 ack()方法,否則調(diào)用fail()方法,這樣保證了數(shù)據(jù)處理的可靠性。
2.3 算法融合
計算任務主要在VideoStreamBolt環(huán)節(jié)實現(xiàn),VideoStreamBolt組件與VideoStreamSpout組件之間通過松耦合的管道機制實現(xiàn)流傳輸,這種調(diào)度機制極大提升了并行計算的穩(wěn)定性和可擴展性。Storm的拓撲結構通過Java語言實現(xiàn),Java語言因其簡單、面向對象、可移植、平臺無關等特性,已成為分布式計算領域的主流程序設計語言。影響Java語言算法實現(xiàn)的最大問題是速度,在原始的Java解釋器中,C語言的速度是解釋過的Java語言的20倍左右,用Java語言來完成對性能敏感的高性能密集計算目前不是最好的選擇。
視頻的解碼及人車分類算法分別使用FFMPEG視頻圖像編解碼庫與Opencv開源計算機視覺處理庫實現(xiàn),采用C/C++ 語言編寫,在不改變并行結構及算法效率的情況下,Java的JNI(Java Native Interface)接口實現(xiàn)了Java數(shù)據(jù)與 C++ 本地庫的數(shù)據(jù)交互,但頻繁的數(shù)據(jù)拷貝會大大降低數(shù)據(jù)傳遞的效率及穩(wěn)定性,且當交換數(shù)據(jù)塊較大時,會造成內(nèi)存泄漏,對計算機內(nèi)存造成較大損耗。同時頻繁的數(shù)據(jù)拷貝造成算法的延時在流式計算中會產(chǎn)生數(shù)據(jù)堵塞。本文提出了一種優(yōu)化的高效并行內(nèi)存共享機制,可以最大化優(yōu)化代碼的運算速度,具體結構如圖5所示。
圖5 并行內(nèi)存共享機制
在該機制中,Java端作為程序的起始端,負責任務的分發(fā)及資源調(diào)度,構建并行計算環(huán)境。當有數(shù)據(jù)交互發(fā)生時,Java端開辟堆內(nèi)存空間與JNI層共享,并將數(shù)據(jù)信息導入共享內(nèi)存,通過地址值的傳遞,實現(xiàn)本地算法與Java端的數(shù)據(jù)交互,同時,也可以通過并行內(nèi)存共享機制,將本地算法處理完成后的人車等目標信息導入Java端。在不打破Storm并行計算框架和Java應用程序環(huán)境的情況下,通過內(nèi)存共享機制,Java端與C++本地算法實現(xiàn)端數(shù)據(jù)同步變化,相比于普通的數(shù)組傳遞,效率更高更快,減少了數(shù)據(jù)堵塞的產(chǎn)生,且適合長期使用、頻繁訪問的大塊內(nèi)存的共享。
本實驗在操作系統(tǒng)為centos6.6的64位華碩服務器下實現(xiàn),硬件環(huán)境如下:CPU為2個6核Intel(R) Xeon(R) CPU E5-2620處理器,內(nèi)存為64 Gbyte,通過KVM虛擬化技術搭建Storm集群,集群中設置1個Nimbus節(jié)點和3個Supervisor節(jié)點,網(wǎng)絡環(huán)境為10.0.0.1網(wǎng)段的局域網(wǎng)。軟件環(huán)境為apache-storm-0.9.2-incubating。測試視頻為編碼方式是H.264,像素為1 920×1 080高清視頻流數(shù)據(jù)。
3.1 基于高效內(nèi)存共享機制的性能分析。
驗證內(nèi)存共享機制的高效性,測試在相同環(huán)境下本文方法與基于數(shù)組傳遞的方法處理不同大小的視頻數(shù)據(jù)時耗如表1所示。
表1 內(nèi)存共性機制高效性分析測試
文件大小/Mbyte本文方法基于內(nèi)存拷貝機制方法總時耗/ms平均每幀處理時間/ms總時耗/ms平均每幀處理時間/ms32689572117863857641371562237403859962025042154887656
從表1可以看出,兩種機制分別實現(xiàn)人車分類算法,本文方法明顯優(yōu)于基于內(nèi)存拷貝機制的方法,且隨著數(shù)據(jù)量的增大,本文方法中每幀視頻數(shù)據(jù)平均處理時間相對穩(wěn)定,能滿足JNI調(diào)用本地算法高效性需求。
3.2 Storm集群下視頻處理高效性分析
吞吐量指系統(tǒng)單位時間內(nèi)處理數(shù)據(jù)的大小,是衡量并行系統(tǒng)實時高效性的重要指標。記錄在Storm單機模式與集群模式下,隨著數(shù)據(jù)量的增加,完成視頻處理所需時間,對比兩種模式下的結果如圖6所示。
圖6 吞吐量分析測試
由圖6可知,當視頻數(shù)據(jù)流比較小時,由于任務分發(fā)數(shù)據(jù)傳輸?shù)榷夹枰馁M一定的計算機資源和時間,單機模式下數(shù)據(jù)流處理時間低于集群模式的處理時間。但是隨著數(shù)據(jù)流的增大,任務分發(fā)所需時間遠小于視頻處理的時耗,集群模式處理時間明顯縮短。
3.3 負載均衡性分析
負載均衡是并行計算中的一項重要指標,數(shù)據(jù)計算過多分布于同一計算節(jié)點,形成數(shù)據(jù)傾斜,會造成計算資源的浪費,影響集群穩(wěn)定性。Storm并行框架的數(shù)據(jù)處理基于內(nèi)存進行,在任務執(zhí)行過程中使用nmon工具統(tǒng)計各節(jié)點內(nèi)存使用情況如圖7所示。
圖7 集群內(nèi)存使用情況
圖中IP為10.0.88.55的計算機為Nimbus節(jié)點,分配 8 Gbyte 內(nèi)存空間,其他為工作節(jié)點分配4 Gbyte內(nèi)存空間。Nimbus節(jié)點需要分配計算任務并監(jiān)控集群狀態(tài),內(nèi)存使用率高于工作節(jié)點,保持穩(wěn)定。各工作節(jié)點在硬件資源分配相同的條件下,在任務開始階段內(nèi)存上升平穩(wěn),隨后趨于穩(wěn)定,由此可知各工作節(jié)點內(nèi)存使用率大致相同,沒有出現(xiàn)某一節(jié)點內(nèi)存使用過高的情形,說明在任務執(zhí)行過程中,集群內(nèi)存使用相對合理,沒有出現(xiàn)數(shù)據(jù)傾斜的情況,負載均衡。
針對海量監(jiān)控視頻流數(shù)據(jù)實時分析的需求,設計了基于多路視頻流的并行處理框架,提高了視頻流數(shù)據(jù)處理的效率。其次,通過高效的并行內(nèi)存共享機制將人車分類算法與Storm實時計算平臺融合,解決了算法實現(xiàn)與分布式計算框架互連互通的問題。最后,通過對比實驗測試分析,分布式集群能高效地完成視頻流數(shù)據(jù)處理,穩(wěn)定性良好。
在未來的研究中,對于如何提高人車分類算法的魯棒性及準確性,以及如何解決由于緩存數(shù)據(jù)塊的獨立性造成檢測重復目標過多的問題,都有待于進一步解決。
[1] 鄭世寶. 智能視頻監(jiān)控技術與應用[J].電視技術,2009,33(1):94-96.
[2] 吳金勇,趙勇,王一科,等. 基于多粒度感知SVM的復雜場景人車分類方法[J].北京大學學報:自然科學版,2013,49(3):404-408.
[3] 楊陽,唐惠明.基于視頻的行人車輛檢測與分類[J].計算機工程,2014,40(11):135-138.
[4] 姚倩,安世全,姚路. 三幀差法和Mean-shift結合的行人檢測與跟蹤研究[J].計算機工程與設計,2014,35(1):223-227.
[5] 李建江,崔健,王聃,等. MapReduce并行編程模型研究綜述[J].電子學報,2011,39(11):2635-2642.
[6] KIM M,CUI Yun,HAN Seungho,LEE H K. Towards efficient desion and implementation 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] RYU C,LEE D,JANG M,et al. Extensible video processing framework in apache Hadoop[C]//Proc. IEEE International Conference on Cloud Computing Techology and Science.[S.l.]:IEEE Press,2013:305-308.
[8] 高東海,李文生,張海濤. 基于Hadoop的離線視頻處理技術研究與實現(xiàn)[J].軟件,2013,34(11):5-9.
[9] YANG Wenjie,LIU Xingang,ZHANG Lan. Big data real-time processing based on storm[C]//Proc. 12th IEEE International Conference on Trust,Security and Privacy in Computing and Communications. [S.l.]:IEEE Press,2013:1784-1787.
[10] FRACHTENBERG E,PETRINI F,F(xiàn)ERNANDEZ J,et al. STORM:scalable resource management for large-scale parallel computers[J].IEEE Trans.Computers,2006,55(12):1572-1587.
[11] KHAN S Q,GAGLIANELLO R,LUNA M. Experiences with blending HTTP,RTSP,and IMS[J].Communications Magazine,2007,45(3):122-128.
[12] 李校林,劉海波,張杰,等. RTP/RTCP,RTSP在無線視頻監(jiān)控系統(tǒng)的設計與實現(xiàn)[J].電視技術,2011,35(19):89-92.
責任編輯:任健男
Parallel Processing Method for Multiplex Massive Video Streaming
CHEN Wenzhu, CHEN Yuelin, CAI Xiaodong, WANG Di
(GuilinUniversityofElectronicTechnology,GuangxiGuilin541004,China)
For solving the problem of the traditional method can’t apply to analysising massive video streaming contents efficiently in video surveillance, Storm distributed computation platform is introduced, and a flexible parallel processing method is presented to process multi-channel video streaming. A highly efficient mechanism of sharing memory is used to merge pedestrian vehicle classification algorithm with high performance parallel computing resources. The experiment shows that the parallel processing method can not only have the characteristics of stable and efficient, but also the platform works good. It proves that the method suits for large scale video streaming processing.
video streaming; Storm; sharing memory; pedestrian vehicle classification; distributed computing
廣西自然科學基金項目(2013GXNSFAA019326)
TN911.7;TP391
A
10.16280/j.videoe.2015.19.028
2015-01-16
【本文獻信息】陳文竹,陳岳林,蔡曉東,等.一種多路海量視頻流數(shù)據(jù)并行化處理方法研究[J].電視技術,2015,39(19).