收藏 分享(赏)

Vivado HLS视频库加速Zynq-7000 All Programmable SoC OpenCV应用.pdf

上传人:精品资料 文档编号:9446083 上传时间:2019-08-08 格式:PDF 页数:40 大小:4.32MB
下载 相关 举报
Vivado HLS视频库加速Zynq-7000 All Programmable SoC OpenCV应用.pdf_第1页
第1页 / 共40页
Vivado HLS视频库加速Zynq-7000 All Programmable SoC OpenCV应用.pdf_第2页
第2页 / 共40页
Vivado HLS视频库加速Zynq-7000 All Programmable SoC OpenCV应用.pdf_第3页
第3页 / 共40页
Vivado HLS视频库加速Zynq-7000 All Programmable SoC OpenCV应用.pdf_第4页
第4页 / 共40页
Vivado HLS视频库加速Zynq-7000 All Programmable SoC OpenCV应用.pdf_第5页
第5页 / 共40页
点击查看更多>>
资源描述

1、如何使用Vivado HLS视频库加速Zynq-7000 All Programmable SoC OpenCV应用2013年9月11日 Copyright 2013 Xilinx.年月日OpenCV简介开源计算机视觉(OpenCV) 被广泛用于开发计算机视觉应用机机包含2500多个优化的视频函数的函数库专门针对台式机处理器和GPU进行优化用户成千上万无需修改即可在Zynq器件的ARM处理器上运行但是但是利用OpenCV实现的高清处理经常受外部存储器的限制存储带宽会成为性能瓶颈存储访问会限制功耗效率Zynq All-programmable SOC是实现嵌入式计算机视觉应用的极好方法性能高、功

2、耗低 Copyright 2013 Xilinx.第2页实时计算机视觉应用实时分析功能计算机视觉应用高级驾驶员安全辅助车道或行人检测安防监视敌我识别敌我识别用于工厂自动化的机器视觉高速物体检测非侵入式医疗成像技术肿瘤检测 Copyright 2013 Xilinx.第3页实时视频分析处理基于帧的特征处理与基于像素的图像处理与特征提取Pixel based 4Kx2K决策Image processing and Feature extractionF11080pF2F3720p480p每像素数百次运算800万次处理x每帧100次运算每特性数10000次运算每秒处理数1000个特征 Copyrig

3、ht 2013 Xilinx.第4页= 数百亿次运算= 数百万次运算实时视频分析的异构实现基于帧的基于像素的图像处理与特征提取Pixel based 4Kx2K特征处理与判定Image processing and Feature extractionF11080pF2F3软件域(ARM)硬件域(FPGA)720p480p每像素数百次运算800万次处理x每帧100次运算每特性数10000次运算每秒处理数1000个特征 Copyright 2013 Xilinx.第5页= 数百亿次运算= 数百万次运算赛灵思实时图像分析的实现:Zynq All Programmable SoC Frame bas

4、edFeature processing and基于像素的图像处理与特征提取基于帧的特征处理与判定Pixel based 4Kx2Kprocessing decision makingImage processing and Feature extractionF11080pF2F3720p480p每像素数百次运算800万次处理x每帧100次运算每特性数10000次运算每秒处理数1000个特征 Copyright 2013 Xilinx.第6页= 数百亿次运算= 数百万次运算Vivado:提高OpenCV应用的效率高清视频算法(每秒约1帧)的C语言仿真高清视频(每小时1 帧)的RTL仿真实时F

5、PGA实现方案高达实时实现方案高达60fps Copyright 2013 Xilinx.第7页Zynq视频参考设计架构DDR3DDR3外部存储器处理系统DDR存储控制器SD卡双核Cortex-A9硬化的外设S_AXI_GP 32b 位S_AXI_HP 64 位AXI4 SAXI互联treamIP核HDMIHDMI视频输入Xylon显示控制器HLS生成的流水线AXI VDMA使用64位高性能端口实现对外部存储器的视频访问 Copyright 2013 Xilinx.使用32位通用端口实现控制寄存器访问使用AXI4-Stream实现的视频流第8页以IP为中心的设计流程更快速的IP生成与集成基于C

