孫志豪+徐政+石潤彬+吳晨健
摘要:為了實現直接對網絡攝像監(jiān)控系統(tǒng)進行視頻畫面抓取并進行高效率、高精度的圖像處理,設計了一個支持RTSP協議、可進行Sobel邊緣檢測的數據驅動型異構系統(tǒng)?;诤K脊镜膆i3536芯片,該系統(tǒng)可同時獲取16路1080P、H.264編碼的網絡攝像頭的視頻圖像,并使用Xilinx公司的ZC702型號FPGA為載體實現的Sobel邊緣檢測加速器對視頻圖像進行實時處理。實驗結果發(fā)現該系統(tǒng)獲取視頻圖像的延遲很低,并且擁有對大量高清圖像同時進行實時邊緣提取的能力。
關鍵詞:FPGA;網絡攝像頭;RTSP;Sobel;異構
中圖分類號:TN911 文獻標識碼:A 文章編號: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 概述
實時圖像處理是實現實時物體檢測中的重要一環(huán),其廣泛應用于諸多領域,比如先進駕駛輔助系統(tǒng)(Advanced Driver Assistance System, ADAS)、工業(yè)機器人、智能安防等。圖像處理技術的主要關鍵點是超高的實時性和結果的準確性。而邊緣提取是圖像處理中最基礎的一步,由Irwin Sobel提出的Sobel算法又是眾多邊緣檢測算法中較簡單高效的一種,對噪聲具有平滑作用[1],較為適合在嵌入式系統(tǒng)中應用。
異構處理系統(tǒng)是隨著計算機技術的飛速發(fā)展出現的一種能夠突破單一平臺發(fā)展瓶頸,有效解決能耗高、擴展性低等問題的一種技術。近年來,基于CPU和GPU的異構圖像處理系統(tǒng)應用正蓬勃發(fā)展。本文實現的Sobel邊緣檢測的異構系統(tǒng)是一種數據驅動(Data-Drivern)型圖像處理應用系統(tǒng)。主要使用現場可編程門陣列(Field Programmable Gate Array, FPGA)對Sobel算法進行硬件實現,并對海思解碼芯片hi3536為載體的開發(fā)板進行編程,使其能獲取到網絡攝像頭(Internet Protocol Camra,IPC)的實時視頻流,為硬件加速器提供數據。該系統(tǒng)的最高性能可達同時對16路1080P、60幀的視頻進行邊緣提取。
2 Sobel算法
在圖像中邊緣的像素值會發(fā)生顯著的變化,表示這一變化的方法就是導數,所以一般我們用來尋找圖像邊緣的方法是對圖像進行求導,即使用一個卷積核對圖像進行平面卷積處理,這樣可實現圖像求導的近似計算。
Sobel邊緣檢測算法在實現過程中,通過把檢測水平邊緣和豎直邊緣的2個Sobel算子作為卷積核分別與圖像中的每個像素點做卷積運算,分別得到該圖像在水平方向上的梯度Gx和豎直方向上的梯度Gy。Sobel算子如圖1所示。
對于圖像上的每一個像素點,結合以上兩個卷積處理后的結果可求出該點上的近似梯度:
我們也可以對其做出一個近似的轉換:G = |Gx| + |Gy|。
梯度值的大變化預示著圖像中內容的顯著變化。可設定一個合適的閾值T,如果G≥T 就可以認為該點為邊緣點。判別出圖像中所有邊緣點后,我們可以把輸入的灰度圖像轉換為只包含邊緣信息的二值化圖像,即圖上一點A(x,y),它的梯度值G(x,y)若大于等于閾值T,則將該點的值置為1;反之,則置為0。
2 圖像邊緣提取異構系統(tǒng)的實現
本異構系統(tǒng)由深圳海思公司的hi3536芯片和Xilinx公司的ZC702型號的FPGA組合搭建而成。hi3536芯片主要負責獲取IPC的視頻流數據并實時解碼,FPGA主要負責對輸入的圖像進行Sobel算法的加速運算。通過使用本文編寫的能夠兼容大部分主流IPC的RTSP協議接口,再利用海思hi3536芯片的解碼能力,完成最高可同時接收并解碼16路H264或H265編碼、分辨率為1080P60幀的實時視頻流,再把解碼后得到的YUV格式圖像通過AXI-Stream總線直接傳遞到FPGA上的Sobel加速處理模塊,實現從前端IPC進行數據采集后實時傳遞給硬件加速模塊的完整鏈路。這樣,使得整套系統(tǒng)更方便地接入到監(jiān)控系統(tǒng)中,大幅提升系統(tǒng)的實用性。該模塊整體的架構如圖2所示。
2.1 基于ARM的前端數據采集模塊
為了更加體現本異構系統(tǒng)的實用性,FPGA上的Sobel加速處理模塊的圖像輸入并不是由上位機選送事先采集好一張或多張圖片[2],而是采集于實際環(huán)境中的IPC。RTSP(Real Time Streaming Protocol,實時流媒體協議)[3] 是目前監(jiān)控行業(yè)內廣泛采用的流媒體協議,所以為了能夠把我們的異構系統(tǒng)對接進絕大部分已存在的IPC監(jiān)控系統(tǒng),我們選用RTSP協議作為與IPC的對接接口。但由于現存的一些包含RTSP代碼的開源項目存在圖像延遲較高、圖像質量不穩(wěn)定以及代碼可控性較差等問題,所以我們基于文獻[3]和Ffmpeg[4]中的RTSP部分,編寫了一個RTSP的客戶端程序,并主要通過調整視頻緩存塊(Cache Block)和協議解析速度, 針對1080P視頻流的傳輸延遲進行優(yōu)化。使用本文編寫的RTSP客戶端代碼,在不損失視頻質量和視頻流暢度的前提下,相比Ffmpeg等,大大降低了對RTSP協議解析和幀緩存帶來的圖像延遲,又提高了對視頻流獲取的可控性。在千兆局域網內,測試同時連接16路1080P、30fps(Frames Per Second,每秒傳輸幀數)的IPC,所有畫面延遲都基本穩(wěn)定在160ms到175ms之間,配合海思hi3536的強大解碼性能,從IPC采集圖像數據到傳到Sobel加速處理模塊,之間的延遲可穩(wěn)定在200ms以內。
如圖3是Ffmpeg中的RTSP客戶端、本文中使用的RTSP客戶端分別運行在電腦端和ARM端時,三者在畫面延遲方面的對比結果。其中,Ffmpeg在使用時,調用了參數“-fflags nobuffer”,不做流緩沖。延遲測試方式為將一臺運行著計時秒表的電腦主機A作為信號源接入到一臺支持RTSP協議的H.264編碼設備上,利用該編碼設備將主機A的畫面進行網絡轉播,再由接受測試的三種RTSP客戶終端同時接收下視頻流數據,各自解碼后分別顯示在三塊顯示器上。同時拍攝下三塊顯示器上的畫面以及主機A直接輸出的畫面,再記錄照片中四塊顯示器上的秒表讀數,進行差值分析。由于海思hi3536芯片對H264、H265編碼的視頻流的高性能解碼能力,所以在實際使用中不需要做任何的視頻數據緩存,相比于在電腦端運行的本文RTSP客戶端,進一步加快了視頻流的實時性。
通過網絡獲取到的視頻流是H264或H265編碼的原始數據,如果需要對圖像進行識別,至少需要把原始數據解碼為YUV格式的圖像數據。因為海思半導體公司在全球視頻監(jiān)控領域的核心地位[5],這里我們選用基于該公司型號為hi3536的解碼專用芯片的開發(fā)板,板上具有全雙工千兆網口,且對于1080P的圖像分辨率最高的解碼性能是同時16路、60幀的H.264/H.265實時解碼。通過研究海思芯片的SDK(Software Development Kit,軟件開發(fā)工具包),結合經過交叉編譯后的本文中的RTSP客戶端函數庫,編寫了運行在ARM上的可接收IPC視頻流的多線程解碼程序,同時接收視頻流數為可調參數,最大值不能超過16。解碼后得到的就是YUV420格式的視頻流。由于受限于海思解碼芯片的能力,對于本程序,只測試了同時接收16路1080P視頻流情況下的圖像穩(wěn)定性和畫面延遲。測試結果證明本程序完全可以支持這種使用情況。而由于之后的圖像處理需要的是YUV格式的灰度圖像數據,本程序的最后部分,是對最多16路解碼后的圖像數據提取YUV中的Y分量,即亮度分量,將其通過AXI-Stream總線異步發(fā)送至FPGA上預先設計好并通過驗證的Soble加速處理內核上。該前端數據采集模塊整體的架構如圖4所示。
2.2 基于FPGA的Sobel硬件加速處理模塊
本異構系統(tǒng)在FPGA上實現Sobel邊緣檢測功能,并且輸入圖像的大小以及Sobel邊緣提取的閾值T都是可配置的。該模塊有下列幾個主要部分:與ARM數據交互模塊,數據接收模塊,梯度計算模塊和最后的閾值比較輸出模塊。如圖5是Sobel加速處理模塊的整體架構框圖。各個模塊均使用Verilog語言實現[6],并使用Synopsis公司的VCS工具進行功能仿真。該加速模塊實現了數據驅動的工作方式,所謂數據驅動,指的是當系統(tǒng)處于工作狀態(tài)時,只要有數據輸入系統(tǒng),Sobel加速處理模塊就能夠對輸入的數據進行實時處理后輸出結果,數據輸入停止時,處理工作也會暫停。下面逐個介紹不同的功能模塊
2.1.1 FIFO模塊
與ARM的數據交互是通過AXI-Stream總線實現的[7],AXI-Stream總線是AXI4總線的簡化版,而AXI4總線是由ARM公司研發(fā)推出的AMBA(Advanced Microcontroller Bus Architecture)片上總線。AXI-Stream總線由于整個通道只有數據傳輸通道,而不需要傳輸地址的通道,所以相對AXI總線來說要簡便很多。我們使用AXI-Stream總線向ARM和DDR申請數據,這樣就可以大大提高數據的傳輸效率。并且為了防止數據出現遺漏或者丟失,我們采用FIFO(First-In First-Out,先入先出)存儲器去同步數據的信號。
Sobel加速處理模塊被設計為數據驅動的工作形式,當系統(tǒng)被配置為工作模式時,只要AXI-Stream總線上有數據傳輸,加速器模塊就會進行計算,這樣減少了由上位機的控制和交互的時間成本。
2.1.2 數據排列模塊
數據排列(Ram Array)模塊用于接收數據并將其分別存放在不同的緩存中,方便后續(xù)的梯度計算模塊進行數據的讀取和并行計算。輸入為AXI-Stream總線串行輸入的數據流,輸出的數據則被調整成便于梯度計算模塊進行并行卷積計算的格式。同時,數據排列模塊是一個可配置處理圖像大小的模塊,圖像的長寬都可由上位機進行配置,這樣使得整個系統(tǒng)處理的圖像大小都是可控的。該模塊所支持的最大圖像分辨率為2048×2048。
2.1.3 梯度計算模塊
梯度計算模塊是一個進行卷積計算的模塊。基于文獻[8]中提出的方案,本文使用了并行計算的方式,并采用數據移位(shift)的方法進行乘法計算,左移一位即乘以2,這樣可以大量減少硬件資源的使用,大幅提高Sobel邊緣檢測中水平方向和豎直方向的梯度向量的計算速度。該模塊邏輯圖如圖5(b)所示。所以在這種計算結構下,使用3個時鐘周期就可以計算出一個3×3卷積框中最后的梯度值,并將梯度值傳輸給閾值比較模塊進行最后結果的運算。
2.1.4 閾值比較輸出模塊
從梯度計算模塊輸出的計算完的梯度值,會在閾值比較模塊中與設定好的閾值T進行對比。并且在這個模塊中存在一個狀態(tài)機用于控制輸出的值,如果梯度值大于等于閾值T,則輸出1;反之輸出0。由于卷積的原因,圖像的長寬會分別下降1個像素點,所以為了使得上位機收到的還是規(guī)整的圖片,我們還在這個模塊中對這缺失的一行一列進行了補0操作,以保證最后輸出圖像的尺寸依舊與原圖的尺寸相同。
如圖6是對本文中的Sobel加速處理模塊使用VCS工具進行行為級仿真得出的波形圖。
3 結論
圖像邊緣提取是圖像處理、物體識別中很重要的一環(huán),本文以Sobel邊緣提取為例,通過利用本文中編寫的RTSP客戶端協議和基于FPGA實現的Sobel硬件加速器,實現了一個通過網線就可接入到監(jiān)控系統(tǒng)等各個擁有IPC的網絡中,并對高畫質視頻流進行高實時性高精度的邊緣提取的數據驅動型異構系統(tǒng)。本設計采用模塊化的方式,且對接IPC的路數、圖像分辨率等參數均為可調參數,并專門優(yōu)化了硬件資源占用率。在實際測試中也達到了設計初時的目標,有助于進一步開發(fā)可接入監(jiān)控系統(tǒng)的人臉識別、車牌識別等物體識別異構系統(tǒng)。
參考文獻:
[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邊緣檢測應用[J]. 電子技術應用, 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技術開啟智能視頻監(jiān)控新紀元[J]. 中國公共安全:學術版, 2014(22):204-204.
[6] 夏宇聞. Verilog數字系統(tǒng)設計教程[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] 朱學亮, 柴志雷, 鐘傳杰,等. 基于FPGA的圖像卷積IP核的設計與實現[J]. 微電子學與計算機, 2011, 28(6):188-192.