楊云龍,孟利民(.浙江工業(yè)大學(xué) 信息工程學(xué)院,浙江 杭州 3003;.浙江省通信網(wǎng)技術(shù)應(yīng)用研究重點(diǎn)實(shí)驗(yàn)室,浙江 杭州 3003)
移動(dòng)監(jiān)控系統(tǒng)中設(shè)備端視頻軟件的設(shè)計(jì)與實(shí)現(xiàn)
楊云龍1,孟利民2
(1.浙江工業(yè)大學(xué) 信息工程學(xué)院,浙江 杭州 310023;2.浙江省通信網(wǎng)技術(shù)應(yīng)用研究重點(diǎn)實(shí)驗(yàn)室,浙江 杭州 310023)
提出了一種移動(dòng)視頻監(jiān)控系統(tǒng)中視頻數(shù)據(jù)處理軟件的設(shè)計(jì)方案。移動(dòng)監(jiān)控系統(tǒng)主要由前端移動(dòng)監(jiān)控設(shè)備、3G網(wǎng)絡(luò)、服務(wù)器、手機(jī)客戶端組成。給出了系統(tǒng)總體原理圖,主要分析了移動(dòng)監(jiān)控系統(tǒng)中視頻數(shù)據(jù)的采集、去抖動(dòng)處理、壓縮以及備份等設(shè)備端軟件設(shè)計(jì)部分。在去抖動(dòng)的過程中使用了改進(jìn)的灰度投影法,解決了傳統(tǒng)投影法中易受到移動(dòng)前景干擾的問題。通過實(shí)際測試驗(yàn)證了方案的可行性。
移動(dòng)監(jiān)控系統(tǒng);3G網(wǎng)絡(luò);視頻處理;去抖動(dòng)處理;灰度投影法
隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的發(fā)展和應(yīng)用,安全防范產(chǎn)品的逐漸豐富,“安防大眾化”已是大勢所趨,安全是一種需求,安全對(duì)于人們來說已是必不可少的商品[1]。視頻監(jiān)控系統(tǒng)在安防行業(yè)中具有重要地位。視頻監(jiān)控系統(tǒng)的發(fā)展經(jīng)歷了由模擬到數(shù)字、由錄像人工檢查到狀態(tài)智能分析、由實(shí)地操作到遠(yuǎn)程遙控的過程[2]。移動(dòng)通信系統(tǒng)已經(jīng)開始更新?lián)Q代,中國3家不同運(yùn)營商旗下基于不同標(biāo)準(zhǔn)的3G網(wǎng)絡(luò)也全面步入商用時(shí)代,同時(shí)隨著LTE(Long Term Evolution)技術(shù)的發(fā)展和4G標(biāo)準(zhǔn)化的來臨,基于新型系統(tǒng)的基礎(chǔ)網(wǎng)絡(luò)建設(shè)必將保持高速發(fā)展[3]。無線網(wǎng)絡(luò)的發(fā)展極大地促進(jìn)了移動(dòng)監(jiān)控系統(tǒng)的發(fā)展。移動(dòng)監(jiān)控系統(tǒng)不僅能夠擴(kuò)大監(jiān)控范圍,也能節(jié)約成本,甚至還能減少許多不必要的損失[4]。
移動(dòng)監(jiān)控系統(tǒng)的前端設(shè)備在采集視頻數(shù)據(jù)的過程中難免會(huì)產(chǎn)生抖動(dòng),所以電子穩(wěn)像技術(shù)對(duì)移動(dòng)監(jiān)控系統(tǒng)至關(guān)重要。目前的電子穩(wěn)像技術(shù)是利用電子設(shè)備和數(shù)字圖像處理技術(shù)相結(jié)合的方法,直接從像面上通過檢測被比較圖像與參考幀圖像的運(yùn)動(dòng)矢量,并對(duì)被比較圖像進(jìn)行運(yùn)動(dòng)補(bǔ)償,從而獲得清晰穩(wěn)定的視頻圖像序列[5]。視頻穩(wěn)像中最重要的一步是運(yùn)動(dòng)估計(jì),灰度投影法是一種比較常見的運(yùn)動(dòng)估計(jì)方法,它是利用圖像的整體信息進(jìn)行運(yùn)動(dòng)估計(jì),主要是利用相鄰兩幀圖像重合區(qū)域內(nèi)圖像信息分布相同的原理[6]。但是灰度投影法容易受到前景運(yùn)動(dòng)物體的影響。本文對(duì)灰度投影法進(jìn)行了改進(jìn),有效地減緩了前景運(yùn)動(dòng)物體對(duì)運(yùn)動(dòng)估計(jì)的影響。
移動(dòng)監(jiān)控系統(tǒng)主要由前端移動(dòng)監(jiān)控設(shè)備、3G無線網(wǎng)絡(luò)、服務(wù)器以及手機(jī)客戶端組成。系統(tǒng)總體結(jié)構(gòu)圖如圖1所示。

