喬晶鑫
內蒙古自治區新聞出版廣電局呼倫貝爾廣播發射中心臺 內蒙古 呼倫貝爾市 021008
隨著人們物質水平的不斷提高,對精神生活的追求也不斷提高。為滿足人們日益增長的視聽娛樂等方面的需求,廣播發射站的數量也逐漸增多。對于發射站的監管,傳統方法是需要人工值守,此方法不僅會浪費大量人力物力,而且會因為人的疏忽導致廣播意外事件的發生[1]。因此,設計一套安防系統來實時監測發射站機房內部的情況有著重大的現實意義。
在各種安防技術中,視頻監控有著實時性高、操作簡單、監控信息易于查看和保存等優點,得到了廣泛的應用。目前的視頻監控方法多是使用硬盤錄像機(Digital Video Recorder, DVR) 進 行 一 天24 小時不間斷存儲視頻數據,但此種方法有著價格昂貴、設備復雜的缺點[2]。而在本文發射臺監控的任務中場景相對固定,若對發射站機房進行不間斷的錄像并存儲視頻,會包含大量的無異常冗余視頻,占用存儲空間;并且工作人員查看過往視頻時需要全部查看,過程較為繁瑣。
針對以上問題,結合發射站機房監測任務的特點,本文提出一種利用圖像處理算法進行異物闖入監測的發射臺安防系統,僅當有異物闖入和物體移動時才會進行視頻的存儲,并進行目標跟蹤便于監管人員查看,并且搭建嵌入式硬件平臺和移植算法,從而解決了設備復雜昂貴、存儲多余視頻的問題。
根據實地考察和分析,本文提出了一種基于圖像處理算法和嵌入式技術的發射臺安防系統,該系統的主要功能為:第一,驅動視頻采集模塊實時監測發射臺機房內部狀態,當有異物闖入或物體移動時,存儲當前視頻;第二,進行視頻中物體的跟蹤和標記;第三,驅動顯示模塊能夠回放存儲的監控視頻,該視頻以拍攝時間為順序、分段存儲;第四,連接外部設備,接收用戶的輸入控制。
本文提出的基于視頻監控的發射臺安防系統結構如圖1 所示,包括硬件和軟件兩個部分,在硬件部分含有高性能處理器作為整個系統的核心,連接高清攝像頭作為顯示模塊、連接可觸控的LCD 顯示器同時完成顯示功能和接收用戶輸入的功能、連接大容量存儲器用來存儲多個分段的監控視頻供工作人員回溯事件。軟件部分包括嵌入式操作系統,它是軟件程序運行的基礎,操作系統內部的驅動程序來驅動硬件的各個模塊高效工作;還包括基于OpenCV 的移動物體檢測算法和目標跟蹤算法,屬于上層應用程序,調用嵌入式操作系統的API 實現對硬件的管理。

圖1 基于視頻監控的發射臺安防系統結構圖
1.2.1 嵌入式處理器
處理器是整個系統的核心,它控制其它各物理模塊,也是操作系統和軟件程序得以運行的基礎。ARM 架構的處理器憑借精簡指令集的高效、功耗低、性價比高的優勢,占據了大量的市場。本文中發射站安防系統需要一個性能強大、價格低的處理器,因此處理器選擇了NXP公司的iMX6ULL處理器。

