主要内容

读视频文件英伟达硬件

MATLAB®编码器™支持N万博1manbetxVIDIA的包®杰森™和NVIDIA驱动®平台,您可以生成CUDA®MATLAB代码VideoReader读取文件包含视频数据对象在NVIDIA硬件目标。生成的代码使用GStreamer库API来读取视频文件。

Sobel边缘检测在视频文件

在本例中,您使用GPU编码器™和MATLAB编码器为NVI万博1manbetxDIA杰森和NVIDIA驱动平台支持包生成和部署CUDA Sobel边缘检测应用程序的可执行的杰森,TX2董事会。这个CUDA应用程序读取一个视频文件的内容,进行边缘检测操作,并显示输出视频NVIDIA硬件。

需求

  1. GPU编码器。

  2. MATLAB编码器为NVI万博1manbetxDIA杰森和NVIDIA驱动平台支持包

  3. 图像处理工具箱™的工具箱rhinos.avi这个示例中所使用的视频文件示例。

  4. NVIDIA CUDA工具包。

  5. GStreamer和SDL库的目标。

  6. 环境变量的编译器和库主机和目标。有关更多信息,请参见第三方硬件(GPU编码器),环境变量(GPU编码器),安装和设置先决条件NVIDIA董事会

  7. 英伟达杰森TX2嵌入式平台。

创建一个生活硬件连接对象

支持包软万博1manbetx件使用SSH连接在TCP / IP来构建和运行时执行命令生成的CUDA在杰森平台代码。将目标平台连接到同一个网络主机。或者,使用一个以太网交叉电缆董事会直接连接到主机电脑。请参阅NVIDIA文档如何设置和配置你的董事会。

与NVIDIA硬件进行通信,您必须创建一个生活硬件连接对象使用杰森函数。创建一个生活硬件连接对象,提供主机名或IP地址,用户名和密码的目标。例如为杰森硬件创建活动对象:

hwobj =杰森(“jetson-tx2-name”、“ubuntu”、“ubuntu”);

的软件执行检查硬件、编译器工具和库,IO服务器安装和收集信息的外围设备连接到目标。这些信息显示在命令窗口如图所示。

检查CUDA可用性目标……检查“nvcc”在目标系统路径…检查cuDNN库可用性目标……检查TensorRT库可用性目标……检查先决条件库完成。收集硬件信息…检查第三方库可用性目标……收集完成硬件细节。委员会名称:英伟达杰森TX2 CUDA版本:10.0 cuDNN版本:7.6 TensorRT版本:6.0 GStreamer版本:1.14.5 V4L2版本:1.14.2-1 SDL版本:1.2 OpenCV版本:以下4.4.1可用网络摄像头:MicrosoftA®LifeCam电影院(TM)可用gpu: NVIDIA Tegra X2

另外,创建生活对象驱动的硬件:

hwobj =驱动(“drive-px2-name”、“ubuntu”,“ubuntu”);

请注意

如果连接失败,诊断错误消息报道了MATLAB命令行。连接失败的最可能的原因是不正确的IP地址或主机名的目标。

videoReaderDeploy入口点函数

创建一个MATLAB文件videoReaderDeploy.m作为入口点函数的代码生成。的videoReaderDeploy.m函数创建一个VideoReader对象被称为vObj阅读rhinos.avi视频文件位于目标硬件。然后使用的函数hasFramereadFrame的方法VideoReader对象来确定和有效的视频帧从输入文件中读取。函数执行Sobel边缘检测通过一个二维空间梯度操作并显示检测到的边缘图像在目标硬件。函数发现水平梯度(h)和垂直梯度(v)的输入图像各自Sobel内核。

函数videoReaderDeploy ()%创建杰森硬件对象hwobj =杰森();vidName =“/ home / ubuntu /视频/ rhinos.avi”;%创建视频读者对象vObj = VideoReader (hwobj vidName,“宽度”,320,“高度”,240);%在目标系统上创建显示对象dispObj = hwobj.imageDisplay;%抓帧的视频管道vObj。hasFrame img = vObj.readFrame ();% Sobel边缘检测内核= [1 2 1 0 0 0;1 2 1];h = conv2 (img(:,: 2),内核,“相同”);v = conv2 (img(:,: 2),内核”,“相同”);e =√h。* h + v * v);edgeImg = uint8 (e > 100) * (240);%显示检测到图像边缘图像(dispObj edgeImg);结束结束