圖1 移動(dòng)監(jiān)控系統(tǒng)結(jié)構(gòu)圖
前端移動(dòng)監(jiān)控設(shè)備采集視頻數(shù)據(jù)并經(jīng)過壓縮后發(fā)送給服務(wù)器,供服務(wù)器管理人員分析。服務(wù)器按客戶端的要求將視頻壓縮數(shù)據(jù)發(fā)送給客戶端查看。
前端設(shè)備視頻軟件主要負(fù)責(zé)對(duì)視頻數(shù)據(jù)的采集、去抖動(dòng)、編碼以及存儲(chǔ)等工作。這些工作主要是由encode進(jìn)程完成。encode進(jìn)程包含了 Capture線程、Video線程和Write線程3個(gè)線程。
主線程首先創(chuàng)建4個(gè)同步對(duì)象,分別為hRendezvousCap、hRendezvousWriter、hRendezvousInit和hRendezvous Cleanup,然后創(chuàng)建Capture線程,Capture線程一旦創(chuàng)建完成,主線程就會(huì)馬上調(diào)用等待函數(shù)Rendezvous_meet(hRendezvousCap)函數(shù)進(jìn)入等待狀態(tài)。Capture線程的流程如圖2所示。

圖2 Capture線程流程圖
Capture線程首先通過調(diào)用Capture_detectVideoStd()函數(shù)獲得視頻數(shù)據(jù)類型。然后再通過調(diào)用VideoStd_getResolution()函數(shù)得到將要采集的視頻數(shù)據(jù)的分辨率,并將該分辨率傳給主線程。再調(diào)用等待函數(shù)Rendezvous_meet(hRendezvousCap),這次調(diào)用等待函數(shù)時(shí)Capture線程并不會(huì)進(jìn)入等待狀態(tài)而是將等待中的主線程喚醒。然后Capture線程會(huì)繼續(xù)調(diào)用Capture_create()函數(shù)創(chuàng)建視頻數(shù)據(jù)的采集對(duì)象。調(diào)用Resize_create()函數(shù)創(chuàng)建視頻數(shù)據(jù)的放縮對(duì)象。調(diào)用Framecopy_create()函數(shù)創(chuàng)建視頻數(shù)據(jù)的裁剪對(duì)象。Capture線程在完成了這些準(zhǔn)備工作后就會(huì)再次調(diào)用等待函數(shù)Rendezvous_meet(hRendezvousInit)等待其他線程到達(dá)預(yù)定的等待點(diǎn)。
主線程被Capture線程喚醒后會(huì)接著創(chuàng)建Video線程,并將視頻數(shù)據(jù)的分辨率參數(shù)傳給Video線程,然后調(diào)用Rendezvous_meet(hRendezvousWriter)等待函數(shù)進(jìn)入等待狀態(tài)。Video線程的流程圖如圖3所示。

圖3 Video線程流程圖
Video線程首先通過調(diào)用Engine_open()函數(shù)開啟編碼引擎。然后將視頻分辨率參數(shù)傳給Venc1_create()函數(shù)來創(chuàng)建兩個(gè)編碼對(duì)象hVe1、hVe2。hVe1與hVe2分別用來將352×288YUV420SP與720×576YUV420SP兩種格式的視頻數(shù)據(jù)編碼成H.264格式。然后Video線程會(huì)調(diào)用Venc1_getOutBufSize()函數(shù)獲得編碼器輸出數(shù)據(jù)參數(shù),并傳給主線程。再調(diào)用等待函數(shù)Rendezvous_meet(hRendezvousWriter)喚醒主線程。當(dāng)Video線程完成上述準(zhǔn)備工作后就會(huì)調(diào)用等待函數(shù)Rendezvous_meet(hRendezvousInit)等待其他線程到達(dá)預(yù)定的等待點(diǎn)。
被喚醒的主線程還會(huì)繼續(xù)創(chuàng)建Write線程,并將Video線程的兩個(gè)編碼器的輸出參數(shù)outBufSize1、outBufSize2傳給Write線程。Write線程的流程圖如圖4所示。

