朱金加 楚栓成
摘要:針對(duì)當(dāng)前視頻監(jiān)控系統(tǒng)普遍存在的視頻數(shù)據(jù)時(shí)間冗余多、系統(tǒng)資源利用率低等缺點(diǎn),提出一種合理控制視頻采集和錄制的新算法。該算法以圖像幀間相關(guān)度分析為基礎(chǔ),能及時(shí)準(zhǔn)確地捕獲監(jiān)控區(qū)域的細(xì)節(jié)變化,并有效節(jié)約監(jiān)控系統(tǒng)的硬盤資源。經(jīng)過(guò)軟件調(diào)試和指定平臺(tái)上的多次測(cè)試,證實(shí)該算法是一種性能穩(wěn)定、行之有效的控制算法,整個(gè)監(jiān)控系統(tǒng)的資源利用率也有所提高。
關(guān)鍵詞關(guān)鍵詞:視頻數(shù)據(jù)時(shí)間冗余;幀相關(guān)度;視頻采集;資源利用率
DOIDOI:10.11907/rjdk.143836
中圖分類號(hào):TP311.5
文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào)文章編號(hào):16727800(2015)002007103
基金項(xiàng)目基金項(xiàng)目:國(guó)家自然科學(xué)基金項(xiàng)目(61162005)
作者簡(jiǎn)介作者簡(jiǎn)介:朱金加(1983-),男,湖北隨州人,北方民族大學(xué)電信學(xué)院碩士研究生,研究方向?yàn)樾盘?hào)檢測(cè)與信息處理;楚栓成(1963-),男,河南滎陽(yáng)人,北方民族大學(xué)電信學(xué)院副教授、高級(jí)工程師,研究方向?yàn)殡娮优c無(wú)線通信技術(shù)。
0引言
視頻監(jiān)控系統(tǒng)現(xiàn)已廣泛應(yīng)用于收費(fèi)站、大型超市、倉(cāng)庫(kù)等地,監(jiān)控管理員可通過(guò)觀看各監(jiān)控點(diǎn)的視頻發(fā)現(xiàn)安全隱患。這類監(jiān)控系統(tǒng)雖十分便利,但也存在如下問(wèn)題:系統(tǒng)連續(xù)采集、錄制,硬盤連續(xù)不斷地被寫入實(shí)時(shí)采集的視頻數(shù)據(jù),而在瀏覽監(jiān)控錄像時(shí),如果監(jiān)控畫面長(zhǎng)時(shí)間“無(wú)異常出現(xiàn)”,則必須多次快進(jìn)直到出現(xiàn)新畫面。在此過(guò)程中,存儲(chǔ)設(shè)備損耗很大。而且,監(jiān)控系統(tǒng)硬盤屬于高消耗設(shè)備,應(yīng)提高利用率。
事實(shí)上,大多數(shù)時(shí)候監(jiān)控區(qū)域是安全狀態(tài),采集系統(tǒng)和錄像系統(tǒng)這一階段處理的是無(wú)應(yīng)用價(jià)值的數(shù)據(jù)。有價(jià)值的信息往往是監(jiān)控區(qū)域內(nèi)“有異?!钡募?xì)節(jié)變化。因此,筆者摸索出一種能減少資源損耗的控制算法,以期提高系統(tǒng)的資源利用率和實(shí)用性。
1算法設(shè)計(jì)
1.1算法功能概述
算法的目標(biāo)是避免無(wú)效視頻信息的錄入,減少設(shè)備損耗,提高系統(tǒng)整體效率。算法設(shè)計(jì)的重難點(diǎn)是:根據(jù)經(jīng)驗(yàn)數(shù)據(jù)提取控制參數(shù),對(duì)監(jiān)控系統(tǒng)的視頻采集、錄制進(jìn)行合理控制。
一般而言,監(jiān)控系統(tǒng)有固定的觀察區(qū),有人闖入或發(fā)生危險(xiǎn)時(shí),必然可以看到監(jiān)控畫面某部分出現(xiàn)連續(xù)變化,此變化速度通常低于采集設(shè)備的捕獲速度。例如陌生人進(jìn)入房間拿東西然后走開,正常情況下這一過(guò)程總能被及時(shí)捕獲,也即人在觀看監(jiān)控畫面或事后觀看錄像時(shí)總能從畫面上發(fā)現(xiàn)有“異?!钡男畔?,因此監(jiān)控系統(tǒng)的視頻數(shù)據(jù)必然存在時(shí)間冗余。
根據(jù)這一經(jīng)驗(yàn),將一段時(shí)間間隔內(nèi)圖像幀間變化較小甚至“長(zhǎng)期靜止”的部分視為冗余數(shù)據(jù)(稱為“時(shí)間冗余引起的視覺冗余\[1\]”),將變化稍大的各連續(xù)幀保留下來(lái),再按時(shí)序?qū)懭胗脖P,最終得到的錄像則是經(jīng)“去時(shí)間冗余”處理的幀序列。硬盤空間將因此得到高效利用,驅(qū)動(dòng)模塊和傳輸模塊的資源損耗也將降低。
上述方法有兩個(gè)要點(diǎn):一是錄像結(jié)果不影響正常觀看,二是要根據(jù)環(huán)境靈活設(shè)置和調(diào)整算法中的若干閾值。
1.2算法原理設(shè)計(jì)
(1)一般狀態(tài)。系統(tǒng)開機(jī)(設(shè)為0時(shí)刻)即開始采集現(xiàn)場(chǎng)圖像信息,系統(tǒng)將其處理成數(shù)字化的圖像信號(hào),此圖像信號(hào)放入緩存(f_0),同時(shí)寫入硬盤(m_0)作為稍后的參考數(shù)據(jù)。在一段時(shí)間后(假設(shè)為t時(shí)刻),將最近一次采集到的幀(即緩存中棧頂數(shù)據(jù)f_t)與最初(0時(shí)刻)采集的幀(m_0)做相關(guān)度運(yùn)算,即使用矩陣相關(guān)性取得圖像幀的差異\[3\],再取其標(biāo)量數(shù)值e_0。
若e_0低于閾值(設(shè)定w),則認(rèn)為監(jiān)控畫面無(wú)變化,僅需保留硬盤初始寫入的圖像數(shù)據(jù)(m_0)作為這一段時(shí)間內(nèi)的“錄像”,也即錄像暫停;否則,系統(tǒng)連續(xù)向硬盤寫入圖像數(shù)據(jù)(從m_0到m_t)。顯然,“錄像”時(shí)間短于真實(shí)監(jiān)控時(shí)間。由于t時(shí)間短,算法的時(shí)間復(fù)雜度低,故整個(gè)過(guò)程中時(shí)間延遲很小,不會(huì)影響系統(tǒng)的實(shí)時(shí)性。
(2)省電狀態(tài),即“休息”狀態(tài)。如果在相當(dāng)長(zhǎng)的時(shí)間內(nèi)(設(shè)為d,d=10×t)監(jiān)控區(qū)域沒有“異?!保瑢和2杉〞和r(shí)長(zhǎng)取5×t)。在此過(guò)程中,采集和錄像進(jìn)程完全被掛起?!靶菹ⅰ苯Y(jié)束后,監(jiān)控系統(tǒng)的采集和錄像進(jìn)程進(jìn)入就緒態(tài),經(jīng)過(guò)t間隔后,將緩存中的最新圖像幀與硬盤最近一次寫入的幀做比較。若比較結(jié)果超出閾值,采集和錄像同時(shí)進(jìn)入運(yùn)行態(tài),即“一般狀態(tài)”。直到再次出現(xiàn)d時(shí)長(zhǎng)的“靜止”,并進(jìn)入“休息”狀態(tài),如此循環(huán)。
1.3流程設(shè)計(jì)
根據(jù)上文所述,避免無(wú)效采集從而減少讀寫硬盤的時(shí)間是流程設(shè)計(jì)的關(guān)鍵。
具體的時(shí)間閾值t以及圖像差運(yùn)算的閾值w,應(yīng)根據(jù)具體應(yīng)用環(huán)境進(jìn)行調(diào)整:人流量大或環(huán)境復(fù)雜的地方宜使用較短時(shí)間t和較大w,人流量小的環(huán)境應(yīng)預(yù)留較長(zhǎng)的t和保持較小的w。算法流程如圖1所示。
圖1算法流程
2算法實(shí)驗(yàn)平臺(tái)
算法能否發(fā)揮作用,需要在實(shí)驗(yàn)平臺(tái)上用具體程序?qū)崿F(xiàn),再經(jīng)過(guò)反復(fù)測(cè)試、評(píng)估才能驗(yàn)證算法的可行性。
筆者利用S5PV210作主控芯片,附加必要的外設(shè);采用1200線模擬攝像頭(又稱槍機(jī))做視頻采集設(shè)備;使用VGA接口輸出,從而可用電腦顯示器觀察監(jiān)控畫面;此外,采用普通機(jī)械式4T容量的監(jiān)控硬盤存儲(chǔ)錄像。
視頻監(jiān)控系統(tǒng)是一個(gè)復(fù)雜的工程,其中高速電路的設(shè)計(jì)、芯片選型、視頻編碼以及算法優(yōu)化、編程語(yǔ)言的選擇等共同制約著程序的健壯性和執(zhí)行速度,最終影響實(shí)驗(yàn)結(jié)果,因此可能會(huì)出現(xiàn)畫面清晰度不夠或視頻延遲等現(xiàn)象。
3算法實(shí)現(xiàn)和驗(yàn)證
3.1技術(shù)要點(diǎn)
在確定的平臺(tái)上,算法的性能直接與數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)、程序語(yǔ)言的運(yùn)行效率等相關(guān)。因此,設(shè)計(jì)過(guò)程中必須作大量?jī)?yōu)化。
(1)在程序設(shè)計(jì)中,對(duì)監(jiān)控區(qū)的亮度信號(hào)必須根據(jù)實(shí)際環(huán)境設(shè)定合適的閾值,以減少背景抖動(dòng)帶來(lái)的錯(cuò)誤判斷。具體取值要求反復(fù)實(shí)驗(yàn)查看效果來(lái)確定。
(2)錄像系統(tǒng)暫停過(guò)程中,要求采集設(shè)備每t時(shí)間存儲(chǔ)圖像到緩存并與硬盤參考圖像做相關(guān)度運(yùn)算。因攝像頭背景相對(duì)固定,所以相關(guān)度計(jì)算可采用較簡(jiǎn)單的幀間減法\[1\]實(shí)現(xiàn)??紤]到S5PV210開發(fā)板支持H.264編碼,所以決定應(yīng)用此編碼,以體現(xiàn)出優(yōu)越性。數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)中,幀緩存采用棧實(shí)現(xiàn)。
(3)系統(tǒng)“休息”時(shí),計(jì)數(shù)器繼續(xù)工作,系統(tǒng)“休息”結(jié)束后歸零。程序設(shè)計(jì)中,用多線程技術(shù)監(jiān)聽外界變化和保存現(xiàn)場(chǎng)。
3.2關(guān)鍵部分設(shè)計(jì)
算法使用VC++7.0和jdk7.0環(huán)境共同實(shí)現(xiàn)??紤]到各功能模塊對(duì)實(shí)時(shí)性和內(nèi)存控制的不同要求,實(shí)時(shí)控制部分用C++及OpenCV2.4工具輔助實(shí)現(xiàn),其它用JAVA和JMF2.1實(shí)現(xiàn),涉及混編的部分采用JNI技術(shù)。
在調(diào)試階段,用斷點(diǎn)調(diào)試方法觀察計(jì)數(shù)器變量n的變化是否與設(shè)計(jì)邏輯相符,以驗(yàn)證對(duì)錄像的控制是否準(zhǔn)確。
調(diào)試成功后經(jīng)交叉編譯并移植到預(yù)裝有Linux2.6的監(jiān)控系統(tǒng)板上,然后開始對(duì)系統(tǒng)進(jìn)行全面測(cè)試,包括硬件的工作穩(wěn)定性、錄像清晰度等。以下對(duì)關(guān)鍵部分編程技巧進(jìn)行闡述。
3.2.1視頻中圖像幀獲取
該步驟使用C++實(shí)現(xiàn):首先建立通信環(huán)境。
String str_Cam="vfw:Microsoft WDM Image Capture (Win32):0"; //載入設(shè)備驅(qū)動(dòng)程序
CaptureDeviceInfo di_Cam= CaptureDeviceManager.getDevice(str_Cam); //搜索采集設(shè)備
MediaLocator ml = di_Cam.getLocator();//建立數(shù)據(jù)源對(duì)象
try{
Player player=Manager.createRealizedPlayer(ml);
player.start();//取得圖像流,線程啟動(dòng)
}catch(Exception e){...}
//線程資源準(zhǔn)備就緒,開始讀幀數(shù)據(jù)到緩沖區(qū)
FrameGrabbingControl fgc=
(FrameGrabbingControl)player.getControl("javax.media.control.FrameGrabbingControl");
...;//此處省略了C++內(nèi)存環(huán)境異常等處理
Buffer bufFrame= fgc.grabFrame(); //此處調(diào)用抓幀方法,先捕獲一幀數(shù)據(jù),將其讀入緩存
BufferToImage btoi=new BufferToImage((VideoFormat) buf.getFormat()); //該幀存圖片
3.2.2相鄰圖像幀相關(guān)度計(jì)算
使用JAVA語(yǔ)言和OpenCV2.4實(shí)現(xiàn):在t間隔后,取最近一次采集的圖像幀讀入緩存,再與硬盤最新幀進(jìn)行比較,取得視頻幀差并求圖像幀間相關(guān)度,判斷是否超出閾值\[2\]。
int count=0; //用10次計(jì)數(shù)獲得“10×t間隔”時(shí)間
while(count<10){
for(i=0;i for(j=0;j ...;//此處省略了幀差法中step等變量的定義,詳見參考書目\[3,4\] if(abs( data1\[i*step+j+0\]-data0\[i*step+j+0\])>e_t) //灰度差超閾值,監(jiān)控區(qū)有異常 {break;...;} //跳出幀間比較;進(jìn)入常態(tài)模式,向硬盤寫入每一幀 else{...} //幀間相關(guān)度高,監(jiān)控區(qū)安全;接著檢查下一像素點(diǎn) } //不需要把緩存幀寫入硬盤,繼續(xù)比較下一像素點(diǎn) }count++; //計(jì)時(shí)間隔遞增 }//若10倍t間隔內(nèi)未見異常,則轉(zhuǎn)入“休息”態(tài),系統(tǒng)的采集與錄像功能掛起 3.3實(shí)驗(yàn)結(jié)果 所得錄像數(shù)據(jù)寫入硬盤,對(duì)應(yīng)不同時(shí)間的兩幀,觀看錄像時(shí)取得的對(duì)應(yīng)圖片并作比較。兩幀對(duì)應(yīng)兩幅圖片。為考察算法運(yùn)行效果,特選擇兩種極端情形進(jìn)行測(cè)試: 第一幅圖,顯示的是靜止的瓶子和旁邊靜坐著的人,表示系統(tǒng)暫時(shí)“休息”中。由于畫面中塑料瓶和人都持續(xù)靜止了一段時(shí)間,采集和錄像部分將被掛起(時(shí)間設(shè)定為5個(gè)t間隔),屆時(shí)系統(tǒng)停止向硬盤寫入圖像幀,只有針對(duì)t的計(jì)時(shí)器仍在工作。 第二幅圖,某時(shí)刻突然取走塑料瓶,相比前一幀(從硬盤最近寫入的棧獲取)此時(shí)畫面只剩下靜坐著的人。系統(tǒng)檢測(cè)到當(dāng)前緩存幀與硬盤中最新一幀差異很大,應(yīng)當(dāng)判定監(jiān)控區(qū)域有異常,立即進(jìn)入連續(xù)采集并錄像的狀態(tài)。此時(shí)計(jì)數(shù)器置零,系統(tǒng)等待下一個(gè)t間隔的循環(huán)檢查。 根據(jù)程序調(diào)試的打印n值結(jié)果可知:系統(tǒng)的計(jì)數(shù)器變化與采集狀態(tài)能夠?qū)?yīng),說(shuō)明系統(tǒng)已能按照算法的設(shè)計(jì)流程判斷采集圖像的最佳時(shí)機(jī),并通過(guò)與閾值做差運(yùn)算最終實(shí)現(xiàn)對(duì)采集和錄像模塊的控制;多次實(shí)驗(yàn)過(guò)程中觀看畫面無(wú)跳躍,基本捕捉到了異常并錄像。 4結(jié)語(yǔ) 從實(shí)驗(yàn)結(jié)果看,初步實(shí)現(xiàn)了減少采集次數(shù)和有效控制讀寫硬盤時(shí)間這一目的。限于筆者圖像處理經(jīng)驗(yàn)上的不足,本文算法仍存在局限性:攝像頭對(duì)監(jiān)控區(qū)域內(nèi)不同位置或方向的分辨能力不同,視野邊界部分和正對(duì)鏡頭的近距離區(qū)域在發(fā)生同樣程度變化時(shí),系統(tǒng)未能準(zhǔn)確作出反應(yīng)。此類不足,降低了算法的實(shí)用性。本文所述研究?jī)?nèi)容旨在拋磚引玉,如何克服弊端并提高系統(tǒng)的資源利用率,有待后期進(jìn)一步研究與改進(jìn)。 參考文獻(xiàn)參考文獻(xiàn): \[1\]HELD CORNELIUS,et al.Intelligent video surveillance\[J\].Computer,2012,45(3):8384. \[2\]王建文,陸璐.視頻監(jiān)控的異常報(bào)警機(jī)制\[J\].計(jì)算機(jī)與數(shù)字工程,2007(5):121123. \[3\]陸系群,陳純.圖像處理原理、技術(shù)與算法\[M\].杭州:浙江大學(xué)出版社,2001. \[4\]章毓晉.圖像處理和分析\[M\].北京:清華大學(xué)出版社,2000. \[5\]劉宏飛.基于JMF的視頻醫(yī)療系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)\[D\].西安:西北大學(xué),2004. 責(zé)任編輯(責(zé)任編輯:黃健)