張俊濤,王園偉,龐 多(.陜西科技大學 電氣與信息工程學院,陜西 西安 700;.北京航空航天大學 可靠性與系統工程學院,北京 009)
一種硬件加速OpenCV的圖像處理方法研究
張俊濤1,王園偉1,龐 多2
(1.陜西科技大學 電氣與信息工程學院,陜西 西安 710021;2.北京航空航天大學 可靠性與系統工程學院,北京 10091)
研究了一種基于Vivado HLS加速OpenCV程序的方法,其核心是利用Xilinx高層次綜合工具Vivado HLS,將C++編寫的OpenCV程序按照Vivado HLS處理規范進行修改,進而將代碼轉換為硬件描述語言,可快速生成IP核。結合Xilinx Zynq SoC架構和其視頻圖像處理方面的優勢,通過軟硬件協同的方法,實現OpenCV程序算法向高性能處理平臺Zynq SoC系統的移植和加速。該方法對圖像處理軟件設計的硬件化加速具有重要的應用價值。
開源計算機視覺;圖像處理;高層次綜合;加速
開源計算機視覺庫 OpenCV是目前最受歡迎的開源計算機視覺軟件函數包[1],為計算機視覺的研究和圖像處理應用提供了很大的便利。然而,OpenCV程序算法都是在PC上通過軟件運行的方式實現,存在處理實時性差、適用范圍有限等問題,尤其是在高清圖像處理方面經常受到外部存儲器性能的限制,存儲帶寬經常成為其程序優化的瓶頸,并且存儲訪問也限制了功耗效率[2]。
基于FPGA可用全硬件實現圖像處理算法,在嵌入式系統應用中得天獨厚,所以很值得嘗試利用可編程邏輯硬件來加速OpenCV。Vivado HLS是Xilinx最新開發的一種高級綜合工具,可以直接將C/C++編寫的算法程序進行仿真綜合成RTL,從而可以在FPGA上實現圖像處理算法。Vivado HLS具有專門的圖像處理庫,與OpenCV函數對應。
本文主要研究高層次綜合工具 Vivado HLS及 Xilinx Zynq SOC全可編程處理平臺、Vivado圖像視頻函數庫,并通過高級綜合工具Vivado HLS將OpenCV轉化為RTL處理流程,在Xilinx Zynq SoC系列全可編程處理平臺上實現OpenCV程序算法的硬件加速。以邊緣檢測為例說明加速流程。
Xilinx Zynq SOC是具有 ARM+FPGA架構的全可編程處理器,集成了雙核Cortex-A9處理系統、FPGA邏輯和一些關鍵外設,提供了軟硬件和I/O可編程性。Zynq SOC具有64位高性能端口,可以實現對外部存儲器的訪問;還有32位通用端口實現控制寄存器的訪問,并且使用AXI4-Stream能更好地解決高清視頻流速度問題。處理子系統、FPGA邏輯和外設在Zynq SOC中的高度集成性確保了相對于采用分離式組建設計的系統而言提高數據傳輸速率,高度的軟硬件集成性能幫助設計人員實現極為高效的嵌入式視覺系統,降低功耗和材料清單成本。Zynq SoC視頻圖像處理架構如圖 1所示[3]。為了全面利用 Zynq SOC的諸多性能,Xilinx推出了以 IP設計為中心的設計環境Vivado設計套件,該套件可加速集成和設計實現。而Vivado HLS作為該套件的一個重要組件,能幫助設計人員將采用C/C++語言的開發的算法編譯為RTL,以便在 FPGA邏輯中運行。在圖像處理復雜算法中,通過C/C++創建算法原型,再利用Vivado HLS將算法或者算法的一部分編譯為RTL,進而確定哪些函數更適合在FPGA邏輯中運行,哪些函數適合在ARM上運行,這樣更能集中精力設計出最佳性能的基于Zynq SOC的視覺系統。利用高級綜合工具 Vivado HLS開發的流程如圖2所示。

圖2 Vivado HLS設計和處理過程
對OpenCV程序的硬件加速,實際上是將OpenCV轉化為可綜合的代碼,用可綜合的Vivado HLS視頻庫函數代替OpenCV函數。VIvado HLS具有專門支持OpenCV的視頻函數庫,這些函數可以代替OpenCV函數,并且能很好地綜合為 RTl代碼,進而可以利用 Zynq全可編程SoC的優勢實現圖像或者視頻的處理。
2.1 OpenCV與Vivado HLS視頻函數庫
Vivado HLS高級語言綜合工具包含了專門的OpenCV視頻庫,通過HLS庫中的函數代替原本 OpenCV算法程序中的函數便可以完成由 OpenCV到 HLS的轉化,在 Zynq上硬件化后,提高OpenCV應用效率[4]。
OpenCV經常用到的數據類型有 Mat、CvMat和IplImage[5],VivadoHLS視頻處理函數庫使用 hls::Mat<>數據類型,這種類型用于模型化視頻像素流處理,等同于hls::steam<>流的類型,而不是OpenCV中在外部 memory中存儲的matrix矩陣類型。因此,在用Vivado HLS實現OpenCV的設計中,需要將輸入和輸出HLS可綜合的視頻設計接口修改為 Video stream接口,也就是采用HLS提供的 Video接口可綜合函數,實現 AXI4 Video stream到Vivado HLS中hls::Mat<>類型的轉換[6]。
從軟件到RTL過程中,最關鍵的是接口問題,而HLS創建的硬件專注于硬件接口,Vivado HLS支持以相對較小的可以輕松創建AXI的從接口,從而使硬件加速器設計變得簡單。在視頻處理中,Xilinx通過 AXI4流協議來實現像素通信,以更小的元素來傳輸視頻幀,可以不用知道視頻流的大小或者圖片的尺寸,大大簡化了視頻處理計算。
2.2 OpenCV程序修改方法
使用HLS加速OpenCV時,需要先用I/O函數提取FPGA實現部分,用可綜合的Vivado HLS函數庫函數代替OpenCV函數。在Zynq開發中使用Vivado HLS實現OpenCV的設計流程如下[7]:
首先,開發 OpenCV的應用,編寫源碼和測試文件,并且采用C++編譯器進行編譯、仿真和調試,產生可執行文件。
其次,使用I/O函數抽取FPGA實現部分,并且使用可綜合的 Vivado HLS庫函數代碼代替 OpenCV函數的調用。其流程如圖3所示。