圖4 Write線程流程圖
Write線程首先將參數(shù)outBufSize1與outBufSize2傳給BufTab_create()函數(shù)申請(qǐng)兩組緩存區(qū)。這兩組緩存區(qū)用于接收Video線程傳來的兩路H.264數(shù)據(jù)。然后Write線程會(huì)調(diào)用函數(shù)createShm()創(chuàng)建一塊共享內(nèi)存。這塊共享內(nèi)存用于存儲(chǔ)由352x288YUV420SP格式數(shù)據(jù)編碼而來的H.264數(shù)據(jù),供數(shù)據(jù)發(fā)送程序讀取。在完成了上述準(zhǔn)備工作后,Write線程會(huì)調(diào)用等待函數(shù)Rendezvous_meet(hRendezvousInit)進(jìn)入等待狀態(tài)。
當(dāng)?shù)却瘮?shù)Rendezvous_meet(hRendezvousInit)被第三次調(diào)用時(shí),第三次調(diào)用等待函數(shù)的線程并不會(huì)進(jìn)入等待狀態(tài),而是喚醒前兩個(gè)正在等待的線程。
當(dāng)所有線程都被喚醒后就會(huì)同步進(jìn)入主循環(huán)。Capture線程負(fù)責(zé)采集視頻數(shù)據(jù)和視頻穩(wěn)像,Video線程負(fù)責(zé)視頻數(shù)據(jù)編碼,Write線程負(fù)責(zé)數(shù)據(jù)存盤和將數(shù)據(jù)寫入共享內(nèi)存。
Capture線程首先采集一幀736x576UYVY格式的數(shù)據(jù),然后對(duì)視頻數(shù)據(jù)進(jìn)行電子穩(wěn)像處理。得到穩(wěn)定的視頻數(shù)據(jù)后,通過調(diào)用Resize()函數(shù)改變穩(wěn)像后的視頻數(shù)據(jù)的分辨率和數(shù)據(jù)格式,并輸出兩路數(shù)據(jù),一路數(shù)據(jù)為352×288 YUV420SP格式,另一路數(shù)據(jù)為736×576YUV420SP格式。然后將352×288YUV420SP格式的視頻數(shù)直接傳給Video線程。將736×576YUV420SP格式的視頻先裁剪成720×576YUV420SP格式后再傳給Video線程。接著Capture線程判斷是否繼續(xù)采集下一幀視頻數(shù)據(jù),若是,則重復(fù)主循環(huán)中的內(nèi)容;若不是,則向其他線程發(fā)送結(jié)束信號(hào)并調(diào)用等待函數(shù)Rendezvous_meet(hRendezvousCleanup),等待其他線程一起進(jìn)行清理工作。
Video線程在進(jìn)入主循環(huán)后首先會(huì)將自己創(chuàng)建的兩組空buffer傳給Capture線程,用于Capture線程向Video線程傳輸數(shù)據(jù)。然后接收Capture線程傳來的兩路視頻數(shù)據(jù),并分別用編碼對(duì)象hVe1與hVe2將這兩路視頻數(shù)據(jù)編碼成H.264格式。然后接收Write線程傳過來的兩塊buffer,并將兩路H.264格式數(shù)據(jù)分別存儲(chǔ)于這兩塊buffer中,再通過FIFO_put()函數(shù)傳給Write線程。然后Video線程判斷是否繼續(xù)編碼工作,若是,則對(duì)下一幀數(shù)據(jù)重復(fù)主循環(huán)中的編碼工作;若不是,則向其他線程發(fā)送結(jié)束信號(hào)并調(diào)用等待函數(shù)Rendezvous_meet(hRendezvousCleanup),等待其他線程一起進(jìn)行清理工作。
Write線程進(jìn)入主循環(huán)后首先將兩塊空buffer傳給Video線程,用于Video線程向Write線程傳輸數(shù)據(jù)。然后接收Video線程傳來的兩路H.264數(shù)據(jù),第一路數(shù)據(jù)由352×288YUV420SP格式編碼而來,將該H.264數(shù)據(jù)寫到共享內(nèi)存中供發(fā)送程序發(fā)送給服務(wù)器;第二路數(shù)據(jù)由720×576YUV420SP格式編碼而來,將該數(shù)據(jù)寫到SD卡中用于備份,當(dāng)前幀處理結(jié)束。然后Write線程判斷是否繼續(xù)處理下幀數(shù)據(jù),若是,則重復(fù)主循環(huán)中的內(nèi)容;若不是,則向其他線程發(fā)送結(jié)束信號(hào)并調(diào)用等待函數(shù)Rendezvous_meet(hRendezvousCleanup),等待其他線程一起進(jìn)行清理工作。
當(dāng)?shù)却瘮?shù)Rendezvous_meet(hRendezvousCleanup)被第三次調(diào)用時(shí),調(diào)用它的線程并不會(huì)進(jìn)入等待狀態(tài),而是喚醒其他兩條正在等待的線程。然后三條線程同時(shí)進(jìn)行各自的清理工作,釋放各自申請(qǐng)的資源,然后結(jié)束各自的線程,程序結(jié)束。
Capture線程采集的視頻數(shù)據(jù)為736×576UYVY格式,由于移動(dòng)監(jiān)控設(shè)備在采集視頻數(shù)據(jù)時(shí)難免會(huì)產(chǎn)生抖動(dòng),因此必須對(duì)采集的視頻數(shù)據(jù)進(jìn)行電子穩(wěn)像處理。首先對(duì)當(dāng)前幀視頻圖像進(jìn)行直方圖均衡化處理,以提高圖像的對(duì)比度。然后對(duì)圖像進(jìn)行多分塊灰度投影。將一幀736×576UYVY的視頻數(shù)據(jù)按圖5所示的方式劃分成24個(gè)100×110的宏塊,宏塊與視頻數(shù)據(jù)邊緣的最近距離為68個(gè)像素點(diǎn)。

