一种可实现硬件加速的双目感知方法与流程

文档序号:20489788发布日期:2020-04-21 21:57阅读:557来源:国知局
一种可实现硬件加速的双目感知方法与流程

本发明涉及立体视觉和嵌入式系统设计技术领域,特别涉及一种可实现硬件加速的双目感知方法。



背景技术:

立体视觉是计算机视觉领域的一个重要课题,它的目的在于通过双目感知重构场景的三维几何信息。立体视觉广泛应用于机器人技术之中,通常对硬件有特定的选择,比如,当立体视觉应用于移动场景例如无人机及无人驾驶中,由于场景快速移动,卷帘相机拍摄图像会有模糊,选择全局曝光摄像头很有必要。立体匹配是立体视觉中的关键一环,相机硬件同步触发可以很大程度上减少误匹配。在嵌入式系统中,还要特别考虑硬件的重量和功耗,尽量选择小封装的芯片型号。另外,由于立体视觉的相关算法复杂,计算量大,对硬件处理速度也有一定的要求,如何提高硬件的处理速度也一直是立体视觉的研究课题。

目前,在pc端上用cpu作为处理器的算法研究有些并不适用于嵌入式系统,主流的技术方案是选择gpu或者fpga平台来实现。国内外研究机构已经对立体视觉一些常用算法在fpga上的实现展开了广泛的研究,其中不乏使用xilinx公司的zynq系列soc作为主芯片,它可降低传统方法上fpga和移动cpu的信息交互代价,并且更加轻便和小封装,非常适用于现在的嵌入式处理平台。



技术实现要素:

本发明的目的在于克服现有技术的缺点与不足,提供一种可实现硬件加速的双目感知方法,该方法可应用于对算力和功耗有要求的嵌入式系统,可以有效实现硬件加速,适用于实时性要求高的场景。

本发明的目的通过下述技术方案实现:一种可实现硬件加速的双目感知方法,包括如下步骤:

s1、针对于双目摄像头的两个摄像头芯片,分别引出摄像头芯片的外触发引脚,并对摄像头芯片的寄存器进行配置,使摄像头芯片工作在外触发模式;

s2、通过双目摄像头捕获双目图像,根据双目图像进行双目摄像头的离线标定,得到双目摄像头的参数;

将双目摄像头接入zynqultrascale+mpsoc的pl部分,然后将双目摄像头和pl进行同步触发,采集实时双目图像;

s3、根据双目摄像头的参数生成自定义ip,在pl中,调用自定义ip进行相机校正和对实时双目图像进行双目立体匹配,从而生成实时视差图;

s4、将实时视差图传输给zynqultrascale+mpsoc的ps部分,并与其中的ddr4内存进行数据交互,同时生成linux内核和文件系统管理图像缓存。

优选的,双目摄像头的选型要求为:采用全局曝光方式、采用小封装和具有外触发模式。

优选的,摄像头芯片为ar0144cmos芯片。

优选的,在步骤s2中,采用matlab标定工具箱进行双目离线标定,得到的双目摄像头的参数包括相机内参矩阵和畸变系数。

优选的,双目摄像头具有mipi输出接口,mipi输出接口通过mipicsi-2rxsubsystem模块接入pl;两个摄像头芯片的trigger引脚连接至同一个pl引脚,以此进行同步触发。

优选的,在步骤s3中,采用vivadohls高层次综合生成自定义ip,过程如下:

(1)新建hls工程;

(2)在source选项中新建一个顶层文件top.cpp,根据双目摄像头的参数,在该顶层文件中利用c/c++语言编程的函数进行功能自定义,自定义的功能包括相机校正和双目立体匹配;

在source选项中新建一个库文件top.h,在该库文件中利用top.cpp的库函数进行图像相关的宏定义和函数声明;

(3)为验证上述hls算法的正确性,在testbench中新建测试文件test.cpp,调用top.cpp程序函数接口,在该测试文件中将上述hls算法实现效果与opencv库的算法实现效果进行对比;

(4)对hls算法进行代码优化,使其能适应zynq平台;

(5)选择project下拉菜单中的projectsettings,synthesis选择top.cpp中核心算法作为顶层函数;

