主要内容

开发基于zynq硬件的视觉算法

本示例展示了如何开发视觉算法,以便与基于Xilinx®zynq的硬件的vision HDL工具箱™支持包一起工作。金宝app它演示了如何使用Vision HDL工具箱™边缘检测和图像叠加例如,让它与Zynq设备一起工作。该工作流还可以应用于其他Vision HDL工具箱示例。

所需产品:下载188bet金宝搏

  • 金宝app仿真软件®

  • Vision HDL工具箱

  • 计算机视觉工具箱™

  • 高密度脂蛋白编码器™

  • 针对Xilinx Z金宝appynq平台的HDL编码支持包

可选地,生成,编译和目标Zynq ARM®软件生成模型:

  • 嵌入式编码器®

  • Xilinx Zynq平台的嵌金宝app入式编码器支持包

介绍

您可以使用此支持包来开发针对基于z金宝appynq的板的算法。这个例子展示了一个完整的工作流程,从基于帧的仿真模型到在ZedBoard®上运行的部署像素流算法。为了演示工作流,在整个示例中使用了边缘检测和图像覆盖算法。该算法对应于Vision HDL工具箱示例,边缘检测和图像叠加。使用基于zynq硬金宝app件的支持包,您可以获得硬件参考设计,以便在视觉系统的上下文中轻松集成目标算法。

您还可以将此工作流应用于基于zynq硬件的角点检测和图像叠加基于zynq硬件的伽马校正,图像锐化与基于zynq的硬件的例子。

设置

如果还没有这样做,请运行Zynq支持包安装的引导安装向导部分。金宝app在安装此支持包时,您可能已经完成了此步骤。金宝app

在MATLAB上首页选项卡,在环境部分将来发布,点击Add-Ons >管理Add-Ons。定位基于Xilinx zynq硬件的Vis金宝appion HDL工具箱支持包,并按设置

向导式设置向导执行许多初始设置步骤,并确认目标可以启动,主机和目标可以通信。

有关更多信息,请参见步骤1。安装检查表

如果您计划生成嵌入式ARM代码来控制附加到FPGA控制逻辑的axis - lite寄存器,则必须执行额外的设置步骤来配置Xilinx交叉编译工具。详细介绍了这些步骤第9步。ARM瞄准的设置

基于帧的视频文件输入模型

从基于帧的边缘检测和图像覆盖算法模型开始。

打开模型。

您可以在没有硬件的情况下运行此模拟,因为此示例的视频源来自来自多媒体文件块,它从多媒体文件中读取视频数据。此步骤允许您根据已知的固定视频数据验证基于帧的算法。

基于帧的实时摄像机采集模型

算法通常对特定的视频输入很敏感。在这一步中,您可以根据来自连接到HDMI输入的相机的真实数据验证算法。控件左下角的变体选择图标上单击右键图片来源块,选择标签模式主动选择,并选择HW

当使用真实数据时,请选择与您的相机设置相匹配的帧大小。如果您的相机允许不同的尺寸,您可以选择较小的尺寸以获得更快的吞吐量。HDMI输入支持的最小尺寸是480p。金宝app

所有的设置都打开了视频捕捉块在模拟期间发送到目标,以正确配置它以捕获摄像机视频流。

像素流模型与视频文件输入

现在,改进算法以便在硬件中实现。与处理全帧图像不同,这种支持高清的算法可以在像素流接口上工作。该模型包括基于帧的算法和基于像素的算法之间的比较逻辑。它使用YCbCr调整块来调整源视频帧的大小,以获得更好的模拟性能。

打开模型。

您可以在没有硬件的情况下运行此模拟,以确定算法的像素流版本和基于帧的版本是否相同。如果它们是,您应该在PSNR输出中看到'Inf'。