圖5 多分塊的視頻數(shù)據(jù)

將每個(gè)宏塊在水平方向和垂直方向上分別進(jìn)行灰度投影,并通過互相關(guān)運(yùn)算求出其運(yùn)動(dòng)參數(shù)。下式為進(jìn)行行、列互相關(guān)運(yùn)算的計(jì)算公式:其中,Colkn(j)為第k幀圖像第n號(hào)宏塊第j列的灰度投影值,NC是宏塊列的長度。設(shè)Wmin為C(w)最小值時(shí)w的值,則第k幀圖像的第n號(hào)宏塊相對(duì)于參考幀圖像的第n號(hào)宏塊在垂直方向的位移矢量為:

得到所有宏塊的運(yùn)動(dòng)參數(shù)后求出其平均運(yùn)動(dòng)參數(shù)。
然后去除與平均運(yùn)動(dòng)參數(shù)相差最大的前30%的宏塊的運(yùn)動(dòng)參數(shù),取剩下70%宏塊的運(yùn)動(dòng)參數(shù)的平均值為當(dāng)前幀的運(yùn)動(dòng)參數(shù)。然后用均值濾波器去掉運(yùn)動(dòng)參數(shù)中的高頻抖動(dòng)部分,得到低頻的攝像機(jī)正常掃描運(yùn)動(dòng)參數(shù)。然后通過總運(yùn)動(dòng)參數(shù)和正常掃描的運(yùn)動(dòng)參數(shù)得到視頻數(shù)據(jù)的抖動(dòng)參數(shù)。最后進(jìn)行運(yùn)動(dòng)補(bǔ)償處理,本文通過對(duì)穩(wěn)定的前一幀補(bǔ)償?shù)玫较乱环€(wěn)定幀,為了避免錯(cuò)誤向后續(xù)幀的傳播,選取每15幀利用一次原始幀做補(bǔ)償。運(yùn)動(dòng)補(bǔ)償以后就得到了穩(wěn)定的視頻數(shù)據(jù)。
服務(wù)器端通過3G網(wǎng)絡(luò)接收前端移動(dòng)設(shè)備發(fā)送的視頻壓縮數(shù)據(jù),并將其解碼和顯示。視頻圖像如圖6所示。
Design and implementation of device-based video software in mobile monitoring system
Yang Yunlong1,Meng Limin2
(1.College of Information Engineering,Zhejiang University of Technology,Hangzhou 310023,China;
2.Zhejiang Provincial Key Laboratory of Communication Networks and Applications,Hangzhou 310023,China)
This paper proposes a video data processing software design scheme of mobile video surveillance system.Mobile monitoring system is mainly composed of front-end mobile monitoring devices,3G network,server,and mobile phone client.The article described the system schematic diagram,and mainly analyzed video data collection,video jitter removing,video data compression and video data backup.We used an improved gray projection method to remove the video jitter.This method solved the problem of the moving foreground interference.This method is validated to be correct through actual test.
mobile monitoring system;3G network;video processing;removing the video jitter;gray projection method
TP37
A
1674-7720(2015)18-0020-03
楊云龍,孟利民.移動(dòng)監(jiān)控系統(tǒng)中設(shè)備端視頻軟件的設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2015,34(18):20-22,25.