喬晶鑫
內(nèi)蒙古自治區(qū)新聞出版廣電局呼倫貝爾廣播發(fā)射中心臺 內(nèi)蒙古 呼倫貝爾市 021008
隨著人們物質(zhì)水平的不斷提高,對精神生活的追求也不斷提高。為滿足人們?nèi)找嬖鲩L的視聽娛樂等方面的需求,廣播發(fā)射站的數(shù)量也逐漸增多。對于發(fā)射站的監(jiān)管,傳統(tǒng)方法是需要人工值守,此方法不僅會浪費大量人力物力,而且會因為人的疏忽導(dǎo)致廣播意外事件的發(fā)生[1]。因此,設(shè)計一套安防系統(tǒng)來實時監(jiān)測發(fā)射站機房內(nèi)部的情況有著重大的現(xiàn)實意義。
在各種安防技術(shù)中,視頻監(jiān)控有著實時性高、操作簡單、監(jiān)控信息易于查看和保存等優(yōu)點,得到了廣泛的應(yīng)用。目前的視頻監(jiān)控方法多是使用硬盤錄像機(Digital Video Recorder, DVR) 進 行 一 天24 小時不間斷存儲視頻數(shù)據(jù),但此種方法有著價格昂貴、設(shè)備復(fù)雜的缺點[2]。而在本文發(fā)射臺監(jiān)控的任務(wù)中場景相對固定,若對發(fā)射站機房進行不間斷的錄像并存儲視頻,會包含大量的無異常冗余視頻,占用存儲空間;并且工作人員查看過往視頻時需要全部查看,過程較為繁瑣。
針對以上問題,結(jié)合發(fā)射站機房監(jiān)測任務(wù)的特點,本文提出一種利用圖像處理算法進行異物闖入監(jiān)測的發(fā)射臺安防系統(tǒng),僅當(dāng)有異物闖入和物體移動時才會進行視頻的存儲,并進行目標(biāo)跟蹤便于監(jiān)管人員查看,并且搭建嵌入式硬件平臺和移植算法,從而解決了設(shè)備復(fù)雜昂貴、存儲多余視頻的問題。
根據(jù)實地考察和分析,本文提出了一種基于圖像處理算法和嵌入式技術(shù)的發(fā)射臺安防系統(tǒng),該系統(tǒng)的主要功能為:第一,驅(qū)動視頻采集模塊實時監(jiān)測發(fā)射臺機房內(nèi)部狀態(tài),當(dāng)有異物闖入或物體移動時,存儲當(dāng)前視頻;第二,進行視頻中物體的跟蹤和標(biāo)記;第三,驅(qū)動顯示模塊能夠回放存儲的監(jiān)控視頻,該視頻以拍攝時間為順序、分段存儲;第四,連接外部設(shè)備,接收用戶的輸入控制。
本文提出的基于視頻監(jiān)控的發(fā)射臺安防系統(tǒng)結(jié)構(gòu)如圖1 所示,包括硬件和軟件兩個部分,在硬件部分含有高性能處理器作為整個系統(tǒng)的核心,連接高清攝像頭作為顯示模塊、連接可觸控的LCD 顯示器同時完成顯示功能和接收用戶輸入的功能、連接大容量存儲器用來存儲多個分段的監(jiān)控視頻供工作人員回溯事件。軟件部分包括嵌入式操作系統(tǒng),它是軟件程序運行的基礎(chǔ),操作系統(tǒng)內(nèi)部的驅(qū)動程序來驅(qū)動硬件的各個模塊高效工作;還包括基于OpenCV 的移動物體檢測算法和目標(biāo)跟蹤算法,屬于上層應(yīng)用程序,調(diào)用嵌入式操作系統(tǒng)的API 實現(xiàn)對硬件的管理。
圖1 基于視頻監(jiān)控的發(fā)射臺安防系統(tǒng)結(jié)構(gòu)圖
1.2.1 嵌入式處理器
處理器是整個系統(tǒng)的核心,它控制其它各物理模塊,也是操作系統(tǒng)和軟件程序得以運行的基礎(chǔ)。ARM 架構(gòu)的處理器憑借精簡指令集的高效、功耗低、性價比高的優(yōu)勢,占據(jù)了大量的市場。本文中發(fā)射站安防系統(tǒng)需要一個性能強大、價格低的處理器,因此處理器選擇了NXP公司的iMX6ULL處理器。
圖3 OKMX6ULL 開發(fā)板底板實物圖
iMX6ULL 處理器基于ARM cortex-A7 架構(gòu),有著較強的性能。 運行頻率最高可達(dá)900MHz,內(nèi) 部 有128KB L2 緩存。集成了很多模塊功能豐富,例如電源管理模塊,降低了外接電源的復(fù)雜性;在連接存儲器方面,接口眾多,包括LPDDR2、DDR3、DDR3L、原始和管理的NAND 閃存、NOR 閃存、eMMC、Quad SPI 和各種其他接口;在連接外圍設(shè)備方面,可與LCD 顯示器、攝像頭傳感器等連接[3]。
本文安防系統(tǒng)將利用飛凌公司的OKMX6ULL 開發(fā)板進行開發(fā),該開發(fā)板由主板和底板兩部分組成,如圖2、圖3 所示, 接 口 豐 富, 包 括LCD、Camera 接 口,4 個USB 接 口,2個UART、2 個IIC、2 個CAN 總線接口等[4]。本系統(tǒng)直接使用OKMX6ULL 開發(fā)板所提供的接口連接視頻采集模塊、觸控顯示模塊、視頻數(shù)據(jù)存儲模塊,并在iMX6ULL 處理器中運行嵌入式操作系統(tǒng),在操作系統(tǒng)之上運行本文設(shè)計的目標(biāo)檢測和跟蹤程序。
1.2.2 視頻采集模塊
對于視頻采集模塊的選擇,本文從拍攝效果及性價比等多方面考慮,選用色彩逼真、穩(wěn)定性高的中星微301v 型號攝像頭,實物圖如圖4 所示。
圖4 攝像頭模塊
該款攝像頭為高清CMOS 攝像頭,接口類型USB2.0,圖像最大分辨率640×480,拍攝速率為30fps,抗噪能力強,還包括多種影像處理功能。通過多次實際測試,能夠拍攝出清晰的圖像畫面,并且價格適中、性價比高,符合本系統(tǒng)低成本的要求。
1.2.3 顯示模塊
顯示模塊和用戶輸入模塊集合到一個物理設(shè)備中,使這個系統(tǒng)的操作更加高效,本文選用LCD 觸控一體機作為顯示和輸入模塊。產(chǎn)品為觸想公司的12 寸LCD 顯示屏。實物圖如圖5 所示,具體參數(shù)見表1。
圖5 LCD 觸控一體機實物圖
1.3.1 OpenCV 簡介
OpenCV 是一個在圖像處理領(lǐng)域常用的機器視覺集成庫,主要編程語言使C++、Python等。OpenCV 是分模塊化設(shè)計的具體來說分為多個部分,各部分之間的結(jié)構(gòu)和關(guān)系如圖6所示:
圖6 OpenCV 的模塊結(jié)構(gòu)
如上圖所示, OpenCV HAL 模塊是多硬件的支持和優(yōu)化,包括SSE、CUDA 等;其次是OpenCV 對圖像處理的核心代碼,包括core、imgproc 模塊等,內(nèi)部包含多種高級圖像處理的函數(shù),提供API 供開發(fā)人員使用;最后是一些與特定開發(fā)語言的綁定,包括對Python、Java等,還有一些示例工程和解決方案[5]。
表1 觸控一體機產(chǎn)品規(guī)格
OpenCV 已有多個版本更新,它在除了圖像處理領(lǐng)域應(yīng)用廣泛,在人臉識別、機器人、運動結(jié)構(gòu)分析等領(lǐng)域都有著廣泛的應(yīng)用。主要是它有著諸多優(yōu)點,如下:
(1)OpenCV 中有大量覆蓋計算機視覺領(lǐng)域的圖像處理相關(guān)函數(shù),并且是全部開源的,在研究過程中可以在代碼中添加自己的思路;
(2)OpenCV 視覺庫中的代碼都是經(jīng)過不斷實驗優(yōu)化后發(fā)布的,可靠性強;
(3)OpenCV 支持的運行環(huán)境較為廣泛,可以支持開發(fā)者在多種環(huán)境中完成對圖像的研發(fā)工作,跨平臺使用,可移植性強;
(4)OpenCV 提供了多種圖像處理API 接口,通用性強。
因此,本文選用OpenCV3.4.1庫來實現(xiàn)目標(biāo)檢測程序和跟蹤程序。
1.3.2 嵌入式操作系統(tǒng)
在嵌入式軟件部分,分為無操作系統(tǒng)的裸機和包含操作系統(tǒng)的軟件部分。當(dāng)任務(wù)較為簡單時,不含操作系統(tǒng)的代碼直接控制硬件器件,效率高、便于程序的編寫。但是當(dāng)任務(wù)較為復(fù)雜且對處理實時性有較高要求時,需要使用操作系統(tǒng)來完成多任務(wù)的并發(fā)的功能。目前,常用的嵌入式操作系統(tǒng)包括Linux、WinCE、VxWorks 等[6]。
由于嵌入式Linux 有著開源、成本低、可移植性強的優(yōu)點,而且應(yīng)用廣泛,本文將采用嵌入式Linux 作為操作系統(tǒng)。由圖7 可知,Linux 操作系統(tǒng)有4個組成部分,分別是內(nèi)核、系統(tǒng)調(diào)用、shell 及公共函數(shù)庫、應(yīng)用程序。
圖7 Linux 結(jié)構(gòu)圖
其中,內(nèi)核是操作系統(tǒng)關(guān)鍵的部分,主要完成操作系統(tǒng)做重要的任務(wù),包括進程管理、內(nèi)存管理、文件管理等[7]。
1.3.3 移動目標(biāo)檢測算法
根據(jù)視頻中物體背景是否變化,移動目標(biāo)檢測算法主要分為動態(tài)和靜態(tài)背景的移動目標(biāo)檢測算法。當(dāng)背景處于動態(tài)變化過程中,或者說是視頻采集模塊處于不斷移動導(dǎo)致背景在不斷改變時,此時需要的算法更強,處理器性能也需要更好[8]。
在本文任務(wù)中,發(fā)射臺機房中背景相對固定,而且攝像頭位置保持不變,因此屬于靜態(tài)背景中的移動目標(biāo)檢測算法。目前常用的算法有光流法、背景差法和幀差法。光流法算法較為復(fù)雜而且對硬件要求較高,不適合用于嵌入式系統(tǒng)中;背景差法運算速度快,但是抗干擾能力弱,容易造成誤檢。幀差法的魯棒性較強,計算高效,對處理器性能要求不高,因此本文選擇幀差法作為移動檢測算法。算法總體流程如圖8 所示。
由圖8 可知,本算法對連續(xù)兩幀圖像做差值運算,首先是獲得連續(xù)兩幀圖像的數(shù)據(jù),其次進行兩幅圖像的預(yù)處理操作,包括圖像灰度化處理、濾波降噪得到高質(zhì)量的灰度圖像,最后對兩幀圖像做差值計算得到新的圖像Mat_new,并對Mat_new 進行閾值判斷,若超過閾值則認(rèn)為有移動物體,則對Mat_new 進行一些圖像的形態(tài)學(xué)運算,開始存儲該幀圖像,用于以后工作人員查看。
主要的形態(tài)學(xué)后處理算法有腐蝕、膨脹、開運算、閉運算、形態(tài)學(xué)梯度、頂帽和黑帽等基本運算,本文采用圖像腐蝕和圖像膨脹,圖像腐蝕的計算公式如下所示:
圖8 移動目標(biāo)檢測算法流程圖
圖像膨脹的計算式為:
最后,利用C++語言和OpenCV 庫進行編寫移動目標(biāo)檢測算法,所調(diào)用的OpenCV 函數(shù)和調(diào)用順序為Video Capture、cvtColor、 absdiff、 threshold、erode、dilate。
1.3.4 目標(biāo)跟蹤算法
當(dāng)檢測到異物闖入發(fā)射臺機房中時,已經(jīng)保存了圖像,但是為了顯示的更加明顯,將使用目標(biāo)跟蹤算法對異物或移動物體進行標(biāo)記其輪廓。其算法流程如圖9 所示。
首先是邊緣檢測,本文所使用的Canny 算子進行檢測其邊緣。其主要步驟包括:圖像降噪、計算圖像的梯度,非極大值抑制和閾值篩選[9]。
通常使用高斯濾波進行降噪處理,接下來計算梯度,公式為:
梯度的大小和方向分別為:
圖9 目標(biāo)跟蹤算法流程圖
非極大值抑制和最后一步的閾值篩選的目的是使邊緣更加的準(zhǔn)確、描述更多的細(xì)節(jié)信息。圖10 為Canny 濾波處理之后的效果圖。
經(jīng)過邊緣檢測之后,接下來是進行輪廓的檢測和外接矩形的繪制。最后,利用C++語言和OpenCV 庫進行編寫移動目標(biāo)檢測算法,所調(diào)用的OpenCV 函數(shù)和調(diào)用順序為Canny、find-Contours、drawContours、boudingRect、Rectangle。
圖10 Canny 濾波效果圖
圖11 基于監(jiān)控視頻的發(fā)射臺安防系統(tǒng)的流程圖
在完成了硬件的選型和移動目標(biāo)檢測、目標(biāo)跟蹤算法的實現(xiàn), 本節(jié)開始基于OKMX6ULL 搭建嵌入式系統(tǒng),并進行操作系統(tǒng)的移植和算法的移植。本文所設(shè)計的基于監(jiān)控視頻的發(fā)射臺安防系統(tǒng)的流程如圖11 所示。
1.4.1 U-boot 的移植
首先移植U-boot,Bootloader 引導(dǎo)程序是處理器一上電之后執(zhí)行的第一個程序,它存儲在系統(tǒng)的ROM 中,一般來說由廠家固化好。U-boot 是屬于引導(dǎo)加載程序的一種,因為它有著很強的移植性并開源代碼,故應(yīng)用廣泛[10]。移植U-boot 的步驟如下:
(1)修改頂層Makefile,修改其中的CPU 類型和開發(fā)板類型;
(2)在configs 文件夾下新建IMX6ULL.h,配置引腳信息;
(3)修改配置文件board.cfg;
(4)運行build.sh shell 腳本文件,編譯U-boot,并把編譯后的文件燒錄到Nand Flash 中。
系統(tǒng)上電后,U-boot 會被加載到內(nèi)存的0 地址處譯碼執(zhí)行,U-boot 的功能是檢查主要硬件的功能完善性,并加載操作系統(tǒng)內(nèi)核到內(nèi)存執(zhí)行。
1.4.2 操作系統(tǒng)的裁剪與OpenCV 的移植
所以下一步就是進行操作系統(tǒng)的編譯與移植,在PC 中編譯好操作系統(tǒng)程序,燒錄到嵌入式開發(fā)板的Nand Flash 中。具體步驟如下:
(1) 用圖像界面的方式CPU 型號。運行menuconfig 依次配置NXP 類型的IMX6ULL 系列,運行內(nèi)核架構(gòu)代碼則會使用IMX6ULL 架構(gòu)所對應(yīng)的內(nèi)核程序;
(2)添加設(shè)備驅(qū)動程序。本系統(tǒng)外接的硬件包括攝像頭、LCD 觸控屏,因此在操作系統(tǒng)中為其田間設(shè)備驅(qū)動程序以控制硬件工作。
分別編寫攝像頭、LCD 觸控屏的驅(qū)動程序,并編譯成模塊,配置內(nèi)核時選擇編譯該模塊至內(nèi)核,則最終生成的操作系統(tǒng)中就包含了控制攝像頭和LCD 觸控屏的代碼;
(3)文件系統(tǒng)的移植。本文使用的是性能優(yōu)越,在嵌入式系統(tǒng)中應(yīng)用廣泛的Yaffs2 嵌入式文件系統(tǒng)。步驟為修改內(nèi)核文件中的/fs 目錄下的Makefile 文件,并通過配置Kconfig 文件配置yaffs2 文件系統(tǒng)。最后重新配置.config 文件,使內(nèi)核中包含Yaffs2 文件系統(tǒng)。
(4)移植OpenCV。首先在官網(wǎng)下載OpenCV3.4.1 源碼文件,利用cmake 進行配置并編譯,執(zhí)行./cmake.gui,按照要求配置OpenCV 源碼,其次交叉編譯生成lib 庫和一些頭文件庫,即嵌入式開發(fā)板所需要的庫。最后開發(fā)板上電運行Linux 操作系統(tǒng),把庫文件傳輸?shù)讲僮飨到y(tǒng)中的文件系統(tǒng)的根目錄中即可。
1.4.3 移植移動檢測與目標(biāo)跟蹤算法
當(dāng)開發(fā)板中正常運行Linux操作系統(tǒng)并加載OpneCV 庫之后,接下來就是移植移動檢測程序和目標(biāo)跟蹤程序。
在PC 機中通過arm-linuxgcc 交叉編譯工具鏈編譯得到可以在嵌入式Linux 中運行的程序,并在系統(tǒng)上電后通過文件傳輸工具從PC 機傳輸?shù)介_發(fā)板中,然后運行此程序,至此,整個系統(tǒng)開始運行。
攝像頭開始實時采集發(fā)射臺機房中的圖像,并利用移動目標(biāo)檢測算法和目標(biāo)跟蹤算法對異物和移動的物體進行視頻記錄保存和跟蹤檢測。管理人員可通過LCD 觸控屏進行視頻的回看和下載。
攝像頭通過USB 連接開發(fā)板的USB 接口,將采集的圖像傳輸?shù)介_發(fā)板,IMX6ULL 處理器運行本文移動目表檢測算法,本節(jié)通過實驗,當(dāng)監(jiān)控畫面中出現(xiàn)移動物體時,該算法能夠進行檢測并利用外接矩形框住移動的物體,而開發(fā)板則把此時的視頻信息存儲到FLASH 存儲器中。如圖12 所示為監(jiān)控移動的人,從圖中可以看出,可以正確的框出視頻中移動的工作人員。
圖12 對移動目標(biāo)的檢測效果圖
本文提出的檢測和只對移動目標(biāo)進行存儲,主要是為了減少數(shù)據(jù)的存儲,因此本節(jié)對視頻的存儲量進行計算和分析,對24 小時內(nèi)的視頻數(shù)據(jù)量大小進行記錄,并與通常的視頻存儲方式進行比較,如圖13所示。
圖13 視頻數(shù)據(jù)量大小對比
1. 本文設(shè)計的基于視頻監(jiān)控的發(fā)射臺安防系統(tǒng),通過對移動目標(biāo)進行檢測,并進行跟蹤,使用了嵌入式系統(tǒng),大大降低了開發(fā)成本。
2. 對于機房這種相對穩(wěn)定的靜態(tài)背景,本文只記錄有移動物體時的視頻數(shù)據(jù),減少了數(shù)據(jù)的存儲,便于管理人員回溯事件、回看視頻。
3. 搭建的嵌入式系統(tǒng)具有較強的通用性和可擴展性,適合二次開發(fā)和應(yīng)用于其它領(lǐng)域。