(6)进行综合和仿真,并将仿真得到的图像与opencv库的算法仿真得到的图像进行对比验证;

(7)算法验证通过之后,选择solution下拉菜单中的exportrtl对算法进行命名,从而将算法封装成ip核。

更进一步的,在步骤(2)中,宏定义包括:将axi4-stream总线定义为hls::stream<ap_axiu<24,1,1,1>>,将rgb图像定义为hls::mat<max_height,max_width,hls_8uc3>,将灰度图像定义为hls::mat<max_height,max_width,hls_8uc1>;

函数声明包括图像宽max_width和高max_heigh,文件输入和输出路径。

更进一步的,在步骤(3)中,hls算法与opencv库的算法实现结果均是视频流;

考虑到需封装的算法函数输入输出都是axi-stream格式,通过hls_video.h文件中封装的axivideo2mat和mat2axivideo对hls视频流进行格式转换;通过hls_opencv.h文件中封装的iplimage2axivideo和axivideo2iplimage对hls视频流进行显示。

更进一步的,在步骤(6)中,采用hdmi进行图像显示。

优选的,采用xilinx-vdmaip将实时视差图传输给ps的ddr4;采用xilinx-petalinux生成linux内核及文件系统。

本发明相对于现有技术具有如下的优点及效果:

(1)本发明可实现硬件加速的双目感知方法,包括先引出双目摄像头的两个摄像头芯片的外触发引脚,并对摄像头芯片的寄存器进行配置,使摄像头芯片工作在外触发模式;然后通过双目摄像头捕获双目图像和进行离线标定,得到双目摄像头的参数;接着将双目摄像头接入zynqultrascale+mpsoc的pl部分,然后将双目摄像头和pl进行同步触发,采集实时双目图像;根据双目摄像头的参数生成自定义ip,在pl中,调用自定义ip进行相机校正和对实时双目图像进行双目立体匹配,从而生成实时视差图;最后将实时视差图传输给zynqultrascale+mpsoc的ps部分,并与其中的ddr4内存进行数据交互;同时生成linux内核及文件系统管理ddr4中的图像缓存。本发明方法基于zynqultrascale+mpsoc,硬件平台相对于cpu其并行计算能力更强,相对于gpu其能耗更低,因此非常适用于对算力和功耗有要求的嵌入式系统;利用自定义ip进行相机校正和双目立体匹配,能够有效实现硬件加速,因此本发明方法适用于实时性要求高的场景。

(2)本发明方法运用vivadohls高层次综合,将复杂算法封装成ip核,利用pl资源进行硬件加速,提高了嵌入式系统的实时性。

(3)本发明方法采用硬件同步方案,相对传统软件同步方案,同步效果更好,更能有效降低误匹配,提高立体匹配精度。

(4)本发明方法使用摄像头芯片的mipi接口作为输出,相较于传统的dvp接口,其连接引脚更少,传输速率更快。

附图说明

图1是本发明可实现硬件加速的双目感知方法的流程图。

图2是本发明zynqultrascale+mpsoc的结构框图。

具体实施方式

下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。

实施例

本实施例公开了一种可实现硬件加速的双目感知方法,如图1所示,包括如下步骤:

s1、针对于双目摄像头的两个摄像头芯片camera0、camera1,分别引出摄像头芯片的外触发引脚trigger,并对摄像头芯片的寄存器进行配置,使摄像头芯片工作在外触发模式。

双目摄像头的选型要求为:采用全局曝光方式、采用小封装和具有外触发模式。采用全局曝光方式主要是考虑到双目立体视觉应用在移动场景的情况,避免拍摄出来的图像模糊;采用小封装是为了减小硬件的重量和功耗;具有外触发模式是为了便于人为控制双目摄像头的工作状态。在本实施例中,摄像头芯片为ar0144cmos芯片。

s2、通过双目摄像头捕获双目图像,根据双目图像进行双目摄像头的离线标定,得到双目摄像头的参数。

在本实施例中,具体是采用matlab标定工具箱进行双目离线标定,双目摄像头的参数包括相机内参矩阵和畸变系数,可用于下述相机校正中。