关于模拟输出,有两点需要注意:

  1. 在模拟输出的第一帧期间,视频显示范围显示绿色图像。此条件表示没有可用的图像数据。这种行为是因为像素流算法的输出必须在显示之前进行缓冲以形成一个完整的帧。基于帧的算法的输出被延迟一帧来补偿这一点。

  2. 在模拟的第二帧期间,像素流输出的视频显示范围相对于cThresholdcAlpha您在Simulink模型中配置的参数值。金宝app的Y的PSNR作用域也将显示第二帧的非inf值。这种差异是因为算法使用了初始值cThresholdcAlpha的价值0.0。当你使用率转换中配置的块单位延迟模式,输入值只在输入速率的完整采样周期后在输出处注册。在这种情况下,输入速率对应于一个视频帧。在初始过渡期间,块将输出初始条件的价值0.0).这些块需要确保子系统内所有块的单速率,这是生成HDL代码所必需的。有关更多信息,请参见率转换(金宝app模型)

像素流模型与实时相机采集

可以使用实时摄像机数据运行像素流模型图片来源相应的块。控件左下角的变体选择图标上单击右键图片来源块,选择标签模式主动选择,并选择其中之一HW

虽然捕获可以支持大帧,但像素流算法运行速度很慢。金宝app最好使用尽可能小的帧大小运行。可以选择将捕获的帧大小调整为240pYCbCr调整块。如果您更改帧大小,请在参考设计块中更改它帧到像素的YCbCr 4:2:2块,和像素到帧的YCbCr 4:2:2块。

目标算法

当您满意像素流和基于帧的算法匹配后,您可以将像素算法瞄准Zynq板上的FPGA。将之前的模型进行转换,去掉基于框架的算法和验证逻辑,从而创建一个模型,作为生成硬件用户逻辑的输入。

打开模型。

在准备瞄准时,通过调用来设置Xilinx工具链hdlsetuptoolpath。例如:

