孫志豪+徐政+石潤彬+吳晨健
摘要:為了實(shí)現(xiàn)直接對(duì)網(wǎng)絡(luò)攝像監(jiān)控系統(tǒng)進(jìn)行視頻畫面抓取并進(jìn)行高效率、高精度的圖像處理,設(shè)計(jì)了一個(gè)支持RTSP協(xié)議、可進(jìn)行Sobel邊緣檢測(cè)的數(shù)據(jù)驅(qū)動(dòng)型異構(gòu)系統(tǒng)。基于海思公司的hi3536芯片,該系統(tǒng)可同時(shí)獲取16路1080P、H.264編碼的網(wǎng)絡(luò)攝像頭的視頻圖像,并使用Xilinx公司的ZC702型號(hào)FPGA為載體實(shí)現(xiàn)的Sobel邊緣檢測(cè)加速器對(duì)視頻圖像進(jìn)行實(shí)時(shí)處理。實(shí)驗(yàn)結(jié)果發(fā)現(xiàn)該系統(tǒng)獲取視頻圖像的延遲很低,并且擁有對(duì)大量高清圖像同時(shí)進(jìn)行實(shí)時(shí)邊緣提取的能力。
關(guān)鍵詞:FPGA;網(wǎng)絡(luò)攝像頭;RTSP;Sobel;異構(gòu)
中圖分類號(hào):TN911 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)34-0219-03
Abstract:In order to achieve high-efficiency, high-precision image processing for capturing the video stream of IP camera, a data-driven heterogeneous system with Sobel edge detection is designed to support RTSP protocol.The system can get 1080P, H.264 encoded video streams from sixteen IP cameras at the same time and also can process real-time Sobel edge detection of video streams base on arm from Hisilicon and ZC702 FPGA form Xilinx. Experimental results show that the system has low delay of capturing video streams and can real-time edge detection for a large number of high-definition images at the same time.
Key words:FPGA; IPC; RTSP; Sobel; heterogeneous
1 概述
實(shí)時(shí)圖像處理是實(shí)現(xiàn)實(shí)時(shí)物體檢測(cè)中的重要一環(huán),其廣泛應(yīng)用于諸多領(lǐng)域,比如先進(jìn)駕駛輔助系統(tǒng)(Advanced Driver Assistance System, ADAS)、工業(yè)機(jī)器人、智能安防等。圖像處理技術(shù)的主要關(guān)鍵點(diǎn)是超高的實(shí)時(shí)性和結(jié)果的準(zhǔn)確性。而邊緣提取是圖像處理中最基礎(chǔ)的一步,由Irwin Sobel提出的Sobel算法又是眾多邊緣檢測(cè)算法中較簡(jiǎn)單高效的一種,對(duì)噪聲具有平滑作用[1],較為適合在嵌入式系統(tǒng)中應(yīng)用。
異構(gòu)處理系統(tǒng)是隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展出現(xiàn)的一種能夠突破單一平臺(tái)發(fā)展瓶頸,有效解決能耗高、擴(kuò)展性低等問題的一種技術(shù)。近年來,基于CPU和GPU的異構(gòu)圖像處理系統(tǒng)應(yīng)用正蓬勃發(fā)展。本文實(shí)現(xiàn)的Sobel邊緣檢測(cè)的異構(gòu)系統(tǒng)是一種數(shù)據(jù)驅(qū)動(dòng)(Data-Drivern)型圖像處理應(yīng)用系統(tǒng)。主要使用現(xiàn)場(chǎng)可編程門陣列(Field Programmable Gate Array, FPGA)對(duì)Sobel算法進(jìn)行硬件實(shí)現(xiàn),并對(duì)海思解碼芯片hi3536為載體的開發(fā)板進(jìn)行編程,使其能獲取到網(wǎng)絡(luò)攝像頭(Internet Protocol Camra,IPC)的實(shí)時(shí)視頻流,為硬件加速器提供數(shù)據(jù)。該系統(tǒng)的最高性能可達(dá)同時(shí)對(duì)16路1080P、60幀的視頻進(jìn)行邊緣提取。
2 Sobel算法
在圖像中邊緣的像素值會(huì)發(fā)生顯著的變化,表示這一變化的方法就是導(dǎo)數(shù),所以一般我們用來尋找圖像邊緣的方法是對(duì)圖像進(jìn)行求導(dǎo),即使用一個(gè)卷積核對(duì)圖像進(jìn)行平面卷積處理,這樣可實(shí)現(xiàn)圖像求導(dǎo)的近似計(jì)算。
Sobel邊緣檢測(cè)算法在實(shí)現(xiàn)過程中,通過把檢測(cè)水平邊緣和豎直邊緣的2個(gè)Sobel算子作為卷積核分別與圖像中的每個(gè)像素點(diǎn)做卷積運(yùn)算,分別得到該圖像在水平方向上的梯度Gx和豎直方向上的梯度Gy。Sobel算子如圖1所示。
對(duì)于圖像上的每一個(gè)像素點(diǎn),結(jié)合以上兩個(gè)卷積處理后的結(jié)果可求出該點(diǎn)上的近似梯度:
我們也可以對(duì)其做出一個(gè)近似的轉(zhuǎn)換:G = |Gx| + |Gy|。
梯度值的大變化預(yù)示著圖像中內(nèi)容的顯著變化??稍O(shè)定一個(gè)合適的閾值T,如果G≥T 就可以認(rèn)為該點(diǎn)為邊緣點(diǎn)。判別出圖像中所有邊緣點(diǎn)后,我們可以把輸入的灰度圖像轉(zhuǎn)換為只包含邊緣信息的二值化圖像,即圖上一點(diǎn)A(x,y),它的梯度值G(x,y)若大于等于閾值T,則將該點(diǎn)的值置為1;反之,則置為0。
2 圖像邊緣提取異構(gòu)系統(tǒng)的實(shí)現(xiàn)
本異構(gòu)系統(tǒng)由深圳海思公司的hi3536芯片和Xilinx公司的ZC702型號(hào)的FPGA組合搭建而成。hi3536芯片主要負(fù)責(zé)獲取IPC的視頻流數(shù)據(jù)并實(shí)時(shí)解碼,F(xiàn)PGA主要負(fù)責(zé)對(duì)輸入的圖像進(jìn)行Sobel算法的加速運(yùn)算。通過使用本文編寫的能夠兼容大部分主流IPC的RTSP協(xié)議接口,再利用海思hi3536芯片的解碼能力,完成最高可同時(shí)接收并解碼16路H264或H265編碼、分辨率為1080P60幀的實(shí)時(shí)視頻流,再把解碼后得到的YUV格式圖像通過AXI-Stream總線直接傳遞到FPGA上的Sobel加速處理模塊,實(shí)現(xiàn)從前端IPC進(jìn)行數(shù)據(jù)采集后實(shí)時(shí)傳遞給硬件加速模塊的完整鏈路。這樣,使得整套系統(tǒng)更方便地接入到監(jiān)控系統(tǒng)中,大幅提升系統(tǒng)的實(shí)用性。該模塊整體的架構(gòu)如圖2所示。
2.1 基于ARM的前端數(shù)據(jù)采集模塊
為了更加體現(xiàn)本異構(gòu)系統(tǒng)的實(shí)用性,F(xiàn)PGA上的Sobel加速處理模塊的圖像輸入并不是由上位機(jī)選送事先采集好一張或多張圖片[2],而是采集于實(shí)際環(huán)境中的IPC。RTSP(Real Time Streaming Protocol,實(shí)時(shí)流媒體協(xié)議)[3] 是目前監(jiān)控行業(yè)內(nèi)廣泛采用的流媒體協(xié)議,所以為了能夠把我們的異構(gòu)系統(tǒng)對(duì)接進(jìn)絕大部分已存在的IPC監(jiān)控系統(tǒng),我們選用RTSP協(xié)議作為與IPC的對(duì)接接口。但由于現(xiàn)存的一些包含RTSP代碼的開源項(xiàng)目存在圖像延遲較高、圖像質(zhì)量不穩(wěn)定以及代碼可控性較差等問題,所以我們基于文獻(xiàn)[3]和Ffmpeg[4]中的RTSP部分,編寫了一個(gè)RTSP的客戶端程序,并主要通過調(diào)整視頻緩存塊(Cache Block)和協(xié)議解析速度, 針對(duì)1080P視頻流的傳輸延遲進(jìn)行優(yōu)化。使用本文編寫的RTSP客戶端代碼,在不損失視頻質(zhì)量和視頻流暢度的前提下,相比Ffmpeg等,大大降低了對(duì)RTSP協(xié)議解析和幀緩存帶來的圖像延遲,又提高了對(duì)視頻流獲取的可控性。在千兆局域網(wǎng)內(nèi),測(cè)試同時(shí)連接16路1080P、30fps(Frames Per Second,每秒傳輸幀數(shù))的IPC,所有畫面延遲都基本穩(wěn)定在160ms到175ms之間,配合海思hi3536的強(qiáng)大解碼性能,從IPC采集圖像數(shù)據(jù)到傳到Sobel加速處理模塊,之間的延遲可穩(wěn)定在200ms以內(nèi)。
如圖3是Ffmpeg中的RTSP客戶端、本文中使用的RTSP客戶端分別運(yùn)行在電腦端和ARM端時(shí),三者在畫面延遲方面的對(duì)比結(jié)果。其中,F(xiàn)fmpeg在使用時(shí),調(diào)用了參數(shù)“-fflags nobuffer”,不做流緩沖。延遲測(cè)試方式為將一臺(tái)運(yùn)行著計(jì)時(shí)秒表的電腦主機(jī)A作為信號(hào)源接入到一臺(tái)支持RTSP協(xié)議的H.264編碼設(shè)備上,利用該編碼設(shè)備將主機(jī)A的畫面進(jìn)行網(wǎng)絡(luò)轉(zhuǎn)播,再由接受測(cè)試的三種RTSP客戶終端同時(shí)接收下視頻流數(shù)據(jù),各自解碼后分別顯示在三塊顯示器上。同時(shí)拍攝下三塊顯示器上的畫面以及主機(jī)A直接輸出的畫面,再記錄照片中四塊顯示器上的秒表讀數(shù),進(jìn)行差值分析。由于海思hi3536芯片對(duì)H264、H265編碼的視頻流的高性能解碼能力,所以在實(shí)際使用中不需要做任何的視頻數(shù)據(jù)緩存,相比于在電腦端運(yùn)行的本文RTSP客戶端,進(jìn)一步加快了視頻流的實(shí)時(shí)性。
通過網(wǎng)絡(luò)獲取到的視頻流是H264或H265編碼的原始數(shù)據(jù),如果需要對(duì)圖像進(jìn)行識(shí)別,至少需要把原始數(shù)據(jù)解碼為YUV格式的圖像數(shù)據(jù)。因?yàn)楹K及雽?dǎo)體公司在全球視頻監(jiān)控領(lǐng)域的核心地位[5],這里我們選用基于該公司型號(hào)為hi3536的解碼專用芯片的開發(fā)板,板上具有全雙工千兆網(wǎng)口,且對(duì)于1080P的圖像分辨率最高的解碼性能是同時(shí)16路、60幀的H.264/H.265實(shí)時(shí)解碼。通過研究海思芯片的SDK(Software Development Kit,軟件開發(fā)工具包),結(jié)合經(jīng)過交叉編譯后的本文中的RTSP客戶端函數(shù)庫,編寫了運(yùn)行在ARM上的可接收IPC視頻流的多線程解碼程序,同時(shí)接收視頻流數(shù)為可調(diào)參數(shù),最大值不能超過16。解碼后得到的就是YUV420格式的視頻流。由于受限于海思解碼芯片的能力,對(duì)于本程序,只測(cè)試了同時(shí)接收16路1080P視頻流情況下的圖像穩(wěn)定性和畫面延遲。測(cè)試結(jié)果證明本程序完全可以支持這種使用情況。而由于之后的圖像處理需要的是YUV格式的灰度圖像數(shù)據(jù),本程序的最后部分,是對(duì)最多16路解碼后的圖像數(shù)據(jù)提取YUV中的Y分量,即亮度分量,將其通過AXI-Stream總線異步發(fā)送至FPGA上預(yù)先設(shè)計(jì)好并通過驗(yàn)證的Soble加速處理內(nèi)核上。該前端數(shù)據(jù)采集模塊整體的架構(gòu)如圖4所示。
2.2 基于FPGA的Sobel硬件加速處理模塊
本異構(gòu)系統(tǒng)在FPGA上實(shí)現(xiàn)Sobel邊緣檢測(cè)功能,并且輸入圖像的大小以及Sobel邊緣提取的閾值T都是可配置的。該模塊有下列幾個(gè)主要部分:與ARM數(shù)據(jù)交互模塊,數(shù)據(jù)接收模塊,梯度計(jì)算模塊和最后的閾值比較輸出模塊。如圖5是Sobel加速處理模塊的整體架構(gòu)框圖。各個(gè)模塊均使用Verilog語言實(shí)現(xiàn)[6],并使用Synopsis公司的VCS工具進(jìn)行功能仿真。該加速模塊實(shí)現(xiàn)了數(shù)據(jù)驅(qū)動(dòng)的工作方式,所謂數(shù)據(jù)驅(qū)動(dòng),指的是當(dāng)系統(tǒng)處于工作狀態(tài)時(shí),只要有數(shù)據(jù)輸入系統(tǒng),Sobel加速處理模塊就能夠?qū)斎氲臄?shù)據(jù)進(jìn)行實(shí)時(shí)處理后輸出結(jié)果,數(shù)據(jù)輸入停止時(shí),處理工作也會(huì)暫停。下面逐個(gè)介紹不同的功能模塊
2.1.1 FIFO模塊
與ARM的數(shù)據(jù)交互是通過AXI-Stream總線實(shí)現(xiàn)的[7],AXI-Stream總線是AXI4總線的簡(jiǎn)化版,而AXI4總線是由ARM公司研發(fā)推出的AMBA(Advanced Microcontroller Bus Architecture)片上總線。AXI-Stream總線由于整個(gè)通道只有數(shù)據(jù)傳輸通道,而不需要傳輸?shù)刂返耐ǖ?,所以相?duì)AXI總線來說要簡(jiǎn)便很多。我們使用AXI-Stream總線向ARM和DDR申請(qǐng)數(shù)據(jù),這樣就可以大大提高數(shù)據(jù)的傳輸效率。并且為了防止數(shù)據(jù)出現(xiàn)遺漏或者丟失,我們采用FIFO(First-In First-Out,先入先出)存儲(chǔ)器去同步數(shù)據(jù)的信號(hào)。
Sobel加速處理模塊被設(shè)計(jì)為數(shù)據(jù)驅(qū)動(dòng)的工作形式,當(dāng)系統(tǒng)被配置為工作模式時(shí),只要AXI-Stream總線上有數(shù)據(jù)傳輸,加速器模塊就會(huì)進(jìn)行計(jì)算,這樣減少了由上位機(jī)的控制和交互的時(shí)間成本。
2.1.2 數(shù)據(jù)排列模塊
數(shù)據(jù)排列(Ram Array)模塊用于接收數(shù)據(jù)并將其分別存放在不同的緩存中,方便后續(xù)的梯度計(jì)算模塊進(jìn)行數(shù)據(jù)的讀取和并行計(jì)算。輸入為AXI-Stream總線串行輸入的數(shù)據(jù)流,輸出的數(shù)據(jù)則被調(diào)整成便于梯度計(jì)算模塊進(jìn)行并行卷積計(jì)算的格式。同時(shí),數(shù)據(jù)排列模塊是一個(gè)可配置處理圖像大小的模塊,圖像的長寬都可由上位機(jī)進(jìn)行配置,這樣使得整個(gè)系統(tǒng)處理的圖像大小都是可控的。該模塊所支持的最大圖像分辨率為2048×2048。
2.1.3 梯度計(jì)算模塊
梯度計(jì)算模塊是一個(gè)進(jìn)行卷積計(jì)算的模塊。基于文獻(xiàn)[8]中提出的方案,本文使用了并行計(jì)算的方式,并采用數(shù)據(jù)移位(shift)的方法進(jìn)行乘法計(jì)算,左移一位即乘以2,這樣可以大量減少硬件資源的使用,大幅提高Sobel邊緣檢測(cè)中水平方向和豎直方向的梯度向量的計(jì)算速度。該模塊邏輯圖如圖5(b)所示。所以在這種計(jì)算結(jié)構(gòu)下,使用3個(gè)時(shí)鐘周期就可以計(jì)算出一個(gè)3×3卷積框中最后的梯度值,并將梯度值傳輸給閾值比較模塊進(jìn)行最后結(jié)果的運(yùn)算。
2.1.4 閾值比較輸出模塊
從梯度計(jì)算模塊輸出的計(jì)算完的梯度值,會(huì)在閾值比較模塊中與設(shè)定好的閾值T進(jìn)行對(duì)比。并且在這個(gè)模塊中存在一個(gè)狀態(tài)機(jī)用于控制輸出的值,如果梯度值大于等于閾值T,則輸出1;反之輸出0。由于卷積的原因,圖像的長寬會(huì)分別下降1個(gè)像素點(diǎn),所以為了使得上位機(jī)收到的還是規(guī)整的圖片,我們還在這個(gè)模塊中對(duì)這缺失的一行一列進(jìn)行了補(bǔ)0操作,以保證最后輸出圖像的尺寸依舊與原圖的尺寸相同。
如圖6是對(duì)本文中的Sobel加速處理模塊使用VCS工具進(jìn)行行為級(jí)仿真得出的波形圖。
3 結(jié)論
圖像邊緣提取是圖像處理、物體識(shí)別中很重要的一環(huán),本文以Sobel邊緣提取為例,通過利用本文中編寫的RTSP客戶端協(xié)議和基于FPGA實(shí)現(xiàn)的Sobel硬件加速器,實(shí)現(xiàn)了一個(gè)通過網(wǎng)線就可接入到監(jiān)控系統(tǒng)等各個(gè)擁有IPC的網(wǎng)絡(luò)中,并對(duì)高畫質(zhì)視頻流進(jìn)行高實(shí)時(shí)性高精度的邊緣提取的數(shù)據(jù)驅(qū)動(dòng)型異構(gòu)系統(tǒng)。本設(shè)計(jì)采用模塊化的方式,且對(duì)接IPC的路數(shù)、圖像分辨率等參數(shù)均為可調(diào)參數(shù),并專門優(yōu)化了硬件資源占用率。在實(shí)際測(cè)試中也達(dá)到了設(shè)計(jì)初時(shí)的目標(biāo),有助于進(jìn)一步開發(fā)可接入監(jiān)控系統(tǒng)的人臉識(shí)別、車牌識(shí)別等物體識(shí)別異構(gòu)系統(tǒng)。
參考文獻(xiàn):
[1] Tsai M Y, Yost M G, Wu C F, et al. Line profile reconstruction: validation and comparison of reconstruction methods[J]. Atmospheric Environment, 2001, 35(28):4791-4799.
[2] 張麗紅, 凌朝東. 基于FPGA的Sobel邊緣檢測(cè)應(yīng)用[J]. 電子技術(shù)應(yīng)用, 2011, 37(8):26-29.
[3] Schulzrinne H, Rao A, Lanphier R. Real Time Streaming Protocol (RTSP)[J]. Rfc, 1998.
[4] Surhone L M, Tennoe M T, Henssonow S F, et al. Ffmpeg[Z]. 2010.
[5] 康毅. 海思IVE技術(shù)開啟智能視頻監(jiān)控新紀(jì)元[J]. 中國公共安全:學(xué)術(shù)版, 2014(22):204-204.
[6] 夏宇聞. Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程[J]. 2003(6):51-51.
[7] He L, Zhao H, Shao L. FPGA Video System Based on AXI4-Stream Bus[J]. Microcontrollers & Embedded Systems, 2015.
[8] 朱學(xué)亮, 柴志雷, 鐘傳杰,等. 基于FPGA的圖像卷積IP核的設(shè)計(jì)與實(shí)現(xiàn)[J]. 微電子學(xué)與計(jì)算機(jī), 2011, 28(6):188-192.