一种硬件加速OpenCV的图像处理方法研究

2015-10-19 10:02张俊涛王园伟陕西科技大学电气与信息工程学院陕西西安700北京航空航天大学可靠性与系统工程学院北京009
网络安全与数据管理 2015年22期
关键词:图像处理程序函数

张俊涛,王园伟,庞 多(.陕西科技大学 电气与信息工程学院,陕西 西安 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系统的移植和加速。该方法对图像处理软件设计的硬件化加速具有重要的应用价值。

开源计算机视觉;图像处理;高层次综合;加速

0 引言

开源计算机视觉库 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程序算法的硬件加速。以边缘检测为例说明加速流程。

1 Zynq SOC与HLS

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设计和处理过程

2 OpenCV算法程序到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实现。

3 硬件加速OpenCV程序应用

本文通过边缘检测算法来介绍硬件加速OpenCV应用。根据前面介绍的方法,利用OpenCV库函数先设计出边缘检测算法原型,如图4所示,并使用基于OpenCV的测试激励验证这个算法。再改写前面设计好的OpenCV算法程序,按照视频数据链的形式重新改写,如图5所示,这样与HLS视频库处理机制相同,方便函数替换。最后将改写好的 OpenCV程序中的函数替换为HLS提供的相应功能的函数,如图6所示,并且使用Vivado HLS工具综合,综合之后生成 IP,在 Vivado集成开发环境中以IP为核心完成设计,在SDK中利用原OpenCV测试激励进行测试,基于边缘设计应用测试结果如图7所示。

图4 OpenCV原型设计

图5 基于视频数据链的OpenCV程序

图6 函数替换后的可综合的代码

4 结论

使用高层次综合工具 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-),女,硕士研究生,主要研究方向:系统工程,可靠性。

猜你喜欢
图像处理程序函数
二次函数
第3讲 “函数”复习精讲
二次函数
函数备考精讲
基于ARM嵌入式的关于图像处理的交通信号灯识别
试论我国未决羁押程序的立法完善
基于图像处理的机器人精确抓取的设计与实现
机器学习在图像处理中的应用
“程序猿”的生活什么样
英国与欧盟正式启动“离婚”程序程序