圖3 OKMX6ULL 開發板底板實物圖
iMX6ULL 處理器基于ARM cortex-A7 架構,有著較強的性能。 運行頻率最高可達900MHz,內 部 有128KB L2 緩存。集成了很多模塊功能豐富,例如電源管理模塊,降低了外接電源的復雜性;在連接存儲器方面,接口眾多,包括LPDDR2、DDR3、DDR3L、原始和管理的NAND 閃存、NOR 閃存、eMMC、Quad SPI 和各種其他接口;在連接外圍設備方面,可與LCD 顯示器、攝像頭傳感器等連接[3]。
本文安防系統將利用飛凌公司的OKMX6ULL 開發板進行開發,該開發板由主板和底板兩部分組成,如圖2、圖3 所示, 接 口 豐 富, 包 括LCD、Camera 接 口,4 個USB 接 口,2個UART、2 個IIC、2 個CAN 總線接口等[4]。本系統直接使用OKMX6ULL 開發板所提供的接口連接視頻采集模塊、觸控顯示模塊、視頻數據存儲模塊,并在iMX6ULL 處理器中運行嵌入式操作系統,在操作系統之上運行本文設計的目標檢測和跟蹤程序。
1.2.2 視頻采集模塊
對于視頻采集模塊的選擇,本文從拍攝效果及性價比等多方面考慮,選用色彩逼真、穩定性高的中星微301v 型號攝像頭,實物圖如圖4 所示。

圖4 攝像頭模塊
該款攝像頭為高清CMOS 攝像頭,接口類型USB2.0,圖像最大分辨率640×480,拍攝速率為30fps,抗噪能力強,還包括多種影像處理功能。通過多次實際測試,能夠拍攝出清晰的圖像畫面,并且價格適中、性價比高,符合本系統低成本的要求。
1.2.3 顯示模塊
顯示模塊和用戶輸入模塊集合到一個物理設備中,使這個系統的操作更加高效,本文選用LCD 觸控一體機作為顯示和輸入模塊。產品為觸想公司的12 寸LCD 顯示屏。實物圖如圖5 所示,具體參數見表1。

圖5 LCD 觸控一體機實物圖
1.3.1 OpenCV 簡介
OpenCV 是一個在圖像處理領域常用的機器視覺集成庫,主要編程語言使C++、Python等。OpenCV 是分模塊化設計的具體來說分為多個部分,各部分之間的結構和關系如圖6所示:

圖6 OpenCV 的模塊結構
如上圖所示, OpenCV HAL 模塊是多硬件的支持和優化,包括SSE、CUDA 等;其次是OpenCV 對圖像處理的核心代碼,包括core、imgproc 模塊等,內部包含多種高級圖像處理的函數,提供API 供開發人員使用;最后是一些與特定開發語言的綁定,包括對Python、Java等,還有一些示例工程和解決方案[5]。

表1 觸控一體機產品規格
OpenCV 已有多個版本更新,它在除了圖像處理領域應用廣泛,在人臉識別、機器人、運動結構分析等領域都有著廣泛的應用。主要是它有著諸多優點,如下:
(1)OpenCV 中有大量覆蓋計算機視覺領域的圖像處理相關函數,并且是全部開源的,在研究過程中可以在代碼中添加自己的思路;
(2)OpenCV 視覺庫中的代碼都是經過不斷實驗優化后發布的,可靠性強;
(3)OpenCV 支持的運行環境較為廣泛,可以支持開發者在多種環境中完成對圖像的研發工作,跨平臺使用,可移植性強;
(4)OpenCV 提供了多種圖像處理API 接口,通用性強。
因此,本文選用OpenCV3.4.1庫來實現目標檢測程序和跟蹤程序。
1.3.2 嵌入式操作系統
在嵌入式軟件部分,分為無操作系統的裸機和包含操作系統的軟件部分。當任務較為簡單時,不含操作系統的代碼直接控制硬件器件,效率高、便于程序的編寫。但是當任務較為復雜且對處理實時性有較高要求時,需要使用操作系統來完成多任務的并發的功能。目前,常用的嵌入式操作系統包括Linux、WinCE、VxWorks 等[6]。
由于嵌入式Linux 有著開源、成本低、可移植性強的優點,而且應用廣泛,本文將采用嵌入式Linux 作為操作系統。由圖7 可知,Linux 操作系統有4個組成部分,分別是內核、系統調用、shell 及公共函數庫、應用程序。