圖3 OpenCV函數程序到HLS函數程序轉化
最后,運用HLS生成的RTL代碼,在Vivado HLS工程中啟動co-sim,HLS工具自動重用OpenCV的測試激勵驗證產生的RTL代碼。在Xilinx的Vivado集成開發環境中做RTL集成和SOC/FPGA實現。
本文通過邊緣檢測算法來介紹硬件加速OpenCV應用。根據前面介紹的方法,利用OpenCV庫函數先設計出邊緣檢測算法原型,如圖4所示,并使用基于OpenCV的測試激勵驗證這個算法。再改寫前面設計好的OpenCV算法程序,按照視頻數據鏈的形式重新改寫,如圖5所示,這樣與HLS視頻庫處理機制相同,方便函數替換。最后將改寫好的 OpenCV程序中的函數替換為HLS提供的相應功能的函數,如圖6所示,并且使用Vivado HLS工具綜合,綜合之后生成 IP,在 Vivado集成開發環境中以IP為核心完成設計,在SDK中利用原OpenCV測試激勵進行測試,基于邊緣設計應用測試結果如圖7所示。

圖4 OpenCV原型設計

圖5 基于視頻數據鏈的OpenCV程序

圖6 函數替換后的可綜合的代碼
使用高層次綜合工具 Vivado HLS結合邏輯可編程FPGA或者 Zynq SOC實現 OpenCV在高分辨幀率的實時視頻處理是解決目前OpenCV軟件程序速度優化瓶頸問題的有效方法。采用Vivado HLS視頻庫能加快OpenCV函數向可綜合邏輯器件 Zynq SOC或 FPGA的映射。同樣,也可以利用 Zynq SOC結合 Vivado HLS工具的方法,來硬件加速其他計算機軟件設計。該方法對加速優化高速算法軟件設計具有一定的參考價值。

圖7 邊緣檢測結果
[1]張秀榮,孟和達來.數字圖像處理系統開發與研究[J].湖南師范大學學報(自然科學版),2011,34(6):35-39.
[2]BRADSKIG,KACHLER A.Learning OpenCV(1st Edition)[M].O′Reily Media,Inc.,2008.
[3]Xilinx Inc.Accelerating OpenCV applications with zynq-7000all programmable SoC using Vivado HLS video libraries[Z].http://www.xilinx.com/support/documentation/application_notes/xapp1167.pdf.2014.
[4]Xilinx Inc.Vivado design suite tutorial high-level synthesis[Z].http://www.xilinx.com/support/documentation/sw_manuals/xilinx 2012_4/ug871-vivadohigh-level-synthesis-tutorial.pdf.2014.
[5]郭暉,陳光.基于 OpenCV的視頻圖像處理應用研究[J].微型機與應用,2010,29(21):14-20.
[6]叢秋波.Vivado設計套件將可編程系統集成度和實施速度提升 4倍[J].電子設計技術,2012(6):22-24.
[7]何賓,張艷輝.Xilinx FPGA數字信號處理權威指南[M].北京:清華大學出版社,2014.
A method to accelerate the OpenCV program in image processing
Zhang Juntao1,Wang Yuanwei1,Pang Duo2
(1.School of Electricity and Information Engineering,Shanxi Uiniversity of Science and Technology,Xi′an 710021,China;2.School of Reliability and Systems Engineering,Beihang University,Beijing 100191,China)
This paper introduced a method to accelerate the OpenCV program based on Vivado HLS.The core of the method is that with the High-level synthesis tools Vivado HLS,and OpenCV written in C++program will be modificated according to Vivado HLS processing structure,which converts the code to HDL and may generate IP core.Considering the Xilinx Zynq SoC architecture and its advantages,with this method of synergy from software and hardware,OpenCV program algorithm can be transplantated to the high performance processing platform Zynq SoC system and accelerate the implementation.This method has a certain reference value to software design of high speed optimization in image processing.
OpenCV;image processing;vivado HLS;accelerate
TN851
A
1674-7720(2015)22-0041-03
張俊濤,王園偉,龐多.一種硬件加速OpenCV的圖像處理方法研究[J].微型機與應用,2015,34(22):41-43.
2015-08-21)
張俊濤(1966-),男,教授,碩士生導師,主要研究方向:軟件無線電、信號與信號處理、EDA技術及應用。
王園偉(1989-),通信作者,男,碩士研究生,主要研究方向:嵌入式應用、EDA 技術及應用。E-mail:455069997@qq.com。
龐多(1989-),女,碩士研究生,主要研究方向:系統工程,可靠性。