在本实施例中,双目摄像头具有mipi输出接口,mipi输出接口通过xilinx-mipicsi-2rxsubsystem模块接入zynqultrascale+mpsoc的pl部分,可参见图2,摄像头芯片camera0和camera1连接至pl中的两个mipicsi-2。两个摄像头芯片的trigger引脚连接至同一个pl引脚,以此进行同步触发。同步触发可以在很大程度上减少误匹配,提高立体匹配精度。

s3、根据双目摄像头的参数生成自定义ip,在pl中,调用自定义ip进行相机校正和对实时双目图像进行双目立体匹配,从而生成实时视差图,如图2所示,自定义ip包括图像校正ip和立体匹配ip。

本实施例采用vivadohls高层次综合生成自定义ip。vivadohls是xilinx推出的高层次综合工具,一些算法用hdl语言来开发过于复杂,使用vivadohls可以方便地利用c/c++语言来开发相应算法,算法验证过后就可以转化为rtl,然后封装为ip核,便于后续调用。vivadohls使用opencv库作为参考模型,hls算法与opencv库的算法实现结果均是视频流。vivadohls中的hls_video.h和hls_opencv.h文件中包括多种视频库函数,例如hls_video.h文件中具有axivideo2mat和mat2axivideo,hls_opencv.h文件中具有iplimage2axivideo和axivideo2iplimage。

自定义ip生成过程如下:

(1)新建hls工程。

(2)在source选项中新建一个顶层文件top.cpp,根据双目摄像头的参数,在该顶层文件中利用c/c++语言编程的函数进行功能自定义,自定义的功能包括相机校正和双目立体匹配。

在source选项中新建一个库文件top.h,在该库文件中利用top.cpp的库函数进行图像相关的宏定义和函数声明。

宏定义包括:将axi4-stream总线定义为hls::stream<ap_axiu<24,1,1,1>>,将rgb图像定义为hls::mat<max_height,max_width,hls_8uc3>,将灰度图像定义为hls::mat<max_height,max_width,hls_8uc1>。

函数声明包括图像宽max_width和高max_heigh,文件输入和输出路径。

(3)为验证上述hls算法的正确性,在testbench中新建测试文件test.cpp,调用top.cpp程序函数接口,在该测试文件中将上述hls算法实现效果与opencv库的算法实现效果进行对比。

在本实施例中,考虑到需封装的算法函数输入输出都是axi-stream格式,因此通过hls_video.h文件中封装的axivideo2mat和mat2axivideo对hls视频流进行格式转换,即先通过axivideo2mat将输入的axi格式转成mat格式,可以方便调用hls内置函数;再通过mat2axivideo将其转成原来的axi-stream格式进行输出。

通过hls_opencv.h文件中封装的iplimage2axivideo和axivideo2iplimage对hls视频流进行显示,其中,iplimage2axivideo可将采集的双目图像转成axi视频流,axivideo2iplimage可将视频流再转回图像。

(4)对hls算法进行代码优化,使其能适应zynq平台,在下述高层次综合的时候能够减少pl的资源消耗。

(5)选择project下拉菜单中的projectsettings,synthesis选择top.cpp中核心算法作为顶层函数。

(6)进行综合和仿真,并将仿真得到的图像与opencv库的算法仿真得到的图像进行对比,也即验证实时差视图。本实施例的仿真结果可采用hdmi进行图像显示。

(7)算法验证通过之后,选择solution下拉菜单中的exportrtl对算法进行命名,从而将算法封装成ip核,该ip核即为自定义ip,可用于后续的vivado综合。

s4、将实时视差图传输给zynqultrascale+mpsoc的ps部分,并与其中的ddr4内存进行数据交互,即将图像缓存写入ddr4或读取ddr4中的图像缓存;同时生成linux内核和文件系统管理ddr4中的图像缓存,ps中的apu可使用linux内核和文件系统做后续的立体视觉处理。

本实施例采用xilinx-vdmaip实现zynq中的axi4-lite总线和axi4-stream总线的数据转换和将实时视差图传输给ps的ddr4,xilinx-vdmaip可参见图2中的vdma0、vdma1和vdma2。另外,本实施例采用xilinx-petalinux生成linux内核及文件系统。

上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1