圖7 Linux 結構圖
其中,內核是操作系統關鍵的部分,主要完成操作系統做重要的任務,包括進程管理、內存管理、文件管理等[7]。
1.3.3 移動目標檢測算法
根據視頻中物體背景是否變化,移動目標檢測算法主要分為動態和靜態背景的移動目標檢測算法。當背景處于動態變化過程中,或者說是視頻采集模塊處于不斷移動導致背景在不斷改變時,此時需要的算法更強,處理器性能也需要更好[8]。
在本文任務中,發射臺機房中背景相對固定,而且攝像頭位置保持不變,因此屬于靜態背景中的移動目標檢測算法。目前常用的算法有光流法、背景差法和幀差法。光流法算法較為復雜而且對硬件要求較高,不適合用于嵌入式系統中;背景差法運算速度快,但是抗干擾能力弱,容易造成誤檢。幀差法的魯棒性較強,計算高效,對處理器性能要求不高,因此本文選擇幀差法作為移動檢測算法。算法總體流程如圖8 所示。
由圖8 可知,本算法對連續兩幀圖像做差值運算,首先是獲得連續兩幀圖像的數據,其次進行兩幅圖像的預處理操作,包括圖像灰度化處理、濾波降噪得到高質量的灰度圖像,最后對兩幀圖像做差值計算得到新的圖像Mat_new,并對Mat_new 進行閾值判斷,若超過閾值則認為有移動物體,則對Mat_new 進行一些圖像的形態學運算,開始存儲該幀圖像,用于以后工作人員查看。
主要的形態學后處理算法有腐蝕、膨脹、開運算、閉運算、形態學梯度、頂帽和黑帽等基本運算,本文采用圖像腐蝕和圖像膨脹,圖像腐蝕的計算公式如下所示:

圖8 移動目標檢測算法流程圖

圖像膨脹的計算式為:

最后,利用C++語言和OpenCV 庫進行編寫移動目標檢測算法,所調用的OpenCV 函數和調用順序為Video Capture、cvtColor、 absdiff、 threshold、erode、dilate。
1.3.4 目標跟蹤算法
當檢測到異物闖入發射臺機房中時,已經保存了圖像,但是為了顯示的更加明顯,將使用目標跟蹤算法對異物或移動物體進行標記其輪廓。其算法流程如圖9 所示。
首先是邊緣檢測,本文所使用的Canny 算子進行檢測其邊緣。其主要步驟包括:圖像降噪、計算圖像的梯度,非極大值抑制和閾值篩選[9]。
通常使用高斯濾波進行降噪處理,接下來計算梯度,公式為:

梯度的大小和方向分別為:


圖9 目標跟蹤算法流程圖
非極大值抑制和最后一步的閾值篩選的目的是使邊緣更加的準確、描述更多的細節信息。圖10 為Canny 濾波處理之后的效果圖。
經過邊緣檢測之后,接下來是進行輪廓的檢測和外接矩形的繪制。最后,利用C++語言和OpenCV 庫進行編寫移動目標檢測算法,所調用的OpenCV 函數和調用順序為Canny、find-Contours、drawContours、boudingRect、Rectangle。

圖10 Canny 濾波效果圖

