李 顏,仇洪冰,李燕龍
(桂林電子科技大學(xué) 信息與通信學(xué)院,廣西 桂林541004)
近年來,隨著我國公路交通事業(yè)的迅猛發(fā)展,機(jī)動車輛的規(guī)模和流量不斷增大,由此引發(fā)的車輛違章和肇事現(xiàn)象給交通監(jiān)管部門的工作帶來了巨大挑戰(zhàn)。傳統(tǒng)的車輛檢索[1]方法一般有兩種:一種是通過人工觀看交通監(jiān)控視頻來搜索和追蹤違章肇事車輛,該方法不僅效率低下,而且長期觀看監(jiān)控視頻會引起工作人員的視覺疲勞,造成誤判或遺漏重要信息等問題;另一種是利用車牌識別系統(tǒng)來搜索監(jiān)控視頻中出現(xiàn)的違章肇事車輛以獲取車牌號碼,受到單機(jī)硬件條件的限制,傳統(tǒng)的車牌識別系統(tǒng)無法高效、快速地處理大型監(jiān)控視頻數(shù)據(jù)。隨著監(jiān)控視頻數(shù)據(jù)量的不斷增長,如何高效、快速地分析和處理交通監(jiān)控數(shù)據(jù)成為一個亟需解決的問題[2]。
云計算是一種新興的高效分布式計算模型,能有效解決大型數(shù)據(jù)的存儲和處理問題[3]。Hadoop 作為開源的云計算平臺,憑借其強(qiáng)大的系統(tǒng)伸縮性、廉價性以及在大型數(shù)據(jù)處理與分析能力上的顯著優(yōu)勢被廣泛應(yīng)用于各個領(lǐng)域。例如,文獻(xiàn)[4]提出了一種基于Hadoop 的快速視頻處理方法,其在集群下執(zhí)行運動檢測比單機(jī)節(jié)省25%的時間;文獻(xiàn)[5]提出一種基于Hadoop 架構(gòu)的視頻監(jiān)控系統(tǒng),解決了大型監(jiān)控數(shù)據(jù)的存儲問題;文獻(xiàn)[6]利用MapReduce 實現(xiàn)了分布式視頻轉(zhuǎn)碼,大大提高了視頻的轉(zhuǎn)碼效率;文獻(xiàn)[7]提出了一種基于MapReduce 的分布式圖像檢索方法,用實驗證明了分布式檢索的效率遠(yuǎn)高于集中式檢索。
以上研究工作均表明基于Hadoop 的分布式處理技術(shù)能有效提高系統(tǒng)的處理效率。鑒于該技術(shù)在視頻檢索領(lǐng)域尚未得到廣泛應(yīng)用,本文提出一種結(jié)合Hadoop 平臺、車牌識別技術(shù)和FFMPEG 的分布式視頻車輛檢索方法,用于解決大型交通監(jiān)控視頻[5]的高效處理與檢索問題。
Apache Hadoop[8]是一個開源的分布式計算框架,它提供了一個簡單的編程模型,讓用戶能通過跨集群的計算機(jī)完成大型數(shù)據(jù)集的分布式處理任務(wù)。用戶可利用該框架在大量廉價計算機(jī)上構(gòu)建一個具有高可靠性和良好擴(kuò)展性的分布式處理系統(tǒng)。HDFS 存儲系統(tǒng)和MapReduce 計算模型是Hadoop平臺的兩大核心技術(shù),用于完成大規(guī)模數(shù)據(jù)集的分布式存儲和并行計算。
HDFS[9]作為Hadoop 平臺的分布式文件系統(tǒng),具有高吞吐量數(shù)據(jù)訪問能力、高容錯性、高可靠性和高擴(kuò)展性等特點,可用于存儲海量級別的數(shù)據(jù)(Tbyte 甚至Pbyte 級)。
MapReduce[10]是一種用于處理大規(guī)模數(shù)據(jù)集的計算模型,它可以將一個應(yīng)用程序分解為多個并行計算指令,跨大量的計算節(jié)完成數(shù)據(jù)集的分布式計算。用戶通過編寫Map 和Reduce 兩個函數(shù)來完成對應(yīng)的邏輯功能,用以實現(xiàn)數(shù)據(jù)的分布式處理,其編程模型如圖1 所示。
圖1 MapReduce 編程模型
車牌識別技術(shù)結(jié)合了數(shù)字圖像處理、模式識別、計算機(jī)視覺等高科技技術(shù),主要通過車牌定位、字符分割、字符識別3個階段來完成車輛牌照的提取和識別。本文設(shè)計的車牌識別方法為:首先采用Sobel 邊緣檢測[11]與水平/垂直投影分析相結(jié)合的方法將車牌從原始圖像中定位出來,然后利用Radon變換對車牌進(jìn)行傾斜校正[12],再通過垂直投影法完成車牌字符的分割,最后使用模板匹配法[13]將車牌字符一一識別出來,具體識別流程如圖2 所示。
圖2 車牌識別流程圖
FFMPEG[14]是一個集音頻/視頻采集、編解碼、格式轉(zhuǎn)換等功能于一體的開源多媒體框架,它支持多種傳輸協(xié)議、媒體格式和各種音/視頻編解碼標(biāo)準(zhǔn),并提供一個統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)用于存儲從多媒體中提取出的信息[15]。FFMPEG 可在Linux和Window 系統(tǒng)下運行,支持MPEG、AVI、FLV 等40 多種編碼標(biāo)準(zhǔn),以及Matroska、GXF、MOV 等90 多種解碼標(biāo)準(zhǔn),能夠?qū)σ纛l或視頻進(jìn)行快速的格式轉(zhuǎn)換、無損切割、合并以及抓圖等操作,其基本使用語法如下:
ffmpeg[options]{[input_options]-i input_file}…{[output_options]output_file}
此外,F(xiàn)FMPEG 還提供了大量命令參數(shù),能夠滿足用戶對視頻的各種處理需求,用戶可根據(jù)需要設(shè)置不同參數(shù)以獲得相應(yīng)的處理結(jié)果。本文中采用FFMPEG 對監(jiān)控視頻進(jìn)行自動分割[16]和視頻幀提?。?7]。
視頻在HDFS 上是以Block(塊)為單位進(jìn)行存儲的,Block 的大小可根據(jù)需求靈活配置,默認(rèn)為64 Mbyte。當(dāng)視頻超出 Block 的大小(如64 Mbyte)時,Hadoop 將會以字節(jié)(byte)為單位將視頻切分成多個小于64 Mbyte 的Block 存儲于各節(jié)點中,由此會出現(xiàn)如圖3 所示的情況。
圖3 視頻數(shù)據(jù)切分問題
當(dāng)出現(xiàn)如上情況時,對視頻分塊進(jìn)行幀提取會引發(fā)如下問題:1)缺少視頻頭數(shù)據(jù),F(xiàn)FMPEG 解碼器無法初始化;2)缺少關(guān)鍵幀I 幀,導(dǎo)致相鄰的P 幀和B 幀無法提取;3)幀數(shù)據(jù)不完整或已損壞,導(dǎo)致提取失敗。
為解決該問題,本文在幀提取之前先用FFMPEG 將監(jiān)控視頻自動分割成多個小于Block 的視頻分塊,再對視頻分塊進(jìn)行幀提取。采用此方法的好處在于,既能保證每一個視頻分塊都包含完整的頭數(shù)據(jù),又能避免GOP 或幀數(shù)據(jù)被切斷的問題,并且視頻被切分成多個分塊后,能更充分地利用MapReduce 的分布式處理優(yōu)勢,大大提高了視頻幀提取的效率。此外,F(xiàn)FMPEG 帶有按時間切分和自動編號功能,可為后續(xù)實現(xiàn)視頻時間定位提供便利。
在此通過JAVA 提供的Runtime 類來調(diào)用本地FFMPEG 命令實現(xiàn)視頻的自動分割。調(diào)用的視頻分割命令格式如下:
ffmpeg-ss StartTime-i VideoPath-vcodec copy-acodec copy-t DurTime OutputPath_Num
其中,StartTime 為視頻分割的起始時間,VideoPath 為目標(biāo)視頻,DurTime 為分割間隔,OutputPath_Num 為視頻分段編號。
監(jiān)控視頻根據(jù)時長間隔DurTime 進(jìn)行連續(xù)分割,并按順序編號,DurTime 與視頻編號OutputPath_Num 將作為后續(xù)時間定位的輸入?yún)?shù)。視頻分割完成后,程序自動調(diào)用Hadoop shell 將其上傳至HDFS。
監(jiān)控視頻經(jīng)過分割處理后,由一段長視頻變成若干個時長相等的短視頻塊存儲于HDFS。在此采用MapReduce 框架對視頻塊進(jìn)行分布式幀提?。?],即將多個視頻塊分散到不同節(jié)點上進(jìn)行處理后再將結(jié)果匯總到HDFS。
在整個處理過程中,MapReduce 框架負(fù)責(zé)將視頻塊緩存到本地,然后通過JAVA Runtime 類中的exec(String cmd[])方法調(diào)用本地FFMPEG 命令對緩存視頻進(jìn)行幀提取,最后將提取出的圖像幀上傳至HDFS。執(zhí)行過程如圖4 所示。
圖4 視頻幀提取過程
其中,Map 的輸入Key_in 和Value_in 分別對應(yīng)于視頻分塊的文件名和視頻數(shù)據(jù)本身。當(dāng)Map 接收到Key_in 和Value_in后,將Value_in 緩存到目標(biāo)節(jié)點,并調(diào)用FFMPEG 執(zhí)行視頻幀提取操作,之后將提取出的圖像幀數(shù)據(jù)及其文件名分別寫入Value_out 和Key_out。調(diào)用的FFMPEG 命令格式為:
ffmpeg-i VideoPath-r FrameRate FileName_%3d.jpg
其中,VideoPath 為目標(biāo)視頻,F(xiàn)rameRate 為提幀頻率(幀/秒,f/s),F(xiàn)ileName_%3d 為圖像幀命名規(guī)則。提取的每一幀圖像以視頻編號加上圖像編號作為輸出文件名。例如,視頻切割間隔DurTime 為60 s,提幀頻率FrameRate 為5 f/s,則每一段視頻經(jīng)過幀提取后將輸出300 幀圖像,其中第5 段視頻提取出的第53 幀圖像命名為output05_053。
視頻經(jīng)過分割和幀提取操作后已經(jīng)轉(zhuǎn)換成帶特定編號的圖像幀。本文結(jié)合MapReduce 框架和車牌識別技術(shù)對圖像幀進(jìn)行分布式圖像識別,具體的Map 函數(shù)數(shù)據(jù)流設(shè)計如圖5 所示。
圖5 Map 數(shù)據(jù)流設(shè)計
其中,Map 函數(shù)用于實現(xiàn)車牌號識別和視頻時間定位兩個功能。
當(dāng)Map 從圖像幀中識別出車牌號碼時,立即獲取其幀編號并進(jìn)行計算,采用的計算公式為
式中:VideoTime 為最終定位結(jié)果;DurTime 為視頻切分間隔(s);VideoNum 為視頻分段編號;PictureNum 為圖像幀編號;FrameRate 為提幀頻率(f/s)。例如,分割間隔為60 s,提幀頻率為5 f/s,且從編號為output05_053 的圖像幀中識別出車牌號碼,則根據(jù)計算公式,該車輛出現(xiàn)在視頻4 分10 秒處。具體執(zhí)行流程如圖6 所示。
圖6 Map 執(zhí)行流程
Reduce 函數(shù)獲?。糑ey,Value >之后,合并相同的車牌號,將車輛出現(xiàn)時間排序后輸出到HDFS。Reduce 函數(shù)數(shù)據(jù)流設(shè)計如圖7 所示。
圖7 Reduce 數(shù)據(jù)流設(shè)計
在Linux 環(huán)境下,搭建由4 臺PC 組成Hadoop 集群,其中1 臺作為管理節(jié)點(Master),其余3 臺作為計算節(jié)點(Slave),并為每個節(jié)點安裝FFMPEG。Hadoop 集群節(jié)點配置情況如表1 所示。
表1 Hadoop 集群節(jié)點配置情況
上傳一段交通監(jiān)控視頻后,采用基于Hadoop 的分布式視頻檢索方法對車輛進(jìn)行檢索,其檢索結(jié)果如圖8 所示。由圖8 可知,檢索結(jié)果較為準(zhǔn)確。
圖8 視頻車輛檢索結(jié)果(截圖)
采用大小分別為100 Mbyte,500 Mbyte,1 000 Mbyte 的視頻進(jìn)行分布式幀提取測試,DurTime 設(shè)置為60 s,F(xiàn)rameRate 設(shè)置為5 f/s。分別測試幀提取在單機(jī)、1 個節(jié)點、2 個節(jié)點、3 個節(jié)點條件下的系統(tǒng)耗時,結(jié)果如圖9 所示。
圖9 視頻幀提取系統(tǒng)耗時
由圖9 可知,當(dāng)視頻大小在100 Mbyte 左右時,單機(jī)提取和分布式提取耗時接近,當(dāng)視頻超過500 Mbyte 時,分布式視頻幀提取速度要比單機(jī)提取快1 倍以上,并且隨著節(jié)點數(shù)增多和數(shù)據(jù)量增大,分布式提取的速度優(yōu)勢越來越明顯。在實際測試過程中,當(dāng)視頻大小達(dá)到2 Gbyte 時,單機(jī)提取出現(xiàn)了明顯的卡頓和死機(jī)現(xiàn)象,而分布式提取則運行穩(wěn)定且性能良好。
分別對100,500,1 000,2 000 幀包含車輛信息的隨機(jī)視頻幀進(jìn)行車輛檢索和時間計算,測試系統(tǒng)在單機(jī)、1 個節(jié)點、2個節(jié)點、3 個節(jié)點條件下的耗時,結(jié)果如圖10 所示。
圖10 車輛檢索系統(tǒng)耗時
由圖10 可知,在單機(jī)和一個節(jié)點情況下,車輛檢索的耗時接近,且單機(jī)檢索速度稍快,這是由于單機(jī)環(huán)境下省去了主機(jī)與節(jié)點間通信和數(shù)據(jù)交換的時間開銷。隨著節(jié)點數(shù)的增加,分布式檢索的速度顯著提升,并且視頻幀的數(shù)量越大,分布式檢索的優(yōu)勢越明顯。
仿真結(jié)果顯示,基于Hadoop 的分布式視頻車輛檢索方法能有效地從交通監(jiān)控視頻中檢索出車輛并定位其出現(xiàn)時間,而在大型視頻的檢索性能上也優(yōu)于傳統(tǒng)單機(jī)檢索方式。
本文設(shè)計了一種基于Hadoop 的分布式視頻車輛檢索方法,可高效、快速地從大型交通監(jiān)控視頻中檢索出過往車輛,并定位其在視頻中出現(xiàn)的時間。首先采用FFMPEG 將大型視頻分割成若干個視頻分塊,然后結(jié)合MapReduce 對視頻分塊進(jìn)行分布式幀提取,再使用車牌識別算法將視頻幀中包含的車牌號碼識別出來,最后計算該車輛在視頻中出現(xiàn)的時間。實驗結(jié)果顯示,相比于單機(jī)檢索方法,基于Hadoop 的分布式檢索方法大大提高了系統(tǒng)對大型視頻的處理能力,并且隨著節(jié)點數(shù)的增加,其檢索效率也大幅提升。
[1]朱麗英,梁辰,張鴻洲.基于運動目標(biāo)的監(jiān)控視頻檢索方法[J].計算機(jī)應(yīng)用與軟件,2011,28(12):96-98.
[2]徐鵬飛. 交通視頻監(jiān)控平臺軟件發(fā)展趨勢淺析[J]. 中國交通信息化,2012(5):82-83.
[3]陳康,鄭緯民. 云計算:系統(tǒng)實例與研究現(xiàn)狀幸[J]. Journal of Software,2009,20(5):1337-1348.
[4]TAN H,CHEN L. An approach for fast and parallel video processing on Apache Hadoop clusters[C]//Proc.2014 IEEE International Conference on Multimedia and Expo(ICME). [S.l.]:IEEE Press,2014:1-6.
[5]ZHOU L,LI Z,CHEN Y,et al.The video monitoring system based on big data processing[C]//Proc. 2014 7th International Conference on Intelligent Computation Technology and Automation(ICICTA).[S.l.]:IEEE Press,2014:865-868.
[6]SONG C,SHEN W,SUN L,et al. Distributed video transcoding based on MapReduce[C]//Proc. 2014 IEEE/ACIS 13th International Conference on Computer and Information Science(ICIS).[S.l.]:IEEE Press,2014:309-314.
[7]ZHANG J,LIU X,LUO J,et al. Dirs:distributed image retrieval system based on mapreduce[C]//Proe.2010 5th International Conference on Pervasive Computing and Applications(ICPCA).[S.l.]:IEEE Press,2010:93-98.
[8]Apache Hadoop[EB/OL].[2015-01-01]. http://hadoop.apache.org.
[9]AZZEDIN F. Towards a scalable HDFS architecture[C]//Proc.2013 International Conference on Collaboration Technologies and Systems(CTS).[S.l.]:IEEE Press,2013:155-161.
[10]DEAN J,GHEMAWAT S. MapReduce:simplified data processing on large clusters[J].Communications of the ACM,2008,51(1):107-113.
[11]袁春蘭,熊宗龍,周雪花,等.基于Sobel 算子的圖像邊緣檢測研究[J].激光與紅外,2009,39(1):85-87.
[12]吳麗麗,余春艷.基于Sobel 算子和Radon 變換的車牌傾斜校正方法[J].計算機(jī)應(yīng)用,2013,33(A01):220-222.
[13]顧晨勤,葛萬成.基于模板匹配算法的字符識別研究[J]. 通信技術(shù),2009(3):220-222.
[14]FFMPEG[EB/OL].[20150-01-01].http://ffmpeg.org/.
[15]LEI X,JIANG X,WANG C.Design and implementation of a realtime video stream analysis system based on FFMPEG[C]//2013 Fourth World Congress on Software Engineering(WCSE).[S.l.]:IEEE Press,2013:212-216.
[16]紀(jì)麗婷,趙柳,苑全兵,等. 視頻分割算法的研究[J]. 電子測試,2010(2):9-13.
[17]瞿中,高騰飛,張慶慶. 一種改進(jìn)的視頻關(guān)鍵幀提取算法研究[J].計算機(jī)科學(xué),2012,39(8):300-303.