6、语言的IP创建用户首选的系统集成环境C、C+ 或SystemCDSP系统生成器(System Generator)C 函数库浮点math.h定点VHDL或Vil以视频或Verilog 以及软件驱动Vivado IP集成器Vivado RTL集成IP子系统赛灵思IP第三方IP Copyright 2013 Xilinx.第9页集成用户IP Copyright 2013 Xilinx.Page 10在FPGA设计中使用OpenCV纯集成的OCV加速的OCV应图像文件读取纯OpenCV应用OpenCV应用OpenCV参考加速的OpenCV应用图像文件读取(OpenCV)图像文件读取(OImage p

7、enCV)OpenCV2AXIvideo实时视频输入实时视频输入OCV函数链AXIvideo2Mat的模块OCV函数链AXIvideo2Mat模块OpenCV函数链HLS视频库函数链Mat2AXIvideo可综合的OpenCV函数链HLS视频库函数链Mat2AXIvideo可综合的图像文件写入(OpenCV)AXIvideo2OpenCV图像文件写入实时视频输出实时视频输出 Copyright 2013 Xilinx.图像文件写入(OpenCV)第11页纯OpenCV应用DDR3外部存储器处理系统DDR存储控制器DDR3图像文件读取(OpenCV)SD卡双核Cortex-A9硬化的外设Open

8、CV函数链AXI互联硬化的外设图像文件写入HDMIHDMI视频输入Xylon显示AXI VDMA互联图像文件写入(OpenCV) Copyright 2013 Xilinx.y控制器HLS生成的流水线第12页纯OpenCV应用DDR3外部存储器1 2 3 4 5处理系统DDR存储控制器DDR3图像文件读取(OpenCV)SD卡双核Cortex-A9硬化的外设OpenCV函数链AXI互联硬化的外设图像文件写入HDMIHDMI视频输入Xylon显示AXI VDMA互联图像文件写入(OpenCV) Copyright 2013 Xilinx.y控制器HLS生成的流水线第13页纯OpenCV应用DDR

9、3外部存储器处理系统DDR存储控制器DDR3图像文件读取(OpenCV)SD卡双核Cortex-A9硬化的外设OpenCV函数链AXI互联硬化的外设图像文件写入HDMIHDMI视频输入Xylon显示AXI VDMA互联图像文件写入(OpenCV) Copyright 2013 Xilinx.y控制器HLS生成的流水线第14页集成的OpenCV应用DDR3外部存储器1 2 3 4 5处理系统DDR存储控制器DDR3外部存储器实时视频输入SD卡双核Cortex-A9硬化的外设OpenCV函数链AXI互联硬化的外设HDMIHDMI视频输入Xylon显示AXI VDMA互联实时视频输出 Copyrig

10、ht 2013 Xilinx.y控制器HLS生成的流水线第15页OpenCV参考/软件执行DDR3外部存储器1 2 3 4 5图像文件读取处理系统DDR存储控制器DDR3(OImage penCV)OpenCV2AXIvideoSD卡双核Cortex-A9硬化的外设AXIvideo2MatHLS视频库函数链AXI互联硬化的外设视频库函数链Mat2AXIvideoHDMIHDMI视频输入Xylon显示AXI VDMA互联AXIvideo2OpenCV图像文件写入 Copyright 2013 Xilinx.视频输入y控制器HLS生成的流水线第16页(OpenCV)OpenCV参考/系统测试DDR

11、3外部存储器图像文件读取1 2处理系统DDR存储控制器DDR3(OImage penCV)OpenCV2AXIvideoSD卡双核Cortex-A9硬化的外设AXIvideo2MatHLS视频库函数链AXI互联硬化的外设视频库函数链Mat2AXIvideoHDMIHDMI视频输入Xylon显示AXI VDMA互联AXIvideo2OpenCV图像文件写入 Copyright 2013 Xilinx.视频输入y控制器HLS生成的流水线第17页(OpenCV)加速的OpenCV应用DDR3外部存储器1 2处理系统DDR存储控制器DDR3外部存储器实时视频输入SD卡双核Cortex-A9硬化的外设A

12、XIvideo2MatHLS视频库函数链AXI互联硬化的外设视频库函数链Mat2AXIvideoHDMIHDMI视频输入Xylon显示AXI VDMA互联实时视频输出 Copyright 2013 Xilinx.视频输入y控制器HLS生成的流水线第18页OpenCV设计流程OpenCV模块A1)在台式机上开发OpenCV应用模块在台式机上开发应用2)无需修改即可在ARM内核上运行OpenCV应用OpenCV模块B用3)使用I/O函数抽象FPGA部分OCV模块C4)用可综合代码代替OpenCV函数调用5)运行HLS以生成FPGA加速器OpenCV模块6)用FPGA加速器调用代替可综合代码调用Op