圖11 基于監控視頻的發射臺安防系統的流程圖
在完成了硬件的選型和移動目標檢測、目標跟蹤算法的實現, 本節開始基于OKMX6ULL 搭建嵌入式系統,并進行操作系統的移植和算法的移植。本文所設計的基于監控視頻的發射臺安防系統的流程如圖11 所示。
1.4.1 U-boot 的移植
首先移植U-boot,Bootloader 引導程序是處理器一上電之后執行的第一個程序,它存儲在系統的ROM 中,一般來說由廠家固化好。U-boot 是屬于引導加載程序的一種,因為它有著很強的移植性并開源代碼,故應用廣泛[10]。移植U-boot 的步驟如下:
(1)修改頂層Makefile,修改其中的CPU 類型和開發板類型;
(2)在configs 文件夾下新建IMX6ULL.h,配置引腳信息;
(3)修改配置文件board.cfg;
(4)運行build.sh shell 腳本文件,編譯U-boot,并把編譯后的文件燒錄到Nand Flash 中。
系統上電后,U-boot 會被加載到內存的0 地址處譯碼執行,U-boot 的功能是檢查主要硬件的功能完善性,并加載操作系統內核到內存執行。
1.4.2 操作系統的裁剪與OpenCV 的移植
所以下一步就是進行操作系統的編譯與移植,在PC 中編譯好操作系統程序,燒錄到嵌入式開發板的Nand Flash 中。具體步驟如下:
(1) 用圖像界面的方式CPU 型號。運行menuconfig 依次配置NXP 類型的IMX6ULL 系列,運行內核架構代碼則會使用IMX6ULL 架構所對應的內核程序;
(2)添加設備驅動程序。本系統外接的硬件包括攝像頭、LCD 觸控屏,因此在操作系統中為其田間設備驅動程序以控制硬件工作。
分別編寫攝像頭、LCD 觸控屏的驅動程序,并編譯成模塊,配置內核時選擇編譯該模塊至內核,則最終生成的操作系統中就包含了控制攝像頭和LCD 觸控屏的代碼;
(3)文件系統的移植。本文使用的是性能優越,在嵌入式系統中應用廣泛的Yaffs2 嵌入式文件系統。步驟為修改內核文件中的/fs 目錄下的Makefile 文件,并通過配置Kconfig 文件配置yaffs2 文件系統。最后重新配置.config 文件,使內核中包含Yaffs2 文件系統。
(4)移植OpenCV。首先在官網下載OpenCV3.4.1 源碼文件,利用cmake 進行配置并編譯,執行./cmake.gui,按照要求配置OpenCV 源碼,其次交叉編譯生成lib 庫和一些頭文件庫,即嵌入式開發板所需要的庫。最后開發板上電運行Linux 操作系統,把庫文件傳輸到操作系統中的文件系統的根目錄中即可。
1.4.3 移植移動檢測與目標跟蹤算法
當開發板中正常運行Linux操作系統并加載OpneCV 庫之后,接下來就是移植移動檢測程序和目標跟蹤程序。
在PC 機中通過arm-linuxgcc 交叉編譯工具鏈編譯得到可以在嵌入式Linux 中運行的程序,并在系統上電后通過文件傳輸工具從PC 機傳輸到開發板中,然后運行此程序,至此,整個系統開始運行。
攝像頭開始實時采集發射臺機房中的圖像,并利用移動目標檢測算法和目標跟蹤算法對異物和移動的物體進行視頻記錄保存和跟蹤檢測。管理人員可通過LCD 觸控屏進行視頻的回看和下載。
攝像頭通過USB 連接開發板的USB 接口,將采集的圖像傳輸到開發板,IMX6ULL 處理器運行本文移動目表檢測算法,本節通過實驗,當監控畫面中出現移動物體時,該算法能夠進行檢測并利用外接矩形框住移動的物體,而開發板則把此時的視頻信息存儲到FLASH 存儲器中。如圖12 所示為監控移動的人,從圖中可以看出,可以正確的框出視頻中移動的工作人員。

圖12 對移動目標的檢測效果圖
本文提出的檢測和只對移動目標進行存儲,主要是為了減少數據的存儲,因此本節對視頻的存儲量進行計算和分析,對24 小時內的視頻數據量大小進行記錄,并與通常的視頻存儲方式進行比較,如圖13所示。

圖13 視頻數據量大小對比
1. 本文設計的基于視頻監控的發射臺安防系統,通過對移動目標進行檢測,并進行跟蹤,使用了嵌入式系統,大大降低了開發成本。
2. 對于機房這種相對穩定的靜態背景,本文只記錄有移動物體時的視頻數據,減少了數據的存儲,便于管理人員回溯事件、回看視頻。
3. 搭建的嵌入式系統具有較強的通用性和可擴展性,適合二次開發和應用于其它領域。