对于代码生成,VideoReader函数需要的完整路径视频文件在目标硬件。的MATLAB编码器为NVI万博1manbetxDIA杰森和NVIDIA驱动平台支持包使用GStreamer库API来读取视频文件在目标平台上。软件支持文件(容器)兼容G万博1manbetxStreamer的格式和编解码器。有关更多信息,请参见https://gstreamer.freedesktop.org/documentation/plugin-development/advanced/media-types.html?gi-language=c。其他代码生成的限制VideoReader功能,请参阅限制

生成CUDA可执行的使用GPU编码器

创建一个GPU用于生成可执行代码的配置对象。使用coder.hardware杰森平台的功能来创建一个配置对象,并将其分配给硬件代码配置对象的属性cfg。使用BuildDir属性指定的文件夹在目标系统上执行远程构建过程。如果指定的目标建立文件夹不存在,那么该软件创建一个文件夹的名字。如果没有指定值cfg.Hardware.BuildDir指定远程构建过程发生在过去建立的文件夹。如果没有建立文件夹存储值,构建过程发生在主文件夹中。设置GenerateExampleMain属性来生成一个例子CUDA c++主要功能并编译它。这个例子不需要修改生成的主要文件。使用putFile的方法杰森对象将输入视频文件到目标平台。

cfg = coder.gpuConfig (exe”);cfg。硬件= coder.hardware (英伟达杰森的);cfg.Hardware.BuildDir=“~ / remoteBuildDir”;cfg。GenerateExampleMain =“GenerateCodeAndCompile”;hwobj.putFile (“犀牛”,hwobj.workspaceDir);

生成CUDA代码,使用codegen命令和配置对象以及通过GPU代码videoReaderDeploy入口点函数。代码生成发生在主机后,生成的文件复制,建立在目标。

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

运行可执行文件

运行可执行文件在目标硬件,使用runApplication方法的硬件对象。在MATLAB命令窗口中,输入:

pid = runApplication (hwobj,“videoReaderDeploy”);

在目标硬件显示窗口显示的边缘检测输出输入视频。

在运行时指定视频文件

而不是指定视频文件在代码生成期间,您可以修改的入口点函数接受一个变量文件名和代码配置对象在运行可执行文件。

函数videoReaderDeploy (vfilename)%创建杰森硬件对象hwobj =杰森();%创建视频读者对象vObj = VideoReader (hwobj vfilename,“宽度”,640,“高度”,480);%在目标系统上创建显示对象dispObj = hwobj.imageDisplay;%抓帧的视频管道vObj。hasFrame img = vObj.readFrame ();% Sobel边缘检测内核= [1 2 1 0 0 0;1 2 1];h = conv2 (img(:,: 2),内核,“相同”);v = conv2 (img(:,: 2),内核”,“相同”);e =√h。* h + v * v);edgeImg = uint8 (e > 100) * (240);%显示检测到图像边缘图像(dispObj edgeImg);结束结束

创建一个定制的主文件处理变量文件名输入运行时执行。所示的代码的一个片段。

静态孔隙main_videoReaderDeploy (const char * const vfilename) {videoReaderDeploy (vfilename);}/ / / /参数:int32_T命令行参数个数/ / const char * const argv[] / /返回类型:int32_T / / int32_T主要(int32_T, const char * const argv[]){/ /初始化应用程序videoReaderDeploy_initialize ();/ /调用入口点函数main_videoReaderDeploy (argv [1]);/ /终止应用程序videoReaderDeploy_terminate ();返回0;}

修改代码配置对象包括这个定制的主文件。

cfg = coder.gpuConfig (exe”);cfg。硬件= coder.hardware (英伟达杰森的);cfg.Hardware.BuildDir=“~ / remoteBuildDir”;cfg。CustomSource =“main.cu”;

生成CUDA代码,使用codegen命令和配置对象以及通过GPU代码videoReaderDeploy入口点函数。

vfilename = coder.typeof (“一个”[1024]);codegen (“配置”cfg,“参数”{vfilename},“videoReaderDeploy”,“报告”);

限制

另请参阅

功能

对象

相关的例子

更多关于