13、enCV模块D Copyright 2013 Xilinx.第19页OpenCV应用的软硬划分OpenCV模块Aopencv2AXIvideo模块AXIvideo2HLSOpenCV模块B HLS 模块B同步OCV模块CHLS 模块C同步OpenCV模块HLS2AXIvideoOpenCV模块DAXIvideo2opencv综合 Copyright 2013 Xilinx.Page 20OpenCV设计中的权衡OpenCV图像处理是基于存储器帧缓存而构建的访问局部性较差- 小容量高速缓存性能不足架构比较复杂(出于性能考虑)- 功耗更高似乎足以满足很多应用的要求似乎足以满足很多应用的要求分辨率或

14、帧速率低在更大的图像中对需要的特征或区域进行处理基于视频流的架构能提供高性能和低功耗链条化的图像处理函数能减少外部存储器访问针对视频优化的行缓存和窗缓存比处理器高速缓存更简单针对视频优化的行缓存和窗口缓存比处理器高速缓存更简单可使用HLS中的数据流优化来实现需要将代码转换为可综合的代码需要将代码转换为可综合的代码 Copyright 2013 Xilinx.HLS视频库OC函数不能直接通过S进行综合OpenCV HL动态内存分配浮点浮点假设图像在外部存储器中修改HLS视频库用于替换很多基本的OpenCV函数与OpenCV具有相似的接口和算法主要针对在FPGA架构中实现的图像处理函数包含专门面向

15、FPGA的优化定点运算而非浮点运算定点运算而非浮点运算片上的行缓存和窗口缓存不必精确到比特位 Copyright 2013 Xilinx.第22页赛灵思HLS视频库2013.2AXI4-Stream IO 函数AXIvideo2Mat Mat2AXIvideo视频数据建模Li b ff Cl Wi d ClOpenCV接口函数cvMat2AXIvideo AXIvideo2cvMat cvMat2hlsMat hlsMat2cvMatIlI 2AXI id AXI id 2IlI IlI 2hl M t hl M t2IlIne uffer ass n ow Class视频函数AbsDiff

16、Duplicate MaxS RemapIplImage video video IplImage IplImage s a s a IplImageCvMat2AXIvideo AXIvideo2CvMat CvMat2hlsMat hlsMat2CvMatAddS EqualizeHist Mean ResizeAddWeighted Erode Merge ScaleAnd FASTX Min SetAvg Filter2D MinMaxLoc SobelAvgSdv GaussianBlur MinS SplitCmp Harris Mul SubRSCmpS HoughLines2

17、Not SubSCornerHarris Integral PaintMask SumCvtColor InitUndistortRectifyMap Range ThresholdDilate Max Reduce Zero Copyright 2013 Xilinx.第23页如需了解函数的详情,敬请阅读HLS用户指南UG 902视频库函数包含在hls命名空间内的C+代码。#include “hls video h”。 hls_video.与OpenCV等具有相似的接口和等效的行为,例如 OpenCV库:cvScale(src, dst, scale, shift);HLS视频库:一些构造函

18、数具有类似的或替代性的模板参数,例如hls:Scale(src, dst, scale, shift); OpenCV库:HLS视频库:cv:Mat mat(rows, cols, CV_8UC3);hls:Mat mat(rows, cols);ROWS和COLS指定处理的最大图像尺寸 Copyright 2013 Xilinx.第24页视频库的核心结构OpenCV HLS视频库 cv:Point_, CvPoint hls:Point_, hls:Pointcv:Size , CvSize hls:Size , hls:Size_ _cv:Rect_, CvRect hls:Rect_,

19、hls:Rectcv:Scalar_, CvScalar hls:Scalarcv:Mat, IplImage, CvMat hls:Matcv:Mat mat(rows, cols, CV_8UC3);hls:Mat mat(rows, cols);IplImage* img = cvCreateImage(cvSize(cols,rows), IPL_DEPTH_8U, 3);hls:Mat img, (rows, cols);hls:Mat img;hls:Window Copyright 2013 Xilinx.hls:LineBufferPage 25局限性必须用视频库函数代替Ope

