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

摘 要: 研究了一种基于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 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所示。

最后,运用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 结论

使用高层次综合工具Vivado HLS结合逻辑可编程FPGA或者Zynq SOC实现OpenCV在高分辨帧率的实时视频处理是解决目前OpenCV软件程序速度优化瓶颈问题的有效方法。采用Vivado HLS视频库能加快OpenCV函数向可综合逻辑器件Zynq SOC或FPGA的映射。同样,也可以利用Zynq SOC结合Vivado HLS工具的方法,来硬件加速其他计算机软件设计。该方法对加速优化高速算法软件设计具有一定的参考价值。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容