張 洪,趙 平,伍 玲,牛新征
(1.電子科技大學(xué) 信息與軟件工程學(xué)院,成都 610054;2.自貢市公安局交通警察支隊(duì),四川 自貢 643000;3.電子科技大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,成都 611731)
近年來,社會(huì)經(jīng)濟(jì)發(fā)展的同時(shí),推動(dòng)了城市化道路的發(fā)展進(jìn)程。城市道路中的車流量快速增長,促使智能交通系統(tǒng)(ITS,Intelligent Transport System)備受重視,基于視頻的車流量檢測(cè)[1-2]作為ITS的重要組成部分,它可以為城市道路的智能化調(diào)控(道路建設(shè)、紅綠燈智能控制等)提供基礎(chǔ)數(shù)據(jù)依據(jù)。將視頻處理技術(shù)應(yīng)用到車流量檢測(cè)的方法主要有:幀差法[3]、背景差法[4]、光流法[5-6]等。
文獻(xiàn)[5]檢測(cè)精度高,但算法存在復(fù)雜度高以及計(jì)算量大等缺點(diǎn)。文獻(xiàn)[3]改進(jìn)傳統(tǒng)幀差法實(shí)現(xiàn)檢測(cè)車流量,在預(yù)設(shè)的檢測(cè)帶內(nèi)檢測(cè)出運(yùn)動(dòng)目標(biāo),并將運(yùn)動(dòng)目標(biāo)轉(zhuǎn)換成數(shù)據(jù)對(duì)象,根據(jù)數(shù)據(jù)對(duì)象的變化進(jìn)行車輛檢測(cè)。文獻(xiàn)[6]采用改進(jìn)的三幀差法與光流法結(jié)合實(shí)現(xiàn)檢測(cè)運(yùn)動(dòng)對(duì)象的目的,從而減小處理的計(jì)算復(fù)雜度。文獻(xiàn)[4]采用改進(jìn)的背景差法實(shí)現(xiàn)運(yùn)動(dòng)目標(biāo)檢測(cè),該算法對(duì)背景建模和閾值選取提出優(yōu)化與改進(jìn),提升了檢測(cè)準(zhǔn)確率和應(yīng)對(duì)復(fù)雜場景的能力。
交通視頻數(shù)量的不斷增加,無疑為車流量檢測(cè)提出了更大的挑戰(zhàn)。處理批量大視頻數(shù)據(jù)的關(guān)鍵問題在于加快檢測(cè)速度,隨著云計(jì)算技術(shù)的不斷發(fā)展,解決處理大視頻數(shù)據(jù)的速度問題成為了可能,文獻(xiàn)[7-8]將基于云的視頻分析與GPU結(jié)合運(yùn)用到交通監(jiān)控系統(tǒng)中,成功的改善了視頻監(jiān)控的處理速度問題。同時(shí),MPI、MapReduce[9]等并行計(jì)算模型以及Hadoop、Spark[10]等大數(shù)據(jù)分布式計(jì)算框架的出現(xiàn),為龐大且復(fù)雜的視頻數(shù)據(jù)在普通PC機(jī)上完成計(jì)算提供了較好的支持,也為視頻大數(shù)據(jù)提供良好的解決方案。文獻(xiàn)[11]將Spark運(yùn)用到大規(guī)模視頻處理中,能較好的解決視頻處理速度問題。
本文創(chuàng)新性的將Spark分布式計(jì)算框架與傳統(tǒng)運(yùn)動(dòng)目標(biāo)檢測(cè)算法(幀差法)結(jié)合,設(shè)計(jì)并實(shí)現(xiàn)一種準(zhǔn)確率達(dá)90.5%,速度比傳統(tǒng)幀差法快528%的檢測(cè)方法。在保證準(zhǔn)確率的同時(shí),改善傳統(tǒng)幀差法在檢測(cè)批量交通視頻出現(xiàn)的處理速率慢的問題。
分布式車流量檢測(cè)系統(tǒng)分為數(shù)據(jù)存儲(chǔ)層,數(shù)據(jù)計(jì)算層和系統(tǒng)應(yīng)用層。數(shù)據(jù)存儲(chǔ)層為數(shù)據(jù)計(jì)算層提供數(shù)據(jù)支持,數(shù)據(jù)計(jì)算層為系統(tǒng)應(yīng)用層提供核心算法支持,系統(tǒng)應(yīng)用層為系統(tǒng)提供應(yīng)用服務(wù)支持。具體來說,數(shù)據(jù)存儲(chǔ)作為數(shù)據(jù)輸入層,提供車流量檢測(cè)的數(shù)據(jù)輸入。系統(tǒng)數(shù)據(jù)使用HDFS實(shí)現(xiàn)數(shù)據(jù)的分布式存儲(chǔ),以達(dá)到數(shù)據(jù)高可利用率和高容錯(cuò)性目的;數(shù)據(jù)計(jì)算作為數(shù)據(jù)邏輯處理層,提供車流量檢測(cè)的核心算法實(shí)現(xiàn)。數(shù)據(jù)計(jì)算層使用幀差法完成車流量檢測(cè)、目標(biāo)跟蹤與車輛統(tǒng)計(jì)功能,整個(gè)計(jì)算過程基于Spark分布式計(jì)算框架,將分布式車流量檢測(cè)任務(wù)分配與計(jì)算節(jié)點(diǎn)選擇都交給Spark,以達(dá)到簡化系統(tǒng)編程實(shí)現(xiàn),以及從系統(tǒng)結(jié)構(gòu)層面提升車流量檢測(cè)速度的目的;系統(tǒng)應(yīng)用作為視頻處理結(jié)果的基本運(yùn)用,提供車流量檢測(cè)的核心應(yīng)用,包括車流量檢測(cè)和車輛信息持久化。車輛信息持久化基于HBase數(shù)據(jù)庫,以達(dá)到提升數(shù)據(jù)的高可用性與高可靠性的目的。系統(tǒng)結(jié)構(gòu)如圖1所示。
視頻目標(biāo)檢測(cè)與跟蹤通常包括:視頻圖像采集、圖像預(yù)處理、運(yùn)動(dòng)目標(biāo)檢測(cè)、運(yùn)動(dòng)目標(biāo)跟蹤、運(yùn)動(dòng)目標(biāo)提取等主要部分,如圖2所示。
本文設(shè)計(jì)的分布式車流量檢測(cè)方法將Hadoop生態(tài)系統(tǒng)中的HDFS和HBase分別作為視頻文件和處理結(jié)果的存儲(chǔ)平臺(tái)??紤]到傳統(tǒng)視頻目標(biāo)檢測(cè)算法的復(fù)雜度,本文選擇幀差法用于運(yùn)動(dòng)目標(biāo)檢測(cè),并采用運(yùn)動(dòng)目標(biāo)位移量作為車輛跟蹤的依據(jù)。按照算法的處理流程,方法主要分為4個(gè)模塊:分布式視頻獲取模塊,視頻預(yù)處理與車輛檢測(cè)模塊,車輛跟蹤模塊,車流量統(tǒng)計(jì)入庫模塊。
本文提出的方法可分為4個(gè)部分:視頻獲取、圖像預(yù)處理與車輛檢測(cè)、車輛跟蹤與統(tǒng)計(jì)、車輛信息持久化。車流量檢測(cè)算法流程如圖3 所示,分布式任務(wù)執(zhí)行流程如圖4所示。具體實(shí)現(xiàn)步驟如下:
1)任務(wù)初始化:主控節(jié)點(diǎn)初始化車流量檢測(cè)任務(wù),并序列化任務(wù)發(fā)送給可用的計(jì)算節(jié)點(diǎn);
2)視頻獲?。河?jì)算節(jié)點(diǎn)反序列化任務(wù),獲取待檢測(cè)交通視頻存儲(chǔ)位置,并讀取視頻;
3)設(shè)置虛擬檢測(cè)線:計(jì)算節(jié)點(diǎn)根據(jù)待處理視頻大小設(shè)置虛擬檢測(cè)線位置;
4)圖像預(yù)處理與車輛檢測(cè):計(jì)算節(jié)點(diǎn)對(duì)待處理的兩幀圖像進(jìn)行預(yù)處理,并完成車輛檢測(cè);
5)車輛跟蹤與統(tǒng)計(jì):計(jì)算節(jié)點(diǎn)根據(jù)當(dāng)前幀的車輛位移實(shí)現(xiàn)車輛跟蹤,并判斷車輛是否經(jīng)過虛擬檢測(cè)線;
6)車輛信息持久化:計(jì)算節(jié)點(diǎn)將視頻的檢測(cè)結(jié)果返回主控節(jié)點(diǎn),主控節(jié)點(diǎn)接收結(jié)果并持久化到HBase。
圖3 車流量檢測(cè)算法流程圖
分布式車流量檢測(cè)方法軟件編程主要基于Java語言,并配合開源分布式計(jì)算框架Spark和開源視頻圖像庫Java CV、FFmpeg。其中,視頻文件編解碼使用FFmpeg開源庫實(shí)現(xiàn);幀差法的車輛檢測(cè)、跟蹤與統(tǒng)計(jì)使用Java CV開源視頻圖像處理庫實(shí)現(xiàn);分布式數(shù)據(jù)獲取、任務(wù)分配、車流量檢測(cè)與檢測(cè)結(jié)果匯總使用Spark框架實(shí)現(xiàn);車輛信息持久化存儲(chǔ)與獲取使用HBase API實(shí)現(xiàn)。
圖4 分布式車流量檢測(cè)任務(wù)執(zhí)行流程圖
待處理的視頻文件存儲(chǔ)在HDFS中,Spark不能對(duì)視頻實(shí)現(xiàn)簡單的分割處理。因此,本文采用兩種方案完成視頻文件的獲取,第一種為讀取批量視頻文件,每個(gè)計(jì)算任務(wù)處理一個(gè)完整的視頻文件;另一種為讀取批量視頻,并采用視頻幀分割方法完成視頻讀取,每個(gè)計(jì)算任務(wù)處理一定量的視頻幀圖像數(shù)據(jù)集合。
根據(jù)兩種視頻讀取方案設(shè)計(jì)出兩種分布式檢測(cè)算法:基于視頻幀分割的Spark分布式車流量檢測(cè)算法(FBSVD,F(xiàn)rame-Based Spark Vehicle Detector)和基于完整視頻處理的Spark分布式車流量檢測(cè)算法(VBSVD,Video-Based Spark Vehicle Detector)。
第一種視頻讀取方案,只需獲取HDFS中視頻文件映射到本地的絕對(duì)路徑集合,并將視頻路徑信息發(fā)送給計(jì)算節(jié)點(diǎn)。
第二種視頻讀取方案,必須切割視頻幀圖像數(shù)據(jù)。首先,傳入任務(wù)總數(shù),其中任務(wù)總數(shù)根據(jù)分布式集群中計(jì)算節(jié)點(diǎn)的CPU總核數(shù)進(jìn)行設(shè)定,經(jīng)驗(yàn)表明任務(wù)總數(shù)適宜為集群中CPU總核數(shù)的2-3倍;然后,根據(jù)任務(wù)總數(shù)計(jì)算出各節(jié)點(diǎn)需要獲取到的視頻幀區(qū)間;最后,計(jì)算節(jié)點(diǎn)在執(zhí)行任務(wù)時(shí)解碼視頻獲得需要處理的視頻幀圖像區(qū)間集合。具體操作偽代碼如下:
BeginInput任務(wù)數(shù)量N獲取待處理視頻總幀數(shù)n;根據(jù)N計(jì)算每個(gè)任務(wù)需處理的視頻幀數(shù)g;根據(jù)任務(wù)id獲取本任務(wù)需要讀取的視頻開始幀s;ifs+g>nthen本任務(wù)需要讀取的結(jié)束幀g=s+g;else本任務(wù)需要讀取的結(jié)束幀g=n;Output處理幀圖像集合End
本文通過使用圖像預(yù)處理技術(shù)做基礎(chǔ)操作,并使用幀差法檢測(cè)運(yùn)動(dòng)目標(biāo)。具體實(shí)現(xiàn)步驟如下:
1)預(yù)處理:使用圖像二值化、高斯濾波、膨脹和腐蝕等方式完成待處理的兩幀圖像的預(yù)處理操作;
2)車輛檢測(cè):使用第a幀和第a-1灰度圖像作差,根據(jù)差圖像判斷車輛目標(biāo)的存在。
兩幀差分法檢測(cè)運(yùn)動(dòng)目標(biāo)公式如下:
D=|I(x,y,a)-I(x,y,a-1)|
(1)
式中,I(x,y,a),I(x,y,a-1)分別表示第a幀和第a-1幀的灰度圖像,D為差分結(jié)果圖像。
檢測(cè)出運(yùn)動(dòng)目標(biāo)之后,對(duì)檢測(cè)出的所有運(yùn)動(dòng)目標(biāo)區(qū)域的面積記為Si,目標(biāo)區(qū)域的寬高比記為a,然后使用閾值檢測(cè)的方式,判斷運(yùn)動(dòng)目標(biāo)區(qū)域是否為車輛記為h,判斷公式如下:
(2)
式中,T1,T2和T3為經(jīng)驗(yàn)值,本文分別取為5000,2和0.5。
車流量跟蹤與統(tǒng)計(jì)實(shí)現(xiàn)步驟如下:
1)虛擬檢測(cè)線設(shè)置:實(shí)驗(yàn)設(shè)定為檢測(cè)單向車道車流量,經(jīng)過多次測(cè)試總結(jié),檢測(cè)線設(shè)置為視頻高度的0.54倍,寬度的0.5倍;
2)車輛跟蹤:將檢測(cè)到的車輛加入待定車輛集合,并預(yù)計(jì)每個(gè)車輛在下一幀出現(xiàn)的可能方位。在檢測(cè)到當(dāng)前幀出現(xiàn)的車輛目標(biāo)時(shí),判斷當(dāng)前車輛的位移是否在待定車輛集合中某一車輛目標(biāo)的合理位移范圍內(nèi),從而實(shí)現(xiàn)目標(biāo)跟蹤;
3)車輛統(tǒng)計(jì):當(dāng)跟蹤的目標(biāo)經(jīng)過了預(yù)設(shè)的檢測(cè)線時(shí),取消目標(biāo)跟蹤,并將車輛數(shù)加1。
通過車流量統(tǒng)計(jì)檢測(cè)到的車輛信息,匯總檢測(cè)視頻中的車流量數(shù)量,以及檢測(cè)的各車量信息,包括:車輛出現(xiàn)在視頻中的哪一幀,以及在二維圖像中的x,y坐標(biāo)等,寫入HBase分布式數(shù)據(jù)庫。
算法實(shí)現(xiàn)按照分布式集群節(jié)點(diǎn)類型,分為Master節(jié)點(diǎn)主控功能和Worker節(jié)點(diǎn)任務(wù)計(jì)算功能。其中,Master節(jié)點(diǎn)作用為任務(wù)初始化、任務(wù)發(fā)起和任務(wù)結(jié)果回收入庫的功能,Worker節(jié)點(diǎn)作用為任務(wù)接收、任務(wù)執(zhí)行和任務(wù)結(jié)果回送的功能。具體實(shí)現(xiàn)的核心偽代碼描述如下:
BeginInputV1,V2,…,VkMaster節(jié)點(diǎn):初始化應(yīng)用。序列化待處理視頻存儲(chǔ)位置,并將其發(fā)送給計(jì)算節(jié)點(diǎn);Worker節(jié)點(diǎn):反序列化任務(wù)處理視頻Vi位置;獲取視頻Vi的幀數(shù)n;for1ton預(yù)處理相鄰兩幀圖像;相鄰兩幀的差幀dFrame:dFrame=Is-In-1;獲取差幀中的運(yùn)動(dòng)區(qū)域集合M;whileM≠φdo ifSmi≥T1&&α>T2then if檢測(cè)該區(qū)域?yàn)橐迅櫟能囕vthen if車輛經(jīng)過了檢測(cè)線then c=c+1;記錄該車輛信息到車輛集合N;Output所有視頻的車流量統(tǒng)計(jì)結(jié)果N’End
為了檢驗(yàn)本文提出的VBSVD算法的性能和有效性,實(shí)驗(yàn)對(duì)兩個(gè)交通路段的批量5 min交通視頻進(jìn)行測(cè)試,數(shù)據(jù)集名稱和包含真實(shí)車數(shù)如表1所示(路段A的測(cè)試集記為A-x,路段B的測(cè)試集記為B-x)。設(shè)計(jì)了三組實(shí)驗(yàn)評(píng)價(jià)VBSVD:1)與本文提出的FBSVD算法和幀差法之間在測(cè)試集A-4和B-4的比較;2)VBSVD在不同測(cè)試集的比較;3)VBSVD算
表1 測(cè)試集信息表
法使用不同CPU核數(shù)測(cè)試B-4,相對(duì)于傳統(tǒng)幀差法測(cè)試B-4的比較。
實(shí)驗(yàn)采用普通四臺(tái)PC機(jī)作為實(shí)驗(yàn)測(cè)試的分布式集群平臺(tái),其中三臺(tái)計(jì)算節(jié)點(diǎn)(Inter 4核,8 GB內(nèi)存,CentOS 7操作系統(tǒng)),一臺(tái)主控節(jié)點(diǎn)(Inter 2核,2 GB內(nèi)存,CentOS 7操作系統(tǒng))。
表2展示了本文提出的FBSVD、VBSVD以及傳統(tǒng)幀差法針對(duì)A-4的準(zhǔn)確率和檢測(cè)時(shí)間結(jié)果,圖5展示了3種檢測(cè)算法在路段A的不同數(shù)據(jù)集的處理時(shí)間對(duì)比。結(jié)果表明,VBSVD算法與傳統(tǒng)幀差法具有相同的檢測(cè)準(zhǔn)確率,VBSVD算法比FBSVD算法準(zhǔn)確率高3.3%;VBSVD算法比傳統(tǒng)幀差法檢測(cè)速度快510%,傳統(tǒng)幀差法比FBSVD快252%。
表2 傳統(tǒng)幀差法、FBSVD、VBCVD測(cè)試A-4的結(jié)果表
圖5 傳統(tǒng)幀差法、FBSVD、VBCVD測(cè)試路段A的不同數(shù)據(jù)集的時(shí)間對(duì)比
算法檢測(cè)車輛/輛準(zhǔn)確率/%時(shí)間/s幀差法68794.62528.9FBSVD67292.56329.3VBSVD68794.6462.3
圖6 傳統(tǒng)幀差法、FBSVD、VBCVD測(cè)試路段B的不同數(shù)據(jù)集的時(shí)間對(duì)比
表3展示了本文提出的FBSVD、VBSVD以及傳統(tǒng)幀差法針對(duì)B-4的準(zhǔn)確率和檢測(cè)時(shí)間結(jié)果。對(duì)于路段B的不同數(shù)據(jù)集,3種檢測(cè)算法的處理時(shí)間對(duì)比如圖6所示。結(jié)果表明,傳統(tǒng)幀差法與VBSVD算法具有相同的檢測(cè)準(zhǔn)確率,傳統(tǒng)幀差法比FBSVD準(zhǔn)確率高0.9%;VBSVD算法比傳統(tǒng)幀差法檢測(cè)速度快547%,傳統(tǒng)幀差法比FBSVD快251%。
表4 VBSVD算法測(cè)試路段A的不同測(cè)試集的結(jié)果表
表5 VBSVD算法測(cè)試路段B的不同測(cè)試機(jī)的結(jié)果表
表5展示了VBSVD算法針對(duì)路段A的不同測(cè)試數(shù)據(jù)集的檢測(cè)時(shí)間和檢測(cè)準(zhǔn)確率結(jié)果。表6展示了本文提出的VBSVD針對(duì)路段B的不同測(cè)試數(shù)據(jù)集的檢測(cè)時(shí)間和檢測(cè)準(zhǔn)確率結(jié)果。
圖7展示了對(duì)于數(shù)據(jù)集B-4,在不同CPU使用數(shù)量的情況下,VBSVD算法相對(duì)于傳統(tǒng)幀差法的處理加速比。
圖7 VBSVD針對(duì)不同數(shù)據(jù)集B-4使用在不同CPU核數(shù)情況下的加速比
實(shí)驗(yàn)結(jié)果表明,本文提出的VBSVD算法比傳統(tǒng)幀差法檢測(cè)速度平均快528%,主要原因是:VBSVD算法充分利用集群中的計(jì)算節(jié)點(diǎn)的CPU和內(nèi)存資源,采用分布式多路檢測(cè)的方式提升檢測(cè)速度。傳統(tǒng)幀差法比FBSVD算法比快251%,主要原因是:FBSVD算法對(duì)視頻幀進(jìn)行切割,導(dǎo)致了時(shí)間消耗。
實(shí)驗(yàn)結(jié)果分析證明:視頻文件具有不易切分的特點(diǎn),宜將視頻整體處理;VBSVD算法使用的分布式集群中CPU數(shù)量越多提升的檢測(cè)速度越明顯,當(dāng)CPU核的數(shù)量為待處理數(shù)據(jù)集的1/3或1/2時(shí),效果最好。
針對(duì)大規(guī)模交通視頻下的批處理車流量檢測(cè)存在計(jì)算開銷大以及檢測(cè)時(shí)間過長的問題,本文通過對(duì)Apache Spark的研究,并將Spark應(yīng)用到車流量檢測(cè)當(dāng)中,實(shí)現(xiàn)了批量交通視頻的車流量檢測(cè)并行化。相對(duì)于傳統(tǒng)檢測(cè)方法,本文提出的VBSVD算法能依靠分布式集群的計(jì)算節(jié)點(diǎn)同時(shí)處理批量交通視頻,完成檢測(cè)任務(wù)。經(jīng)實(shí)驗(yàn)表明,VBSVD算法簡單可行,準(zhǔn)確率高,檢測(cè)速度快,為檢測(cè)批量交通視頻提供了較好的解決方案。
[1]TianB,YaoQ,GuY,etal.Videoprocessingtechniquesfortrafficflowmonitoring:Asurvey[A].IEEEInternationalConferenceonIntelligentTransportationSystems[C]. 2011, 1103-1108.
[2]PerkasaO,WidyantoroDH.Video-basedsystemdevelopmentforautomatictrafficmonitoring[A].IEEEInternationalConferenceonElectricalEngineering&ComputerScience[C]. 2014,240-244.
[3] 張 玲, 陳麗敏, 何 偉,等. 基于視頻的改進(jìn)幀差法在車流量檢測(cè)中的應(yīng)用[J]. 重慶大學(xué)學(xué)報(bào):自然科學(xué)版, 2004, 27(5):31-33.
[4] 張 詠, 李太君, 李枚芳. 利用改進(jìn)的背景差法進(jìn)行運(yùn)動(dòng)目標(biāo)檢測(cè)[J]. 現(xiàn)代電子技術(shù), 2012, 35(8):74-77.
[5] 楊國亮, 王志良, 牟世堂,等. 一種改進(jìn)的光流算法[J]. 計(jì)算機(jī)工程, 2006, 32(15):187-188.
[6]HanX,GaoY,LuZ,etal.Researchonmovingobjectdetectionalgorithmbasedonimprovedthreeframedifferencemethodandopticalflow[A].IEEEInternationalConferenceonInstrumentationandMeasurement,Computer,Communication,andControl[C]. 2016: 580-584.
[7]AbdullahT,AnjumA,TariqMF,etal.Trafficmonitoringusingvideoanalyticsinclouds[A].IEEE/ACM7thInternationalConferenceonUtilityandCloudComputing[C]. 2014: 39-48.
[8]AnjumA,AbdullahT,TariqM,etal.Videostreamanalysisinclouds:anobjectdetectionandclassificationframeworkforhighperformancevideoAnalytics[J].IEEETransactionsonCloudComputing, 2016 (99):1-14.
[9]DeanJ,GhemawatS.Simplifieddataprocessingonlargeclusters[J].ProceedingsofOperatingSystemsDesignandImplementation(OSDI), 2004, 51(1):107-113.
[10]ZahariaM,ChowdhuryM,DasT,etal.Resilientdistributeddatasets:afault-tolerantabstractionforin-memoryclustercomputing[A].UsenixConferenceonNetworkedSystemsDesignandImplementation[C].USENIXAssociation, 2012.
[11]YangS,WuB.Largescalevideodataanalysisbasedonspark[A].IEEEInternationalConferenceonCloudComputingandBigData[C]. 2015:209-212.