> > hdlsetuptoolpath (“ToolName”“Xilinx Vivado”“路径”“C: \ Xilinx \ Vivado \ 2020.1 \ bin \ vivado.bat ');

执行hdlsetuptoolpath(高密度脂蛋白编码器)了解更多信息。

启动目标定位工作流边缘叠加算法子系统与选型HDL代码> HDL工作流顾问

  • 在步骤1.1中选择IP核生成从工作流程和合适的平台中选择:ZedBoard FMC-HDMI-CAMZC706 FMC-HDMI-CAMZC702 FMC-HDMI-CAMPicoZed FMC-HDMI-CAMZCU102 FMC-HDMI-CAMZCU106 FMC-HDMI-CAM

  • 在步骤1.2中,选择与设计中使用的像素格式相对应的参考设计。此步骤计算必要的时钟频率以支持您选择的分辨率,并添加合成约束。金宝app在步骤4.3之后,检查设计的合成日志,以验证合成是否达到了所要求的时钟频率。这个例子生成了一个Vision HDL工具箱像素流接口。在此步骤中,您可以选择为生成的HDL代码选择一个axis4 - stream接口。详细信息请参见用AXI4-Stream视频接口生成FPGA用户逻辑

  • 在步骤1.3中,将目标平台接口映射到设计的输入和输出端口。中的选项目标平台接口列根据像素格式的不同而不同。图中显示了配置的接口表示例YCbCr 4:2:2,以及可能的接口值的颜色编码选择。

在示例模型中,端口已被标记,以便它们非常类似于控件中的正确条目目标平台接口下拉列表。这些名字显示在港口的名字列。的目标平台接口包括四种信号类型:

像素流数据信号:这些信号接口取决于设计的像素格式。本例使用的是YCbCr像素格式,所以只有选项YCbCr出现在列表中。如果您选择RGB参考设计,那么有三个选项,RG,B,都是可用的。如果你选择Y只,唯一的数据接口选项是Y。这些信号接口适用于输入和输出接口。

像素流控制总线这些总线接口适用于所有像素格式。看到像素控制总线,以获取更多资讯。

外部板接口这些信号接口对应于目标硬件平台上的物理GPIO接口。有两类:输入和输出。在本例中,输入端口pbEdgeOnly映射到按钮接口;输入端口dsGrayscale映射为变光开关接口;输出端口领导映射到领导接口。

ARM用户逻辑接口此类别中唯一的接口选项是AXI-Lite。选择此接口指导HDL编码器在FPGA结构中生成内存映射寄存器。你可以从运行在ARM处理器上的软件访问这个寄存器。通过该接口,您可以在运行时实时调整参数目标硬件仿真或者一个软件界面模型。

对于本例,选择YCbCr 4:2:2参考设计匹配的像素格式像素流边缘覆盖算法子系统。参考接口表示意图,绘制港口到Y输入[0:7]接口。同样地,映射CbCrIn港口到Cb/Cr输入[00:7]接口。将像素流控制输入和输出端口映射到相应的控制信号接口。要利用目标硬件平台上的外部接口,请映射pbEdgeOnly0按钮端口;dsGrayScale端口拨码开关0;和领导端口到LED 0。同样,地图cAlphacThreshold到AXI4-Lite软件控制。

  • 步骤2通过做一些设计检查来准备生成的设计。

  • 步骤3生成IP核的HDL代码。

  • 步骤4将新生成的IP核集成到更大的Vision Zynq参考设计中。

按顺序执行每个步骤以体验完整的工作流程,或者,如果您已经熟悉准备和HDL代码生成阶段,请右键单击左侧目录中的步骤4.1并选择运行到选定的任务

  • 在步骤4.2中,工作流生成目标硬件接口模型,如果已经安装了Embedded Coder Zynq支持包,则生成Zynq软件接口模型。金宝app还创建了两个库模型,其中包含配置和控制目标算法所需的块和接口。这些模型将在后面解释。点击运行此任务按钮,默认设置。

步骤4.3和4.4

工作流的其余部分为FPGA生成位流,将其下载到目标,并重新启动板。

因为这个过程可能需要20-40分钟,所以您可以选择通过使用本例中预先生成的比特流来绕过这个步骤,该比特流随产品一起发货,并在安装过程中放置在SDCard上。

注意:这个比特流是在HDMI像素时钟限制为148.5 MHz的情况下生成的,以达到每秒60帧的1080p高清电视的最大分辨率。要在更高分辨率的Zynq硬件上运行此示例,请从步骤1.2中的下拉列表中选择源视频分辨率值。

要使用这个预生成的比特流,执行以下命令:

>> vz = visionzynq();> > changeFPGAImage (vz“visionzynq-zedboard-hdmicam-edge_overlay.bit”);

如果合适,将'zedboard'替换为'zc706', 'zc702', 'picozed', 'zcu102'或'zcu106'。

或者,您可以继续执行步骤4.3和4.4。

  • 在步骤4.3中,工作流顾问为FPGA生成一个比特流。您可以选择在外部shell中执行此步骤,方法是保持选择外部运行构建过程。此选择允许您在构建FPGA时继续使用MATLAB。在完成一些基本的项目检查后,该步骤将在几分钟内完成,并且该步骤将被标记为绿色的复选标记。但是,您必须等到外部shell显示一个成功的位流构建,然后再进行下一步。

  • 在步骤4.4中,将完成的比特流下载到目标器并重启单板。

从HDL工作流顾问生成的模型

步骤4.2根据是否安装了Embedded Coder生成了两个或四个模型:一个“目标硬件接口”模型和相关库模型,以及一个“软件接口”模型和相关库模型。“目标硬件接口”模型可用于在没有嵌入式编码器的情况下从Simulink模型控制参考设计。金宝app当安装嵌入式编码器和Zynq(嵌入式编码器)支持包时,“软件接金宝app口”模型支持针对Zynq的完整软件,支持外部模式仿真,处理器在环和完整部署。

创建库模型是为了将对硬件生成模型的任何更改传播到存在的任何自定义目标硬件模拟或软件接口模型。

使用生成的目标硬件接口模型

在该模型中,您可以调整参考设计的配置,并读取或驱动硬件用户逻辑的控制端口。当设计在目标上运行时,这些配置更改会影响设计。您还可以显示从目标设备捕获的视频。

生成的模型包含能够从Simulink配置和控制目标算法的块。金宝app模型的区域被标记,以突出显示应该放置进一步的视频处理算法和控制目标硬件用户逻辑的算法。

保存的模型中提供了如何使用目标硬件仿真模型的示例。

打开模型。

  • 中更新帧大小视频捕捉以匹配您的相机设置块。

  • 该模型包括一个捕获显示块,允许在Simulink中进一步分析用户逻辑输出。金宝app这是一个可选步骤。目标板上的HDMI输出也显示输出。如果您只需要对算法工作进行视觉确认,则可以删除捕获显示块。

  • 打开'cThreshold'常量块并更改值。注意,边缘检测变得或多或少咄咄逼人。

  • 因为算法是在硬件上运行的,所以在Zynq板上按下PB0,只显示边缘检测图像到HDMI输出,并切换DS0在颜色和灰度之间切换。

  • 更改其他设置以查看其效果。

使用生成的软件接口模型

在此模型中,您可以在外部模式下运行以控制参考设计的配置,并读取或驱动连接到axis - lite寄存器的硬件用户逻辑的任何控制端口。当设计在目标上运行时,这些配置更改会影响设计。您可以使用该模型来全面部署软件设计。(仅当安装了Embedded Coder和Embedded Coder Zynq支持包时才会生成此模型。)金宝app

生成的模型包含能够从软件配置和控制目标算法的块。模型的一个区域被标记,以突出显示控制目标硬件用户逻辑的软件算法应该放置的位置。

在保存的模型中提供了如何使用软件接口模型生成软件的示例。

打开模型。

在运行此模型之前,必须执行额外的设置步骤来配置Xilinx交叉编译工具。有关更多信息,请参见第9步。ARM瞄准的设置

这个模型可以磨合外部模式。该模式允许您从Simulink模型控制配置。金宝app调整的常数值cThresholdcAlpha。您也可以绕过Zynq设备数据路径中的硬件User Logic绕过硬件用户逻辑选项中的软件界面块属性,然后单击应用

您还可以完全部署设计。在“Simul金宝appink”工具栏中,单击硬件部署

尝试一下

算法配置选项

除了处理图像进行边缘检测外,该算法还提供了一些可配置的控制参数。

  • pbEdgeOnly映射到Zynq板按钮,当按下时,只显示边缘检测结果,而不显示原始图像。指定的按钮将在目标算法部分。

  • dsGrayScale映射到Zynq板dip开关,当切换时,删除CbCr像素数据,只输出Y数据。具体的拨码开关将在目标算法部分。

  • cThreshold是调整边缘检测阈值的配置选项。即使在瞄准后,它也是可控的,从Simulink模型通过金宝app外部模式目标硬件执行。

  • cAlpha是一个配置选项,用于调整原始图像和边缘检测图像的混合。的值1.0表示完整的原始图像和0.0表示全边缘检测图像。此配置也可用于通过外部模式目标硬件执行。

请注意pbEdgeOnlydsGrayScale控制端口是目标设计中的纯硬件连接。这些端口可以运行在任何期望的速率,包括在像素时钟速率。

然而,cThresholdcAlpha值由嵌入式处理器(或中的主机)控制外部模式目标硬件模式)。因为主机和嵌入式CPU都不能以像素时钟速率更新这些控件,所以需要一个与帧速率相同的速率。

类似的例子

此示例演示了开发用于Xilinx Zynq设备的算法的工作流程。你可以将此工作流应用于:

此外,您还可以适应其他Vision HDL工具箱示例与Zynq设备一起工作。

模板

示例模型基于YCbCr 4:2:2基于帧的Zynq算法金宝appSimulink模板和基于Zynq的HDL像素流算法金宝appSimulink模板,可以从Simulink开始页面获得。