9JMJOY '1( ;ZOR z `× y)-4 0QFO$7 ('...

3
Industry Control www.eepw.com.cn 2014.2-3合刊 责任编辑:王莹 开源计算机视觉 (OpenCV) 被广 泛用于开发计算机视觉应用 它包含 2500多个优化的视频函数的函数库并 且专门针对台式机处理器和GPU进行 优化 Xilinx VivadoHLS高层次综合 工具能够使用C/C++ 编写的代码直 接创建RTL硬件 显著提高设计生产 同时 Xilinx Zynq全可编程SoC 系列器件嵌入双核ARM Cortex-A9理器将软件可编程能力与FPGA的硬 件可编程能力实现完美结合 以低功 耗和低成本等系统优势实现单芯片 高的系统性能¢灵活性¢可扩展性 加速图形处理产品设计上市时间 OpenCV拥有成千上万的用户 而且 OpenCV的设计无需修改即可在Zynq 器件的ARM处理器上运行 但是利 OpenCV实现的高清处理经常受外 部存储器的限制 尤其是存储带宽会 成为性能瓶颈 存储访问也限制了功 耗效率 使用Xilinx公司的VivadoHLS 高级语言综合工具 可以轻松实现 OpenCV C++视频处理设计到RTL代码 的转换 输出Zynq的硬件加速器或者 直接在FPGA上实现实时硬件视频处 理功能 同时 Xilinx公司的Zynq All- programmable SoC是实现嵌入式计算 机视觉应用的好方法 解决了在单一 处理器上实现视频处理性能低功耗高 的限制 Zynq高性能可编程逻辑和嵌 入式ARM内核 是一款性能功耗优化 的图像处理集成式解决方案 1 OpenCV中图像IplImage, CvMat, Mat 类型的关系和 VivadoHLS中图像hls::Mat类型 OpenCV 中常见的与图像操作 有关的数据容器有 Mat CvMat IplImage 这三种类型都可以代表和 显示图像 但是 Mat 类型侧重于计 数学性较高 CvMatIplImage 类型更侧重于 图像 OpenCV其中的图像操作 缩放¢单通道提 ¢图像阈值操作等 进行了优化 1.1 OpenCV中的Mat矩阵类型 Xilinx FPGA/Zynq设计中使用HLS实现 OpenCV的开发流程 OpenCV Application with Xilinx FPGA/Zynq Using HLSDesign Flow 郭丰收 Xilinx公司 摘要:首先介绍OpenCV中图像类型和函数处理方法,之后通过设计实 例描述在VivadoHLS中调用OpenCV库函数实现图像处理的几个基本步 骤,阐述从OpenCV设计到RTL转换综合的开发流程。本文网络版地址: http://www.eepw.com.cn/article/233872.htm 关键词:可编程;处理器;VivadoHLS;OpenCV;Zynq AP SOC DOI: 10.3969/j.issn.1005-5517.2014.2.011 郭丰收:Xilinx DSP专家,主要从事在Xilinx器件上实现数字信号处理的系统 方案、架构和算法应用。 图1 Zynq All-programmable SoC系统架构 50

Transcript of 9JMJOY '1( ;ZOR z `× y)-4 0QFO$7 ('...

