張俊濤,王園偉,龐 多(.陜西科技大學 電氣與信息工程學院,陜西 西安 700;.北京航空航天大學 可靠性與系統(tǒng)工程學院,北京 009)
一種硬件加速OpenCV的圖像處理方法研究
張俊濤1,王園偉1,龐 多2
(1.陜西科技大學 電氣與信息工程學院,陜西 西安 710021;2.北京航空航天大學 可靠性與系統(tǒng)工程學院,北京 10091)
研究了一種基于Vivado HLS加速OpenCV程序的方法,其核心是利用Xilinx高層次綜合工具Vivado HLS,將C++編寫的OpenCV程序按照Vivado HLS處理規(guī)范進行修改,進而將代碼轉換為硬件描述語言,可快速生成IP核。結合Xilinx Zynq SoC架構和其視頻圖像處理方面的優(yōu)勢,通過軟硬件協(xié)同的方法,實現(xiàn)OpenCV程序算法向高性能處理平臺Zynq SoC系統(tǒng)的移植和加速。該方法對圖像處理軟件設計的硬件化加速具有重要的應用價值。
開源計算機視覺;圖像處理;高層次綜合;加速
開源計算機視覺庫 OpenCV是目前最受歡迎的開源計算機視覺軟件函數(shù)包[1],為計算機視覺的研究和圖像處理應用提供了很大的便利。然而,OpenCV程序算法都是在PC上通過軟件運行的方式實現(xiàn),存在處理實時性差、適用范圍有限等問題,尤其是在高清圖像處理方面經(jīng)常受到外部存儲器性能的限制,存儲帶寬經(jīng)常成為其程序優(yōu)化的瓶頸,并且存儲訪問也限制了功耗效率[2]。
基于FPGA可用全硬件實現(xiàn)圖像處理算法,在嵌入式系統(tǒng)應用中得天獨厚,所以很值得嘗試利用可編程邏輯硬件來加速OpenCV。Vivado HLS是Xilinx最新開發(fā)的一種高級綜合工具,可以直接將C/C++編寫的算法程序進行仿真綜合成RTL,從而可以在FPGA上實現(xiàn)圖像處理算法。Vivado HLS具有專門的圖像處理庫,與OpenCV函數(shù)對應。
本文主要研究高層次綜合工具 Vivado HLS及 Xilinx Zynq SOC全可編程處理平臺、Vivado圖像視頻函數(shù)庫,并通過高級綜合工具Vivado HLS將OpenCV轉化為RTL處理流程,在Xilinx Zynq SoC系列全可編程處理平臺上實現(xiàn)OpenCV程序算法的硬件加速。以邊緣檢測為例說明加速流程。
Xilinx Zynq SOC是具有 ARM+FPGA架構的全可編程處理器,集成了雙核Cortex-A9處理系統(tǒng)、FPGA邏輯和一些關鍵外設,提供了軟硬件和I/O可編程性。Zynq SOC具有64位高性能端口,可以實現(xiàn)對外部存儲器的訪問;還有32位通用端口實現(xiàn)控制寄存器的訪問,并且使用AXI4-Stream能更好地解決高清視頻流速度問題。處理子系統(tǒng)、FPGA邏輯和外設在Zynq SOC中的高度集成性確保了相對于采用分離式組建設計的系統(tǒng)而言提高數(shù)據(jù)傳輸速率,高度的軟硬件集成性能幫助設計人員實現(xiàn)極為高效的嵌入式視覺系統(tǒng),降低功耗和材料清單成本。Zynq SoC視頻圖像處理架構如圖 1所示[3]。為了全面利用 Zynq SOC的諸多性能,Xilinx推出了以 IP設計為中心的設計環(huán)境Vivado設計套件,該套件可加速集成和設計實現(xiàn)。而Vivado HLS作為該套件的一個重要組件,能幫助設計人員將采用C/C++語言的開發(fā)的算法編譯為RTL,以便在 FPGA邏輯中運行。在圖像處理復雜算法中,通過C/C++創(chuàng)建算法原型,再利用Vivado HLS將算法或者算法的一部分編譯為RTL,進而確定哪些函數(shù)更適合在FPGA邏輯中運行,哪些函數(shù)適合在ARM上運行,這樣更能集中精力設計出最佳性能的基于Zynq SOC的視覺系統(tǒng)。利用高級綜合工具 Vivado HLS開發(fā)的流程如圖2所示。
圖2 Vivado HLS設計和處理過程
對OpenCV程序的硬件加速,實際上是將OpenCV轉化為可綜合的代碼,用可綜合的Vivado HLS視頻庫函數(shù)代替OpenCV函數(shù)。VIvado HLS具有專門支持OpenCV的視頻函數(shù)庫,這些函數(shù)可以代替OpenCV函數(shù),并且能很好地綜合為 RTl代碼,進而可以利用 Zynq全可編程SoC的優(yōu)勢實現(xiàn)圖像或者視頻的處理。
2.1 OpenCV與Vivado HLS視頻函數(shù)庫
Vivado HLS高級語言綜合工具包含了專門的OpenCV視頻庫,通過HLS庫中的函數(shù)代替原本 OpenCV算法程序中的函數(shù)便可以完成由 OpenCV到 HLS的轉化,在 Zynq上硬件化后,提高OpenCV應用效率[4]。
OpenCV經(jīng)常用到的數(shù)據(jù)類型有 Mat、CvMat和IplImage[5],VivadoHLS視頻處理函數(shù)庫使用 hls::Mat<>數(shù)據(jù)類型,這種類型用于模型化視頻像素流處理,等同于hls::steam<>流的類型,而不是OpenCV中在外部 memory中存儲的matrix矩陣類型。因此,在用Vivado HLS實現(xiàn)OpenCV的設計中,需要將輸入和輸出HLS可綜合的視頻設計接口修改為 Video stream接口,也就是采用HLS提供的 Video接口可綜合函數(shù),實現(xiàn) AXI4 Video stream到Vivado HLS中hls::Mat<>類型的轉換[6]。
從軟件到RTL過程中,最關鍵的是接口問題,而HLS創(chuàng)建的硬件專注于硬件接口,Vivado HLS支持以相對較小的可以輕松創(chuàng)建AXI的從接口,從而使硬件加速器設計變得簡單。在視頻處理中,Xilinx通過 AXI4流協(xié)議來實現(xiàn)像素通信,以更小的元素來傳輸視頻幀,可以不用知道視頻流的大小或者圖片的尺寸,大大簡化了視頻處理計算。
2.2 OpenCV程序修改方法
使用HLS加速OpenCV時,需要先用I/O函數(shù)提取FPGA實現(xiàn)部分,用可綜合的Vivado HLS函數(shù)庫函數(shù)代替OpenCV函數(shù)。在Zynq開發(fā)中使用Vivado HLS實現(xiàn)OpenCV的設計流程如下[7]:
首先,開發(fā) OpenCV的應用,編寫源碼和測試文件,并且采用C++編譯器進行編譯、仿真和調(diào)試,產(chǎn)生可執(zhí)行文件。
其次,使用I/O函數(shù)抽取FPGA實現(xiàn)部分,并且使用可綜合的 Vivado HLS庫函數(shù)代碼代替 OpenCV函數(shù)的調(diào)用。其流程如圖3所示。
圖3 OpenCV函數(shù)程序到HLS函數(shù)程序轉化
最后,運用HLS生成的RTL代碼,在Vivado HLS工程中啟動co-sim,HLS工具自動重用OpenCV的測試激勵驗證產(chǎn)生的RTL代碼。在Xilinx的Vivado集成開發(fā)環(huán)境中做RTL集成和SOC/FPGA實現(xiàn)。
本文通過邊緣檢測算法來介紹硬件加速OpenCV應用。根據(jù)前面介紹的方法,利用OpenCV庫函數(shù)先設計出邊緣檢測算法原型,如圖4所示,并使用基于OpenCV的測試激勵驗證這個算法。再改寫前面設計好的OpenCV算法程序,按照視頻數(shù)據(jù)鏈的形式重新改寫,如圖5所示,這樣與HLS視頻庫處理機制相同,方便函數(shù)替換。最后將改寫好的 OpenCV程序中的函數(shù)替換為HLS提供的相應功能的函數(shù),如圖6所示,并且使用Vivado HLS工具綜合,綜合之后生成 IP,在 Vivado集成開發(fā)環(huán)境中以IP為核心完成設計,在SDK中利用原OpenCV測試激勵進行測試,基于邊緣設計應用測試結果如圖7所示。
圖4 OpenCV原型設計
圖5 基于視頻數(shù)據(jù)鏈的OpenCV程序
圖6 函數(shù)替換后的可綜合的代碼
使用高層次綜合工具 Vivado HLS結合邏輯可編程FPGA或者 Zynq SOC實現(xiàn) OpenCV在高分辨幀率的實時視頻處理是解決目前OpenCV軟件程序速度優(yōu)化瓶頸問題的有效方法。采用Vivado HLS視頻庫能加快OpenCV函數(shù)向可綜合邏輯器件 Zynq SOC或 FPGA的映射。同樣,也可以利用 Zynq SOC結合 Vivado HLS工具的方法,來硬件加速其他計算機軟件設計。該方法對加速優(yōu)化高速算法軟件設計具有一定的參考價值。
圖7 邊緣檢測結果
[1]張秀榮,孟和達來.數(shù)字圖像處理系統(tǒng)開發(fā)與研究[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設計套件將可編程系統(tǒng)集成度和實施速度提升 4倍[J].電子設計技術,2012(6):22-24.
[7]何賓,張艷輝.Xilinx FPGA數(shù)字信號處理權威指南[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-),女,碩士研究生,主要研究方向:系統(tǒng)工程,可靠性。