20、nCV调用不支持通过指针访问帧缓存使用VDMA和AXI Stream adpater函数不支持随机访问读取超过一次的数据必须进行复制请见hls:Duplicate()p()不支持In-place更新例如cvRectangle (img, point1, point2),p ,pOpenCV HLS视频库读操作pix = cv_mat.at(i,j)pix = cvGet2D(cv_img,i,j)hls_img pix Copyright 2013 Xilinx.写操作cv_mat.at(i,j) = pixcvSet2D(cv_img,i,j,pix)hls_img depth, src-n

21、Channels);OpenCV函数链cvSobel(src, dst, 1, 0);cvSubS(dst, cvScalar(100,100,100), src);cvScale(src, dst, 2, 0);cvErode(dst, src);cvDilate(src, dst);cvSaveImage(“result 1080p.bmp“, dst);图像写入(OpenCV)result_ cvReleaseImage(cvReleaseImage(tt Copyright 2013 Xilinx.test_opencv.cppPage 27集成的OpenCV应用系统提供指向帧缓存的指

22、针void img process(ZNQ S32 *rgb data in ZNQ S32 *rgb data out int可综合代码也可在ARM上运行_ _ _ _in, _ _ _ , height, int width, int stride, int flag_OpenCV) / constructing OpenCV interfaceIplImage* src_dma =cvCreateImageHeader(cvSize(width, height), IPL_DEPTH_8U, 4);实时视频输入IplImage* dst_dma =cvCreateImageHeader(

23、cvSize(width, height), IPL_DEPTH_8U, 4);src_dma-imageData = (char*)rgb_data_in;dst_dma-imageData = (char*)rgb_data_out;src dma-widthStep = 4 * stride;OpenCV函数链_dst_dma-widthStep = 4 * stride;if (flag_OpenCV) opencv_image_filter(src_dma, dst_dma); else sw_image_filter(src_dma, dst_dma);cvReleaseImage

24、Header(实时视频输出 Copyright 2013 Xilinx.cvReleaseImageHeader( img_filters.cPage 28使用Vivado HLS视频库加速#include “hls_video.h” / header file of HLS video library#include “hls_opencv.h” / header file of OpenCV I/O抽取顶层函数进行硬件加速/ typedef video library core structurestypedef hls:stream AXI_STREAM;typedef hls:Scal

25、ar RGB_PIXEL;typedef hls:Mat RGB_IMAGE;图像读取(OpenCV)void image_filter(AXI_STREAMtop.hOpenCV2AXIvideoAXIvideo2Mat#i l d hHLS 视频库函数链nc u e “top. ”IplImage* src=cvLoadImage(“test_1080p.bmp“);IplImage* dst=cvCreateImage(cvGetSize(src),Mat2AXIvideoAXIvideo2OpenCVsrc-depth, src-nChannels);AXI_STREAM src_ax

26、i, dst_axi;IplImage2AXIvideo(src, src_axi);图像写入(OpenCV)image_filter(src_axi, dst_axi, src-height, src-width);AXIvideo2IplImage(dst_axi, dst);SI (“ lt 1080 b “ dt) Copyright 2013 Xilinx.Page 29cvSaveImage resu _ p. mp , dst ;cvReleaseImage(cvReleaseImage(test.cpp使用Vivado HLS视频库加速用于FPGA加速的硬件可综合模块由视频库函

27、数与接口组成图像读取(OpenCV)由视频库函数与接口组成用hls命名空间中的相似函数代替OpenCV函数void image_filter(AXI_STREAMRGB_IMAGE img_3(rows, cols), img_4(rows, cols), img_5(rows, cols);RGB_PIXEL pix(50, 50, 50);#pragma HLS dataflowhls:AXIvideo2Mat(input, img_0);hl Sbl(i 0 i 1)视频库函数链Mat2AXIvideos:Sobel , ,3(img_ , mg_1);hls:SubS(img_1, pix, img_2);hls:Scale(img_2, img_3, 2, 0);hls:Erode(img_3, img_4);hls:Dilate(img_4, img_5);hls:Mat2AXIvideo(img 5 output);AXIvideo2OpenCV Copyright 2013 Xilinx._ , top.cpp图像写入(OpenCV)Page 30

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报