摘 要: 提出了一種移動(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)的過(guò)程中使用了改進(jìn)的灰度投影法,解決了傳統(tǒng)投影法中易受到移動(dòng)前景干擾的問(wèn)題。通過(guò)實(shí)際測(cè)試驗(yàn)證了方案的可行性。
關(guān)鍵詞: 移動(dòng)監(jiān)控系統(tǒng);3G網(wǎng)絡(luò);視頻處理;去抖動(dòng)處理;灰度投影法
0 引言
隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的發(fā)展和應(yīng)用,安全防范產(chǎn)品的逐漸豐富,“安防大眾化”已是大勢(shì)所趨,安全是一種需求,安全對(duì)于人們來(lái)說(shuō)已是必不可少的商品[1]。視頻監(jiān)控系統(tǒng)在安防行業(yè)中具有重要地位。視頻監(jiān)控系統(tǒng)的發(fā)展經(jīng)歷了由模擬到數(shù)字、由錄像人工檢查到狀態(tài)智能分析、由實(shí)地操作到遠(yuǎn)程遙控的過(guò)程[2]。移動(dòng)通信系統(tǒng)已經(jīng)開(kāi)始更新?lián)Q代,中國(guó)3家不同運(yùn)營(yíng)商旗下基于不同標(biāo)準(zhǔn)的3G網(wǎng)絡(luò)也全面步入商用時(shí)代,同時(shí)隨著LTE(Long Term Evolution)技術(shù)的發(fā)展和4G標(biāo)準(zhǔn)化的來(lái)臨,基于新型系統(tǒng)的基礎(chǔ)網(wǎng)絡(luò)建設(shè)必將保持高速發(fā)展[3]。無(wú)線網(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ù)的過(guò)程中難免會(huì)產(chǎn)生抖動(dòng),所以電子穩(wěn)像技術(shù)對(duì)移動(dòng)監(jiān)控系統(tǒng)至關(guān)重要。目前的電子穩(wěn)像技術(shù)是利用電子設(shè)備和數(shù)字圖像處理技術(shù)相結(jié)合的方法,直接從像面上通過(guò)檢測(cè)被比較圖像與參考幀圖像的運(yùn)動(dòng)矢量,并對(duì)被比較圖像進(jìn)行運(yùn)動(dòng)補(bǔ)償,從而獲得清晰穩(wěn)定的視頻圖像序列[5]。視頻穩(wěn)像中最重要的一步是運(yùn)動(dòng)估計(jì),灰度投影法是一種比較常見(jiàn)的運(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ì)的影響。
1 系統(tǒng)總體結(jié)構(gòu)
移動(dòng)監(jiān)控系統(tǒng)主要由前端移動(dòng)監(jiān)控設(shè)備、3G無(wú)線網(wǎng)絡(luò)、服務(wù)器以及手機(jī)客戶端組成。系統(tǒng)總體結(jié)構(gòu)圖如圖1所示。
前端移動(dòng)監(jiān)控設(shè)備采集視頻數(shù)據(jù)并經(jīng)過(guò)壓縮后發(fā)送給服務(wù)器,供服務(wù)器管理人員分析。服務(wù)器按客戶端的要求將視頻壓縮數(shù)據(jù)發(fā)送給客戶端查看。
2 前端設(shè)備視頻軟件設(shè)計(jì)
前端設(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所示。
Capture線程首先通過(guò)調(diào)用Capture_detectVideoStd()函數(shù)獲得視頻數(shù)據(jù)類型。然后再通過(guò)調(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所示。
Video線程首先通過(guò)調(diào)用Engine_open()函數(shù)開(kāi)啟編碼引擎。然后將視頻分辨率參數(shù)傳給Venc1_create()函數(shù)來(lái)創(chuàng)建兩個(gè)編碼對(duì)象hVe1、hVe2。hVe1與hVe2分別用來(lái)將352×288 YUV420SP與720×576 YUV420SP兩種格式的視頻數(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所示。
Write線程首先將參數(shù)outBufSize1與outBufSize2傳給BufTab_create()函數(shù)申請(qǐng)兩組緩存區(qū)。這兩組緩存區(qū)用于接收Video線程傳來(lái)的兩路H.264數(shù)據(jù)。然后Write線程會(huì)調(diào)用函數(shù)createShm()創(chuàng)建一塊共享內(nèi)存。這塊共享內(nèi)存用于存儲(chǔ)由352x288 YUV420SP格式數(shù)據(jù)編碼而來(lái)的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ù)存盤(pán)和將數(shù)據(jù)寫(xiě)入共享內(nèi)存。
Capture線程首先采集一幀736x576 UYVY格式的數(shù)據(jù),然后對(duì)視頻數(shù)據(jù)進(jìn)行電子穩(wěn)像處理。得到穩(wěn)定的視頻數(shù)據(jù)后,通過(guò)調(diào)用Resize()函數(shù)改變穩(wěn)像后的視頻數(shù)據(jù)的分辨率和數(shù)據(jù)格式,并輸出兩路數(shù)據(jù),一路數(shù)據(jù)為352×288 YUV420SP格式,另一路數(shù)據(jù)為736×576 YUV420SP格式。然后將352×288 YUV420SP格式的視頻數(shù)直接傳給Video線程。將736×576 YUV420SP格式的視頻先裁剪成720×576 YUV420SP格式后再傳給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線程傳來(lái)的兩路視頻數(shù)據(jù),并分別用編碼對(duì)象hVe1與hVe2將這兩路視頻數(shù)據(jù)編碼成H.264格式。然后接收Write線程傳過(guò)來(lái)的兩塊buffer,并將兩路H.264格式數(shù)據(jù)分別存儲(chǔ)于這兩塊buffer中,再通過(guò)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線程傳來(lái)的兩路H.264數(shù)據(jù),第一路數(shù)據(jù)由352×288 YUV420SP格式編碼而來(lái),將該H.264數(shù)據(jù)寫(xiě)到共享內(nèi)存中供發(fā)送程序發(fā)送給服務(wù)器;第二路數(shù)據(jù)由720×576 YUV420SP格式編碼而來(lái),將該數(shù)據(jù)寫(xiě)到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é)束。
3 電子穩(wěn)像處理
Capture線程采集的視頻數(shù)據(jù)為736×576 UYVY格式,由于移動(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×576 UYVY的視頻數(shù)據(jù)按圖5所示的方式劃分成24個(gè)100×110的宏塊,宏塊與視頻數(shù)據(jù)邊緣的最近距離為68個(gè)像素點(diǎn)。
將每個(gè)宏塊在水平方向和垂直方向上分別進(jìn)行灰度投影,并通過(guò)互相關(guān)運(yùn)算求出其運(yùn)動(dòng)參數(shù)。下式為進(jìn)行行、列互相關(guān)運(yùn)算的計(jì)算公式:
其中,Colkn(j)為第k幀圖像第n號(hào)宏塊第j列的灰度投影值,NC是宏塊列的長(zhǎng)度。設(shè)Wmin為C(w)最小值時(shí)w的值,則第k幀圖像的第n號(hào)宏塊相對(duì)于參考幀圖像的第n號(hào)宏塊在垂直方向的位移矢量為:
a=-Wmin(2)
得到所有宏塊的運(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ù)。然后通過(guò)總運(yùn)動(dòng)參數(shù)和正常掃描的運(yùn)動(dòng)參數(shù)得到視頻數(shù)據(jù)的抖動(dòng)參數(shù)。最后進(jìn)行運(yùn)動(dòng)補(bǔ)償處理,本文通過(guò)對(duì)穩(wěn)定的前一幀補(bǔ)償?shù)玫较乱环€(wěn)定幀,為了避免錯(cuò)誤向后續(xù)幀的傳播,選取每15幀利用一次原始幀做補(bǔ)償。運(yùn)動(dòng)補(bǔ)償以后就得到了穩(wěn)定的視頻數(shù)據(jù)。
4 系統(tǒng)測(cè)試
服務(wù)器端通過(guò)3G網(wǎng)絡(luò)接收前端移動(dòng)設(shè)備發(fā)送的視頻壓縮數(shù)據(jù),并將其解碼和顯示。視頻圖像如圖6所示。
其中圖6(a)是移動(dòng)監(jiān)控設(shè)備對(duì)采集的視頻數(shù)據(jù)經(jīng)過(guò)電子穩(wěn)像處理過(guò)的連續(xù)3幀視頻數(shù)據(jù),圖6(b)是與圖(a)相對(duì)應(yīng)的未經(jīng)過(guò)設(shè)備端穩(wěn)像處理的視頻數(shù)據(jù)。由圖6可以看出電子穩(wěn)像操作解決了拍攝視頻時(shí)的抖動(dòng)問(wèn)題。將前端移動(dòng)監(jiān)控設(shè)備在不同的地方進(jìn)行測(cè)試,系統(tǒng)都可以穩(wěn)定運(yùn)行。本系統(tǒng)可以廣泛地應(yīng)用于一些無(wú)法鋪設(shè)線路的偏遠(yuǎn)地區(qū),解決了傳統(tǒng)監(jiān)控系統(tǒng)中難以鋪設(shè)線路的問(wèn)題。
參考文獻(xiàn)
[1] 何岳.移動(dòng)監(jiān)控系統(tǒng)研究[J].信息通信,2012(5):126-127.
[2] 姚楠,余勁.基于云的電力監(jiān)控視頻故障管理系統(tǒng)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2014,40(6):140-142.
[3] 楊陽(yáng),胡永輝.移動(dòng)監(jiān)控終端無(wú)線傳輸系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].時(shí)間頻率學(xué)報(bào),2011,34(1):27-32.
[4] 梁振濤,樊澤明,任永亮,等.基于單片機(jī)的移動(dòng)監(jiān)控系統(tǒng)硬件設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2014,33(2):25-30.
[5] 葛虎龍,李安平.高清抖動(dòng)視頻的實(shí)時(shí)穩(wěn)像算法[J].信息通信,2013(6):41-43.
[6] 黃九林.基于塊匹配和直線特征的視頻穩(wěn)像方法研究[D].大連:大連理工大學(xué),2014.