在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板的先决条件.
连接到目标器显示端口的监视器。
开发主机要求
用于代码生成的GPU Coder™。有关概述和教程,请访问GPU Coder产品页面.
NVIDIA GPU金宝app的GPU编码器支持包。如果您是此支持包的新手,我们建议您填写金宝app开始使用NVIDIA GPU的GPU编码器支持包金宝app的例子。
主机上的NVIDIA CUDA工具包。
主机上用于编译器和库的环境变量。有关编译器和库的受支持版本的信息,请参见金宝app第三方产品下载188bet金宝搏.有关设置环境变量,请参见环境变量.
连接到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上的实时摄像机馈电上,并在本机显示器上显示输出。