(北京特種機(jī)械研究所,北京 100143)
目前實(shí)時(shí)視頻采集與處理系統(tǒng)在智能武器裝備、工業(yè)自動(dòng)化生產(chǎn)等領(lǐng)域有著廣泛的應(yīng)用。由于實(shí)時(shí)視頻采集與處理系統(tǒng)要求處理器具有較高的數(shù)據(jù)帶寬和處理速度,這對(duì)于高配置的PC機(jī)系統(tǒng)能滿足要求,但PC機(jī)系統(tǒng)一般體積較大,操作系統(tǒng)規(guī)模大,不穩(wěn)定性增多,同時(shí)功耗較大,存在散熱問題;而對(duì)于多數(shù)DSP或單FPGA方案存在難以滿足高數(shù)據(jù)帶寬和處理速度的要求,對(duì)于DSP+FPGA的擴(kuò)展方案,系統(tǒng)又變得復(fù)雜,且產(chǎn)品也難以滿足小型化、集成化要求。為此,本文基于Xilinx公司高性能Zynq-7000SoC芯片,設(shè)計(jì)了一種小型集成化通用視頻采集與處理平臺(tái)系統(tǒng),利用HLS工具將圖像預(yù)處理算法快速打包生成IP核,在PL中實(shí)現(xiàn)圖像算法硬件加速設(shè)計(jì),提高了視頻采集與處理快速性和實(shí)時(shí)性,通過實(shí)例和性能對(duì)比測(cè)試驗(yàn)證了系統(tǒng)的有效性。
基于SoC的實(shí)時(shí)視頻高速采集處理系統(tǒng)原理框圖如圖1所示,系統(tǒng)主要由高速CMOS攝像頭傳感器, Zynq-7000 SoC可擴(kuò)展處理平臺(tái)、數(shù)據(jù)存儲(chǔ)單元DDR3和VGA視頻顯示器等組成。Zynq-7000 SoC可擴(kuò)展平臺(tái)作為整個(gè)實(shí)時(shí)處理系統(tǒng)的核心,包括ARM處理系統(tǒng)(Processing System,PS)和FPGA可編程邏輯(Programmable Logic,PL)兩部分,其中PS部分包含了最高可運(yùn)行在1 GHz的雙Cortex-A9核,高性能的DDR3控制接口和大量的通用外設(shè)接口,PL部分為Xilinx最新的28 nm工藝FPGA,可提供100 Gb/s的內(nèi)部帶寬,內(nèi)部邏輯資源非常豐富,PS和PL之間通過高速AXI總線互聯(lián)進(jìn)行通信,片內(nèi)帶寬足夠大,消除了芯片間互聯(lián)存在的帶寬瓶頸問題。
根據(jù)數(shù)據(jù)流向,系統(tǒng)讀取外界視頻數(shù)據(jù)信息的流程為:PL部分負(fù)責(zé)從CMOS圖像傳感器中獲取視頻信息,通過數(shù)據(jù)轉(zhuǎn)換IP核將視頻數(shù)據(jù)從BAYER格式轉(zhuǎn)化為RGB數(shù)據(jù)格式,然后傳送到圖像預(yù)處理模塊實(shí)現(xiàn)對(duì)RGB像素信息的各種預(yù)處理,如灰度化、濾波、邊緣化等,此模塊利用Xilinx的HLS工具,通過C語言編程實(shí)現(xiàn)各種圖像預(yù)處理IP核的快速定制,而后通過VDMA IP核將處理后的視頻數(shù)據(jù)傳輸至DDR3內(nèi)存芯片中存儲(chǔ),最后PS從DDR3內(nèi)存芯片中讀取經(jīng)幀緩沖的圖像數(shù)據(jù),進(jìn)一步對(duì)視頻特征信息進(jìn)行處理和計(jì)算,處理結(jié)果不僅可以通過千兆以太網(wǎng)進(jìn)行遠(yuǎn)傳,而且可以通過VDMA IP核、VGA接口控制IP核在顯示器上進(jìn)行實(shí)時(shí)顯示。
圖1 系統(tǒng)原理框圖
攝像頭模塊采用OmniVision公司的0V5640攝像頭模塊,具有高幀頻、可配置、低功耗、低成本等優(yōu)點(diǎn),該攝像頭模塊CMOS陣列大小為2592×1944,能夠采集多種分辨率的圖像,最高可支持500萬像素分辨率,在最高分辨率下幀率可達(dá)15fps,在1080p時(shí)幀率可達(dá)30fps。同時(shí),可通過SPI口配置OV5640片上控制寄存器,實(shí)現(xiàn)對(duì)攝像頭時(shí)序、信號(hào)極性等功能靈活配置。
0V5640攝像頭使用Bayer顏色格式,即CMOS芯片的感光陣列中,每個(gè)單元都只含有紅、綠、藍(lán)三者之一的濾鏡。為了得到RGB像素,需要通過相應(yīng)的算法將Bayer顏色格式轉(zhuǎn)換為RGB格式,即首先根據(jù)攝像頭輸出的同步信號(hào)以及數(shù)據(jù)有效信號(hào),采集攝像頭原始數(shù)據(jù);然后運(yùn)用雙線性插值法將這些原始數(shù)據(jù)進(jìn)行處理,最終得到RGB像素。該算法通過在PL內(nèi)封裝攝像頭數(shù)據(jù)轉(zhuǎn)換IP核實(shí)現(xiàn),以提高數(shù)據(jù)的處理速度。
視頻預(yù)處理模塊用于實(shí)現(xiàn)對(duì)視頻圖像的預(yù)處理功能,如灰度化、二值化、濾波、邊緣化等。本文利用Xilinx公司的HLS工具,將圖像預(yù)處理算法通過C語言代碼綜合、仿真生成高效的RTL電路,并打包生成IP核,在PL中實(shí)現(xiàn)了圖像預(yù)處理算法的并行計(jì)算,通過這種算法的硬件加速模式使視頻圖像處理的實(shí)時(shí)性得到極大提高。下文利用HLS工具對(duì)Sobel邊緣檢測(cè)算子的硬件加速過程進(jìn)行了詳細(xì)介紹。
1.2.1 Sobel邊緣檢測(cè)
Sobel邊緣檢測(cè)算子主要用于灰度圖像的邊緣檢測(cè),能夠有效檢測(cè)出物體的輪廓。Sobel算子包含兩組矩陣,大小為3×3,如圖2所示,分別為橫向算子和縱向算子。在一幅圖像中,用算子對(duì)圖像進(jìn)行卷積運(yùn)算,分別得到圖像橫向和縱向的亮度差分近似值。
圖2 Sobel算子
如果以A代表待處理的圖像,以GX和Gy分別代表經(jīng)過橫向、縱向算子卷積后的圖像灰度值,那么公式如(1)、(2)所示:
*A
(1)
(2)
以f(x,y)表示圖像A中(x,y)點(diǎn)的灰度值,那么由式(1)、(2)展開得式(3)、(4):
GX=[f(x+1,y-1)+2×f(x+1,y)+
f(x+1,y+1)]-[f(x-1,y-1)+2×f(x-1,y)+
f(x-1,y+1)]
(3)
Gy=[f(x-1,y-1)+2×f(x,y-1)+
f(x+1,y-1)]-[f(x-1,y+1)+2×f(x,y+1)+
f(x+1,y+1)]
(4)
圖像中每一個(gè)像素的橫向及縱向灰度值大小由式(5)計(jì)算得到。
(5)
為了在FPGA中提高運(yùn)算效率,將式(5)近似為式(6)。
G=|GX|+|Gy|
(6)
1.2.2 HLS實(shí)現(xiàn)Sobel算子
在HLS工具中,包含了一個(gè)專用于視頻處理的Vivado HLS視頻處理開源函數(shù)庫,庫中的函數(shù)和OpenCV函數(shù)具有相似的接口和算法,可用于實(shí)現(xiàn)很多基本的OpenCV函數(shù)功能,但它是針對(duì)FPGA架構(gòu)實(shí)現(xiàn)的圖像處理函數(shù),與OpenCV函數(shù)又有著本質(zhì)的區(qū)別。由于在HLS視頻處理函數(shù)庫中有Sobel函數(shù),因此可以直接采用此函數(shù)通過C或C++代碼綜合、仿真生成高效的RTL電路,而后打包生成功能IP核,從而大大提高了圖像預(yù)處理算法開發(fā)效率。Sobel算子IP核的開發(fā)設(shè)計(jì)流程如圖3所示。
圖3 基于HLS實(shí)現(xiàn)Sobel算子設(shè)計(jì)流程
首先利用HLS工具自帶約束指令將接口約束為AXl4-Stream總線,并利用HLS視頻處理函數(shù)庫中提供的AXl4-Stream與hls::Mat轉(zhuǎn)換函數(shù)實(shí)現(xiàn)Mat類型的轉(zhuǎn)換,定義hls::Mat類型的變量,用于存放處理過程中的臨時(shí)Mat。
然后,將Mat類型的圖像由三通道的彩色圖像轉(zhuǎn)換成單通道的灰度圖像:
RGB_IMAGE src(rows,cols);
GRAY_IMAGE gray(rows,cols);
GRAY_IMAGE sobel(rows,cols);
其中,RGB-IMAGE與GRAY-IMAGE的區(qū)別在于通道數(shù),RGB_IMAGE有三通道,GRAY-IMAGE有一個(gè)通道。每個(gè)hls::Mat的高度為rows,寬度為cols。
而后通過調(diào)用HLS函數(shù)庫中的Sobel算法對(duì)灰度化圖像進(jìn)行邊緣化處理,并將處理后的Mat類型圖像轉(zhuǎn)換成視頻流的格式輸出,核心函數(shù)為:
#program HLS dataflow
hls::AXIvideo2Mat(input,src);
hls::CvtColor
hls::Sobel<1,0,3>(gray,sobel);
hls::Mat2AXIvideo(sobel,output);
最后進(jìn)行代碼綜合,綜合完畢后,需要對(duì)HLS的RTL進(jìn)行仿真。HLS工具可以通過調(diào)用hls_opencv.h頭文件,調(diào)用OpenCV函數(shù),對(duì)生成的模塊進(jìn)行功能仿真,最終打包生成sobel算子IP核。在打包生成IP核同時(shí)也生成了一些頭文件和C文件,這些文件中包含IP核的寄存器定義和偏移地址,以及IP核的驅(qū)動(dòng)函數(shù)API等。
存儲(chǔ)器直接訪問(Direct Memory Access,DMA)技術(shù)是用于數(shù)據(jù)快速交換的一種重要技術(shù),它具有獨(dú)立于CPU的后臺(tái)批量數(shù)據(jù)傳輸能力,能夠滿足實(shí)時(shí)圖像處理中高速數(shù)據(jù)傳輸要求,利用PS上的AXI_HP高速接口完成把經(jīng)預(yù)處理的圖像經(jīng)過VDMA(視頻直接內(nèi)存存取)直接緩存在由設(shè)備驅(qū)動(dòng)程序預(yù)設(shè)的DDR3內(nèi)存中,從而大大提高可編程邏輯部分與處理器部分圖像傳輸速度,為視頻數(shù)據(jù)高速傳輸提供了保障。
在本系統(tǒng)中,VDMA IP核將AXI4-Stream數(shù)據(jù)轉(zhuǎn)換成AXI4總線,實(shí)現(xiàn)視頻數(shù)據(jù)的DDR3存儲(chǔ);同樣也將AXI4總線轉(zhuǎn)換成AXI4-Stream數(shù)據(jù)流,實(shí)現(xiàn)存儲(chǔ)器數(shù)據(jù)的讀?。痪唧w的讀寫地址、讀寫數(shù)據(jù)量的大小等由PS端通過AXI4-Lite總線進(jìn)行配置。VDMA IP核實(shí)質(zhì)是一個(gè)總線轉(zhuǎn)換IP,實(shí)現(xiàn)AXl4-Stream與AXl4總線間數(shù)據(jù)的高速轉(zhuǎn)換。本文調(diào)用了Vivado中自帶的VDMA IP核,其結(jié)構(gòu)如圖4所示。
圖4 VDMA IP核結(jié)構(gòu)框圖
該模塊實(shí)現(xiàn)將VDMA 的AXI4-Stream格式的輸出信號(hào)轉(zhuǎn)換成VGA時(shí)序信號(hào),以便能夠和VGA接口顯示器相連。FPGA并行計(jì)算的優(yōu)勢(shì),滿足了VGA數(shù)據(jù)實(shí)時(shí)更新與顯示的要求。VGA接口控制IP核的結(jié)構(gòu)如圖5所示,主要由異步FIFO、FIFO的寫邏輯、輸出同步模塊以及數(shù)據(jù)格式轉(zhuǎn)換器等組成。AXI4-Stream的Valid信號(hào)控制FIFO的寫使能,而Ready信號(hào)則由FIFO的滿信號(hào)取反得到,輸出同步模塊根據(jù)FIFO的狀態(tài)參數(shù)(如當(dāng)前FIFO內(nèi)數(shù)據(jù)個(gè)數(shù)等)、eol、sof等參數(shù)信號(hào),讀取FIFO,其功能是將video時(shí)序信號(hào)與FIFO讀取出的AXl4-Stream的數(shù)據(jù)進(jìn)行同步。通過Verilog語言編寫的邏輯程序,數(shù)據(jù)格式轉(zhuǎn)換器將輸出視頻信號(hào)的行場(chǎng)同步數(shù)據(jù),數(shù)據(jù)有效信號(hào)等轉(zhuǎn)換成VGA接口需要的RGB數(shù)據(jù),行場(chǎng)同步以及VGA時(shí)鐘。其中,轉(zhuǎn)換出的24位RGB數(shù)據(jù)信號(hào)分別為8位的R信號(hào),8位的G信號(hào), 8位的B信號(hào)。不同分辨率下,VGA接口控制模塊的像素時(shí)鐘不同,像素時(shí)鐘根據(jù)需求由可配置時(shí)鐘模塊產(chǎn)生。
圖5 VGA接口控制IP核
系統(tǒng)硬件工程在Vivado綜合完畢后,在生成PL硬件Bit流的同時(shí),會(huì)生成一個(gè)BSP板級(jí)支持包,在PL內(nèi)部通過AXl4-Lite總線與PS相連的各功能IP核的物理地址信息都包含在這個(gè)BSP板級(jí)支持包里。系統(tǒng)驅(qū)動(dòng)軟件基于BSP包內(nèi)地址信息實(shí)現(xiàn)各IP核初始化配置,通信控制等功能。
系統(tǒng)軟件基于Vivado自帶的SDK開發(fā)平臺(tái)進(jìn)行設(shè)計(jì),采用C語言編程,系統(tǒng)軟件流程圖如圖6所示。首先,系統(tǒng)上電后,PS先啟動(dòng),經(jīng)過硬件平臺(tái)初始化,IO輸入輸出接口(GPIO)初始化,攝像頭參數(shù)配置,基于BSP包的各IP核配置以及VDMA配置等一系列配置操作后,PL部分的IP核開始進(jìn)入正常工作模式。配置結(jié)束后,軟件進(jìn)入主循環(huán),分配VDMA的讀寫緩沖區(qū),分配完畢后從緩沖區(qū)中讀取、處理圖像,并寫入DDR3相應(yīng)地址。每一次循環(huán)都需要重新分配緩沖區(qū)的地址,最后將處理完畢的圖像通過千兆以太網(wǎng)進(jìn)行遠(yuǎn)傳或者在顯示器上進(jìn)行實(shí)時(shí)顯示。
圖6 系統(tǒng)軟件流程圖
系統(tǒng)功能和性能在SnowLeo開發(fā)平臺(tái)上進(jìn)行測(cè)試,該開發(fā)平臺(tái)大小為80 cm×60 cm,板載Zynq-7020SoC芯片,外設(shè)主要由CMOS攝像頭、VGA顯示器、上位機(jī)組成。上位機(jī)通過仿真器與SnowLeo平臺(tái)連接,將系統(tǒng)軟件燒寫到芯片中,SnowLeo平臺(tái)通過VGA接口與顯示屏VGA接口相連,用于顯示視頻處理結(jié)果。SoC視頻處理系統(tǒng)功能測(cè)試連接關(guān)系如圖7所示,圖8為系統(tǒng)功能的驗(yàn)證結(jié)果,圖8(a)所示為視頻圖像原始信息,圖8(b)為圖8(a)經(jīng)Sobel算子加速后得到的處理結(jié)果,可見系統(tǒng)功能正常,能夠正確檢測(cè)并清晰顯示圖像的邊緣信息。
圖7 系統(tǒng)測(cè)試連接關(guān)系
圖8 系統(tǒng)功能測(cè)試結(jié)果
為了測(cè)試本文提出的視頻處理系統(tǒng)的性能,利用Opencv在PS部分應(yīng)用層軟件也實(shí)現(xiàn)了Sobel邊緣檢測(cè)算法,然后對(duì)圖像處理的幀率進(jìn)行了比較測(cè)試。
基于Opencv的Sobel圖像處理函數(shù)的API定義如下:
void sobel(char*rgb_data_in,char*rgb_data_out,int height,int width,int stride)
其中,*rgb_data_in為指向輸入端某一幀幀緩存圖像初始地址rgb_data_in的指針。*rgb_data_out為指向輸出端某一幀幀緩存圖像初始地址rgb_data_out的指針。形參中還包括height,width與stride三個(gè)參數(shù),表示了一幀圖像的高度、寬度與步長。
對(duì)于本文提出的基于PL硬件實(shí)現(xiàn)Sobel邊緣檢測(cè),由于沒有PS參與處理,因此通過示波器測(cè)量圖像處理模塊IP核的中斷信號(hào)測(cè)試幀率。對(duì)于基于Opencv軟件實(shí)現(xiàn)Sobel邊緣檢測(cè)算法,每一幀處理完畢都會(huì)產(chǎn)生一個(gè)中斷信號(hào),因此只需測(cè)量相鄰兩個(gè)中斷信號(hào)之間的時(shí)間,即可計(jì)算出幀率。表1為基于PL硬件實(shí)現(xiàn)Sobel邊緣檢測(cè)和基于Opencv軟件實(shí)現(xiàn)Sobel邊緣檢測(cè)兩種情況下幀率的測(cè)試結(jié)果,為了提高測(cè)試精度,各測(cè)試3次,每次測(cè)20幀圖像數(shù)據(jù),然后求平均時(shí)間。測(cè)試攝像頭分辨率配置成640x480,幀率為30 fps。
表1 性能測(cè)試結(jié)果對(duì)比
可見,將基于PL硬件實(shí)現(xiàn)Sobel邊緣檢測(cè)平均時(shí)間換算成幀率,仍為攝像頭的幀率,這是因?yàn)橛布?,窗口?shù)據(jù)的處理為實(shí)時(shí)的流處理,只要滿足時(shí)序約束,圖像處理的幀率即和攝像頭輸入幀率保持一致。而基于Opencv軟件實(shí)現(xiàn)Sobel邊緣檢測(cè)由于采取的是純軟件串行處理的模式,幀率只有攝像頭輸入幀率的1/15倍,可見本文提出的系統(tǒng)視頻圖像信息處理的快速性和實(shí)時(shí)性較好。
本文基于Xilinx公司高性能Zynq-7000 SoC芯片,提出了一種小型集成化通用視頻采集處理系統(tǒng)設(shè)計(jì)方法,利用HLS工具將圖像預(yù)處理算法快速打包生成IP核,在PL中實(shí)現(xiàn)了圖像預(yù)處理算法的硬件加速,與傳統(tǒng)設(shè)計(jì)方案相比,視頻圖像處理的快速性和實(shí)時(shí)性得到了極大提高,而且滿足了視頻處理設(shè)備小型化、集成化、低功耗發(fā)展需求,通過設(shè)計(jì)實(shí)例驗(yàn)證了系統(tǒng)的有效性。本設(shè)計(jì)采用的基于可編程SoC視頻圖像處理技術(shù),將會(huì)是未來視頻圖像處理技術(shù)的發(fā)展方向,在智能武器裝備,工業(yè)自動(dòng)化生產(chǎn)等軍民領(lǐng)域具有廣闊的應(yīng)用前景。