文档

在NVIDIA Jetson Nano上部署和运行带有I/O的Sobel边缘检测

本示例向您展示如何使用树莓派相机模块V2部署Sobel边缘检测,并使用NVIDIA®GPU的GPU Coder™支持包在NVIDIA Jetson Nano硬件上显示。金宝app在这个例子中使用树莓派相机模块V2的NVIDIA Jetson Nano Sobel边缘检测,我们已经看到使用NVIDIA GPU的GPU编码器支持包访问NVIDIA Jetson Nano硬件上的树莓派相机模块V2。金宝app在当前示例中,我们将生成用于访问I/O(摄像头和显示器)的代码,以便部署到NVIDIA Jetson Nano硬件上。我们将考虑相同的Sobel边缘算法来显示这种能力。

先决条件

目标板要求

  • NVIDIA Jetson Nano嵌入式平台。

  • 树莓派摄像机模块V2连接目标器的CSI主机端口。

  • 用于连接目标板和主机PC的以太网交叉网线(如果目标板无法连接到本地网络)。

  • 目标上的V4L2和SDL (v1.2)库。

  • 目标上的GStreamer库。

  • 目标上用于编译器和库的环境变量。有关编译器和库的支持版本及其设置的信息,请参见金宝app安装和设置NVIDIA板的先决条件

  • 连接到目标器显示端口的监视器。

开发主机要求

连接到NVIDIA Jetson Nano

NVIDIA GPU的GPU金宝app编码器支持包使用TCP/IP上的SSH连接来执行命令,同时在Jetson平台上构建和运行生成的CUDA代码。因此,必须将目标平台连接到与主机相同的网络中,或者使用以太网交叉电缆将单板直接连接到主机。有关如何设置和配置您的电路板,请参阅NVIDIA文档。

属性创建一个活动硬件连接对象,以与NVIDIA Jetson Nano通信杰森函数。创建硬件活连接对象时,需要知道目标板的主机名或IP地址、用户名和密码。例如,

Hwobj = jetson(“jetson-nano-name”ubuntu的ubuntu的);

检查GPU环境

使用coder.checkGpuInstall函数并验证运行此示例所需的编译器和库是否正确设置。

envCfg = code . gpuenvconfig (“杰森”);envCfg。BasicCodegen = 1;envCfg。安静= 1;envCfg。HardwareObject = hwobj;coder.checkGpuInstall (envCfg);

为单机部署准备Sobel边缘检测应用程序

在Sobel边缘检测应用程序中包含摄像头和显示接口

Hwobj = jetson;camObj = camera(hwobj,vi-output, imx219 6-0010"480年[640]);dispObj = imageDisplay(hwobj);

复制相关文件到当前目录

下面这行代码在当前工作目录(主机)中创建了一个文件夹,并将所有相关文件复制到该文件夹中。如果无法在此文件夹下生成文件,请先更改当前工作目录再执行该命令。

gpucoderdemo_setup (“sobel_edge_detection_deploy”);

Sobel Edge MATLAB代码生成应用

类型sobelEdgeDetection.m
版权所有2018-2020 The MathWorks, Inc. hwobj = jetson;camObj = camera(hwobj,"vi-output, imx219 6-0010",[640 480]);dispObj = imageDisplay(hwobj);% Sobel kernel kern = [1 2 1;0 0 0;-2 -1];k = 1:1000 %从硬件上的相机捕获图像。img =快照(camObj);%发现水平和垂直梯度。H = conv2(img(:,:,2),kern,'same'); v = conv2(img(:,:,2),kern','same'); % Finding magnitude of the gradients. e = sqrt(h.*h + v.*v); % Threshold the edges edgeImg = uint8((e > 100) * 240); % Display image. image(dispObj,edgeImg); end end

使用GPU编码器为目标生成CUDA代码

要生成可部署到NVIDIA目标上的CUDA可执行文件,请创建用于生成可执行文件的GPU代码配置对象。

cfg = code . gpuconfig (exe”);

使用coder.hardware函数为Jetson平台创建配置对象并将其分配给硬件代码配置对象的属性cfg

cfg。硬件= code . Hardware (英伟达杰森的);

使用BuildDir属性指定在目标上执行远程生成过程的目录。如果指定的构建目录在目标上不存在,那么软件将创建一个具有给定名称的目录。如果没有赋值cfg.Hardware.BuildDir,则远程构建过程发生在最后指定的构建目录中。如果没有存储生成目录值,则生成过程将在主目录中进行。

cfg.Hardware.BuildDir =“~ / remoteBuildDir”

设置GenerateExampleMain属性以生成一个示例c++主函数并编译它。这个例子不需要修改生成的主文件。

cfg。GenerateExampleMain =“GenerateCodeAndCompile”

要生成CUDA代码,请使用codegen函数和GPU代码配置一起传递sobelEdgeDetection入口点函数。在主机上生成代码后,将复制生成的文件并在目标上构建。

codegen (“配置”cfg,“sobelEdgeDetection”“报告”);

在目标上运行Sobel边缘检测

要在目标上运行生成的可执行文件,请使用MATLAB®runApplication函数。

设置适当的显示环境。

hwobj.setDisplayEnvironment (“1.0”);

在目标上运行应用程序。

pid = runApplication(hwobj,“sobelEdgeDetection”);

在目标硬件显示器上打开一个窗口,显示实时摄像机馈送的Sobel边缘检测输出。

清理

删除文件并返回到原始文件夹。

清理

总结

本例介绍了一个应用程序,其中Sobel边缘检测应用程序运行在NVIDIA Jetson Nano上的实时摄像机馈电上,并在本机显示器上显示输出。