Page 1: 9JMJOY '1( ;ZOR z `× y)-4 0QFO$7 (' 7xilinx.eetrend.com/files-eetrend-xilinx/forum/201509/9292-20513-xilin… · 52 Vivado -þ(Ü °Z RTL +±Kó = ¹ SoC/FPGA Ë(Ý b *U)-4 Ë(Ý0QFO$7

Industry Control

73www.eepw.com.cn 2014.2-3合刊

责任编辑:王莹

开源计算机视觉 (OpenCV) 被广

泛用于开发计算机视觉应用,它包含

2500多个优化的视频函数的函数库并

且专门针对台式机处理器和GPU进行

优化。Xilinx VivadoHLS高层次综合

工具能够使用C/C++ 编写的代码直

接创建RTL硬件,显著提高设计生产

力,同时,Xilinx Zynq全可编程SoC

系列器件嵌入双核ARM Cortex-A9处

理器将软件可编程能力与FPGA的硬

件可编程能力实现完美结合,以低功

耗和低成本等系统优势实现单芯片

高的系统性能、灵活性、可扩展性,

加速图形处理产品设计上市时间。

OpenCV拥有成千上万的用户,而且

OpenCV的设计无需修改即可在Zynq

器件的ARM处理器上运行,但是利

用OpenCV实现的高清处理经常受外

部存储器的限制,尤其是存储带宽会

成为性能瓶颈,存储访问也限制了功

耗效率。使用Xilinx公司的VivadoHLS

高级语言综合工具,可以轻松实现

OpenCV C++视频处理设计到RTL代码

的转换,输出Zynq的硬件加速器或者

直接在FPGA上实现实时硬件视频处

理功能。同时,Xilinx公司的Zynq All-

programmable SoC是实现嵌入式计算

机视觉应用的好方法,解决了在单一

处理器上实现视频处理性能低功耗高

的限制,Zynq高性能可编程逻辑和嵌

入式ARM内核,是一款性能功耗优化

的图像处理集成式解决方案。

1 OpenCV中图像IplImage,

CvMat , Mat 类型的关系和

VivadoHLS中图像hls::Mat类型

O p e n C V中常见的与图像操作

有关的数据容器有M a t,Cv M a t和

IplImage,这三种类型都可以代表和

显示图像,但是,Mat类型侧重于计

算,数学性较高。而CvMat和IplImage

类型更侧重于“图像”,OpenCV对

其中的图像操作(缩放、单通道提

取、图像阈值操作等)进行了优化。

1.1 OpenCV中的Mat矩阵类型

Xilinx FPGA/Zynq设计中使用HLS实现OpenCV的开发流程OpenCV Application with Xilinx FPGA/Zynq Using HLSDesign Flow

郭丰收 Xilinx公司

摘要:首先介绍OpenCV中图像类型和函数处理方法,之后通过设计实

例描述在VivadoHLS中调用OpenCV库函数实现图像处理的几个基本步

骤,阐述从OpenCV设计到RTL转换综合的开发流程。本文网络版地址:

http://www.eepw.com.cn/article/233872.htm

关键词:可编程;处理器;VivadoHLS;OpenCV;Zynq AP SOC

DOI: 10.3969/j.issn.1005-5517.2014.2.011

郭丰收:Xilinx DSP专家,主要从事在Xilinx器件上实现数字信号处理的系统

方案、架构和算法应用。

图1 Zynq All-programmable SoC系统架构

30583050

201402-3合刊.indd 73 2014/2/28 11:17:46

Page 2: 9JMJOY '1( ;ZOR z `× y)-4 0QFO$7 (' 7xilinx.eetrend.com/files-eetrend-xilinx/forum/201509/9292-20513-xilin… · 52 Vivado -þ(Ü °Z RTL +±Kó = ¹ SoC/FPGA Ë(Ý b *U)-4 Ë(Ý0QFO$7

工业控制

74 www.eepw.com.cn2014.2-3合刊

责任编辑:王莹

在OpenCV中,Mat是一个多维的

密集数据数组。可以用来处理向量和

矩阵、图像、直方图等等常见的多维

数据。

Mat类型较CvMat与IplImage类型来

说,有更强的矩阵运算能力,支持常

见的矩阵运算。在计算密集型的应用

当中,将CvMat与IplImage类型转化为

Mat类型将大大减少计算时间花费。

1 . 2 O p e n C V 中 的 C v M a t 与

IplImage类型

在openCV中,CvMat和IplImage类

型更侧重于“图像”,尤其是对其中

的图像操作进行一定程度的优化。

OpenCV没有向量(vector)的数据结

构,但当我们要表示向量时,需要用

矩阵数据表示。但是,CvMat更抽象,

它的元素数据类型并不仅限于基础数

据类型,而且可以是任意的预定义数

据类型,比如RGB或者别的多通道数

据。

在OpenCV类型关系上,我们可

以说IplImage类型继承自CvMat类型,

当然还包括其他的变量将之解析成图

像数据。IplImage类型较之CvMat多了

很多参数,比如depth和nChannels。

IplImage对图像的另一种优化是变量

origin原点,为了弥补这一点,OpenCV

允许用户定义自己的原点设置。

1.3 VivadoHLS中图像数据类型

hls::Mat<>

Vi v ad oH L S视频处理函数库使

用h l s : : Mat < >数据类型,这种类型

用于模型化视频像素流处理,实质

等同于h l s : : s tea m < >流的类型,而

不是OpenCV中在外部memor y中存

储的m at r i x矩阵类型。因此,在用

VivadoHLS实现OpenCV的设计中,需

要将输入和输出HLS可综合的视频设

计接口,修改为Video stream接口,

也就是采用HLS提供的video接口可

综合函数,实现AXI4 video stream到

VivadoHLS中hls::Mat<>类型的转换。

2 使用V i v a d o H L S实现

OpenCV到RTL代码转换的流程

2.1 OpenCV设计中的权衡

O p e n C V图像处理是基于存储

器帧缓存而构建的,它总是假设视

频frame数据存放在外部DDR 存储器

中,因此,OpenCV对于访问局部图

像性能较差,因为处理器的小容量高

速缓存性能不足以完成这个任务。而

且出于性能考虑,基于OpenCV设计

的架构比较复杂,功耗更高。在对分

辨率或帧速率要求低,或者在更大的

图像中对需要的特征或区域进行处理

时,OpenCV似乎足以满足很多应用

的要求,但对于高分辨率高帧率实时

处理的场景下,OpenCV很难满足高

性能和低功耗的需求。

基于视频流的架构能提供高性

能和低功耗,链条化的图像处理函数

减少了外部存储器访问,针对视频

优化的行缓存和窗口缓存比处理器

高速缓存更简单高效,更易于使用

VivadoHLS在FPGA部件中采用数据流

优化来实现。

VivadoHLS对OpenCV的支持,不

是指可以将OpenCV的函数库直接综合

成RTL代码,而是需要将代码转换为

可综合的代码,这些可综合的视频库

称为HLS视频库,由VivadoHLS提供。

OpenCV函数不能直接通过HLS

进行综合,因为OpenCV函数一般都

包含动态的内存分配、浮点以及假设

图像在外部存储器中存放或者修改。

VivadoHLS视频库用于替换很多

基本的OpenCV函数,它与OpenCV

具有相似的接口和算法,主要针对在

FPGA架构中实现的图像处理函数,

包含了专门面向F P G A的优化,比

如定点运算而非浮点运算(不必精

确到比特位),片上的行缓存(line

buffer)和窗口缓存(window buffer)。

图2.1展示了在Xilinx Zynq AP SoC器件

上实现视频处理的系统结构。

2.2 在FPGA/Zynq开发中使用

VivadoHLS实现OpenCV的设计流程

设计开发流程主要有如图2.2三个

步骤。

1 . 在计算机上开发O p e n C V应

用,由于是开源的设计,采用C++

的编译器对其进行编译、仿真和

图2.1 Zynq视频处理系统结构

51

201402-3合刊.indd 74 2014/2/28 11:17:47

Page 3: 9JMJOY '1( ;ZOR z `× y)-4 0QFO$7 (' 7xilinx.eetrend.com/files-eetrend-xilinx/forum/201509/9292-20513-xilin… · 52 Vivado -þ(Ü °Z RTL +±Kó = ¹ SoC/FPGA Ë(Ý b *U)-4 Ë(Ý0QFO$7

Industry Control

75www.eepw.com.cn 2014.2-3合刊

责任编辑:王莹

debug,最后产生可执行文件。这些

设计无需修改即可在 ARM内核上运

行OpenCV应用。

2.使用I/O函数抽取FPGA实现的

部分,并且使用可综合的VivadoHLS

Video库函数代码代替OpenCV函数的

调用。

3 .运行H L S生成RT L代码,在

VivadoHLS工程中启动co-sim,HLS

工具自动重用OpenCV的测试激励验

证产生的RTL代码。在Xilinx的ISE或

者Vivado开发环境中做RTL的集成和

SoC/FPGA实现。

2.3 用HLS实现OpenCV应用的实

例(快速角点滤波器image_filter)

我们通过快速角点的例子,说

明通常用VivadoHLS实现OpenCV的流

程。首先,开发基于OpenCV的快速

角 点 算 法 设

计,并使用基

于OpenCV的

测试激励仿真

验 证 这 个 算

法。接着,建

立 基 于 视 频

数 据 流 链 的

OpenCV处理

算 法,改 写

前面OpenCV

的通常设计,这样的改写是为了与

HLS视频库处理机制相同,方便后面

步骤的函数替换。最后,将改写的

OpenCV设计中的函数,替换为HLS

提供的相应功能的视频函数,并使用

VivadoHLS综合,在Xilinx开发环境下

在FPGA可编程逻辑或作为Zynq SoC

硬件加速器实现。当然,这些可综合

代码也可在处理器或ARM上运行。

3VHLS实现OpenCV设计流程

总结

O p e n C V函数可实现计算机视

觉算法的快速原型设计,并使用

VivadoHLS工具转换为RTL代码,在

FPGA可编程逻辑上或者ZynqSoC逻辑

上作为硬件加速器,实现高分辨率高

帧率的实时视频处理。计算机视觉应

用与生俱来的异构特性,使其需要软

硬件相结合的实现方案,采用Vivado

H L S视频库能加快O p e n C V函数向

FPGA或Zynq SOC全可编程架构的映

射。

参考文献:

[ 1 ] V i v a d o D e s i g n S u i t e U s e r G u i d e : H i g h -LevelSynthesis(UG902)[2]Accelerating OpenCV applications with Zynq using VivadoHLS video libraries(XAPP1167)[3]Bradski G,Kaebler A.Learning OpenCV.ISBN 978-7-302-20993-5[4]Implementing memory structure for video processing in the VivadoHLS tool(XAPP793)[5]Gonzalez R C.Wood R E.Digital Image Processing,3rd ed.ISBN 978-7-121-11008-5

图2.2 在FPGA/Zynq设计中使用OpenCV的开发流程

流采样电阻。电流反

馈信号通过L M 3 5 8、

二极管D6和光电耦合器PC817反馈至

OB2269的2脚FB端,再通过OB2269芯

片控制输出电压,实现输出电流稳定

在3A。

4实验测试数据及分析

在完成电路调试和驱动电源的

制作后,采用功率电阻模拟负载的方

式,对电源样机的实际工作情况进行

了实验测试。电源在不同输入电压条

件下负载工作时所测得的数据如表1

所示。从表中数据可以看出,在100

到240V的宽输入电压范围内,输出电

流均保持在3A左右,达到恒流输出的

效果。

电源在不同负载条件下工作时所

测得的数据如表2所示。数据表明,

电源效率及功率因数随负载增加而上

升。在满负载的情况下,驱动电源样

机的功率因数达到96.9%,效率能达

到86.75%,基本符合大功率LED照明

系统对驱动电源的要求。

5结论

本文从功率因数校正和变换器及

其拓扑结构上进行了讨论分析,设计

出一款有源功率因素校正的单端反激

变换大功率LED驱动电源,通过测试

驱动电源的功率因数和效率,给出实

验结果并进行分析,验证本文所述理

论的正确性。

参考文献:

[1] 周志敏, 周纪海, 纪爱华. LED驱动电路设计与应用[M]. 北京: 人民邮电出版社, 2006.[2] 公文礼. 大功率LED灯具电源驱动的分析与研究[J]. 灯与照明, 2009, 33(4): 29-33.[3] 刘祖明. LED照明驱动器设计案例精解[M]. 北京: 化学工业出版社, 2011.[4] 平立. LED驱动电源在设计应用中容易忽视的技术问题及检验方法[J]. 民营科技, 2010, 5: 44.[5] 刘彬. LED恒流驱动电源的研究与设计[D]. 北京: 北京交通大学, 2009.[6] 梁健锋.大功率LED照明系统及其驱动电源设计[D]. 广州: 华南理工大学, 2011.[7] 辛伊波, 陈守雄. 滞环电流变换器及其在PFC中的应用[J]. 微电子技术, 2002, 30(5): 46-48.[8] 汪洋, 林海青, 常越. 反激式准谐振开关电源工作频率确定及电源研制[J]. 电力电子技术, 2005, 39(3): 92-94.

上接42

30583052

201402-3合刊.indd 75 2014/2/28 11:17:47