0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

DeepStream Samples版的操作环境调试过程

NVIDIA英伟达企业解决方案 来源:NVIDIA英伟达企业解决方案 作者:NVIDIA英伟达企业解 2022-08-03 10:18 次阅读

NVIDIA的DeepStream是目前业界最好开发而且功能强大的AI视频分析工具,在NGC上https://catalog.ngc.nvidia.com/orgs/nvidia/containers/deepstream-l4t为 Jetson 提供 4 个可使用的版本,分别如下:

  • Base 版(deepstream-l4t:6.1-base):作为 DeepStream SDK 一部分的插件、库以及依赖项,如 CUDA、TensorRT、GStreamer 等,希望为自己创建 Docker 版的 DeepStream 应用程序用户,建议使用此映像。请注意,这个镜像不包含示例内容。

  • Samples 版(deepstream-l4t:6.1-samples):在 Base 版的基础上添加范例的内容,包括 C/C++ 开源代码、deepstream-app 范例配置文件、模型文件与测试视频等,适合体验与学习用途的初学者使用。

  • IoT 版(deepstream-l4t:6.1-iot):在 Base 版上扩充 IoT 应用所需的环境,包括 Kafka、Azure IoT、REDIS 和 MQTT 等协议、DeepStream test5 应用程序以及相关配置和模型,可启用多视频流应用程序,并将各种消息传递到服务器端进行统计分析。

  • Triton 部署版(deepstream-l4t:6.1-triton):这是配合 Triton 推理服务器使用的环境,开发者可以直接使用 TensorFlow、TensorFlow-TensorRT 与 ONNX-RT 等方式进行推理计算。

从上面的描述中可以看出 Samples 版本镜像适合绝大部分初学者的使用,现在就以这个镜像来做说明。

1、下载镜像:

这里使用 JetPack 5.0 版的 Jetson Orin 开发套件,可以使用 DeepStream-6.1 版的容器,可以从 https://catalog.ngc.nvidia.com/orgs/nvidia/containers/deepstream-l4t网页右上角 “Pull Tag” 按钮中,选择 “6.1-samples” 选项,这时就已经将执行指令复制到缓冲区,然后粘贴在 Jetson 上的命令终端,指令内容如下:

docker  pull  nvcr.io/nvidia/deepstream-l4t:6.1-samples

这样就能从 NGC 服务器将 deepstream-l4t:6.1-samples 镜像文件下载到 Jetson 设备上。下载完毕之后,执行以下指令看看结果:

docker  images

如下图 TAG 栏中显示 “6.1-samples” 就表示镜像文件下载成功。

d27eddbc-1263-11ed-ba43-dac502259ad0.png

到此只是将镜像文件下载到本地,但还不是可执行的容器状态,接着就要使用 Docker 指令来创建工作容器。

如果是使用 JetPack 4.6.x 版的其他 Jetson 设备时,目前只能使用 DeepStream-6.0.1 版本,请使用以下指令下载镜像文件到 Jetson 设备上:

docker  pull  nvcr.io/nvidia/deepstream-l4t:6.0.1-samples

2、创建临时容器的指令:

以下是 NVIDIA 官方所提供的创建容器指令,由于指令内容较长,建议写入 .sh 脚本中会比较方便执行:

# 允许外部应用程序连接到主机的X显示器:xhost +# 允许外部应用程序连接到主机的X显示器:dockerrun-it--rm--net=host--runtimenvidia-eDISPLAY=$DISPLAY-w/opt/nvidia/deepstream/deepstream-6.1-v/tmp/.X11-unix/:/tmp/.X11-unixnvcr.io/nvidia/deepstream-l4t:6.1-samples

以下对这段指令进行基本说明:

  • 使用 “docker run” 组合指令来创建容器;

  • 中间的参数可以用 “docker run --help” 查看,这里使用以下几个参数:

-it:启动互动式(-i)的终端(-t);

--rm:退出容器之后自动移除;

--net:让容器内网络使用指定网络,这里指定 “host” 表示共用 Jetson 设备网络;

--runtime:指定执行时的方式,这里指定为 “nvidia” 其实可以省略;

-e:配置环境变量,这里指定容器内 DISPLAY 变量为设备的 $DISPLAY 变量内容;

-w:指定容器内的工作目录,进入容器就会直接进入到这个工作目录下;

-v:将容器内的目录与容器外的目录形成映射;

  • 镜像的完整路径(nvcr.io/nvidia/deepstream-l4t:6.1-samples),放在最后面。

这样的指令有个最大的缺点,就是每次启动都只能是个临时用途的容器,一旦退出之后就会删除工作容器,表示过程中所有执行修改与步骤都将付之一炬,因此这样指令适合做简单的测试用途,但并不适合作为开发阶段的使用,必须做些调整。

3、将源代码与范例复制到容器外:

在容器中的 DeepStream 源代码有两个部分:

  • Sources:在容器内 /opt/nvidia/deepstream/deepstream/sources

  • Samples:在容器内 /opt/nvidia/deepstream/deepstream/samples

我们先将这两个部分的内容复制到容器外,然后启动容器的时候再用 “-v” 进行路径映射,这样过程中修改的内容就会保存在容器外,即便退出后销毁容器也没关系。不过这个复制的过程必须在 “容器启动” 的状态下执行,可以先执行下面最简单的容器启动指令:

# 在第一个命令终端dockerrun-it--rmnvcr.io/nvidia/deepstream-l4t:6.1-samples

现在进入容器之内,可能看到以下的显示信息

root@1c03f4d7628a:/opt/nvidia/deepstream/deepstream-6.1#

“1c03f4d7628a” 是这个容器目前的编号,现在需要开启一个指令终端进行操作,这个过程是在容器外进行处理,请执行以下指令列出执行中的容器编号与状态:

# 在第二个命令终端dockerps

下图显示目前有个正在执行的容器,其编号(CONTAINER ID)为 1c03f4d7628a,正好是上面看到容器内所显示的编号。

d2aaaabe-1263-11ed-ba43-dac502259ad0.png

现在执行以下指令,将容器内的 sources 与 samples 目录内容,复制到容器外的指定路径之下,例如 ~/deepstream/sources~/deepstream/samples

# 在第二个命令终端mkdir  -p  ~/deepstream export  CONTAINER_ID=’根据实际编号’docker  cp  $CONTAINER_ID:/opt/nvidia/deepstream/deepstream/sources ~/deepstream/sourcesdockercp$CONTAINER_ID:/opt/nvidia/deepstream/deepstream/samples~/deepstream/samples

现在看看在 Jetson 设备上 ~/deepstream 目录下是否多了 sources 与 samples 两个目录?比对一下里面的内容是否与容器内的一致。

接下来就可以调整一下执行的指令,让所有的代码与配置文件的修改部分,保留在容器外面,这样过程中的修改就不会白白浪费。请执行以下指令创建另一容器:

# 在第二个命令终端sudo  xhost +docker  run  -it  --rm  --net=host  --runtime  nvidia  -e  DISPLAY=$DISPLAY -w  /opt/nvidia/deepstream/deepstream  -v /tmp/.X11-unix/:/tmp/.X11-unix -v  ~/deepstream/sources:/opt/nvidia/deepstream/deepstream/sources -v  ~/deepstream/samples:/opt/nvidia/deepstream/deepstream/samples nvcr.io/nvidia/deepstream-l4t:6.1-samples

现在再开启一个指令窗口,执行以下指令检查以下容器的状态:

# 在第三个命令终端dockerps

应该会看到类似下面截屏中的两个 “执行中容器” 的信息:

d2cfcace-1263-11ed-ba43-dac502259ad0.png

在容器外试着在 ~/deepstream/sources 目录下添加个子目录:

# 在第三个命令终端mkdir-p~/deepstream/sources/outsideContainer

然后到第二个终端里执行以下指令,看看是否也多了 “outsideContainer” 目录?

# 在第二个命令终端ls/opt/nvidia/deepstream/deepstream/sources

如果能对应的上,就表示后面在容器内修改的代码文件,都存放在容器外面的指定路径下,这样就不用担心每次退出容器之后的问题。

4、在容器内执行范例

现在就在第二个终端里执行 DeepStream 的标准范例,请执行以下指令:

# 在第二个命令终端cd  /samples/configs/deepstream-appdeepstream-app-csource4_1080p_dec_infer-resnet_tracker_sgie_tiled_display_int8.txt

就能看到下面这个大家相当熟悉的执行结果。

以上就完成 DeepStream Samples 版的操作环境调试过程,开发人员可以在容器外用编辑器去修改配置文件或 C/C++ 源代码,然后在容器内执行编译或操作,这样就会非常方便。

审核编辑:汤梓红


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • NVIDIA
    +关注

    关注

    14

    文章

    4592

    浏览量

    101703
  • 容器
    +关注

    关注

    0

    文章

    481

    浏览量

    21876
  • 镜像
    +关注

    关注

    0

    文章

    153

    浏览量

    10587

原文标题:NVIDIA Jetson 系列文章(6):使用容器版DeepStream

文章出处:【微信号:NVIDIA-Enterprise,微信公众号:NVIDIA英伟达企业解决方案】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    初步掌握嵌入式程序的编译和调试过程

    实验一 嵌入式开发环境的建立 一、实验目的1,掌握嵌入式软件开发环境的建立过程;2,初步掌握嵌入式程序的编译和调试过程。二、实验步骤1,安装集成开发
    发表于 11-05 08:51

    最小系统板的调试过程

    关键字:NXP LPC1768 最小系统 Keil MDK 开发环境 J-Link 仿真器概述:以 MDK4.74版本配合 J-Link 仿真器为例演示一下最小系统板的调试过程。首先运行
    发表于 11-25 06:56

    USMART调试过程是怎样的

    对应的相关函数,并执行,同时支持返回结果。USMART调试过程:USMART配置步骤:将USMART包添加到工程中,头文件要包含到path。添加需要调用的函数到usmart_config.c文件中。主函数中调用usmart_dev.init函数初始化usmart。即可通过助手发送命令,调用在usmar
    发表于 01-13 06:41

    RFID串口调试过程是怎样的?

    RFID串口调试过程是怎样的?
    发表于 02-09 07:52

    简化Xilinx和Altera FPGA调试过程

    简化Xilinx和Altera FPGA调试过程:通过FPGAViewTM 解决方案,如混合信号示波器(MSO)和逻辑分析仪,您可以在Xilinx 和Altera FPGA 内部迅速移动探点,而无需重新编译设计方案。能够把内部FPGA
    发表于 11-20 17:46 26次下载

    电源设计调试过程中的异常现象分析

    调试过程中所看到的一些异常现象,以及后来的解决办法。其实很多工程师认为设计电源是非常重经验的一门技术,要见多识广。这种经
    发表于 10-09 10:49 1619次阅读

    APM四轴 初级安装调试过程

    ACM四轴 安装调试过程 此教程主要讲解软件调试 首先要确认自己想飞哪种模式,X还是十模式 根据自己的飞行模式插好线 本章以X模式为例
    发表于 11-03 10:23 6次下载

    单片机驱动DM9000网卡芯片详细调试过程

    单片机驱动DM9000网卡芯片详细调试过程
    发表于 11-02 11:03 0次下载

    单片机调试过程中的调试组件导致的问题

    单片机调试过程中,经常会遇到类似第3只眼的问题。何谓第3只眼呢?
    的头像 发表于 12-30 17:12 7053次阅读
    单片机<b class='flag-5'>调试过程</b>中的<b class='flag-5'>调试</b>组件导致的问题

    浅析STM32调试过程中的几个相关问题

    总的来讲,单片机调试是单片机开发工作必不可少的环节。不管你愿不愿意,调试过程中总会有各种不期而遇的问题出现在我们面前来磨砺我们。这里分享几点STM32调试过程中与开发工具及IDE有关的几个常见问题,以供参考。
    的头像 发表于 01-21 13:50 4859次阅读

    GT9271触控屏芯片移植调试过程的详细教程说明

    本文档的主要内容详细介绍的是GT9271触控屏芯片移植调试过程的详细教程说明
    发表于 08-05 17:34 46次下载
    GT9271触控屏芯片移植<b class='flag-5'>调试过程</b>的详细教程说明

    直接阻抗匹配的调试过程

    直接匹配阻抗,天线与射频芯片在同一块板子,调试步骤与50欧姆阻抗匹配调试天线参数差不多,多了一部分射频芯片端的滤波部分的参数计算。下面介绍调试过程
    的头像 发表于 10-03 16:18 8898次阅读
    直接阻抗匹配的<b class='flag-5'>调试过程</b>

    S7-1200系列PLC调试过程小结

    S7-1200系列PLC调试过程小结
    发表于 12-20 09:25 3次下载

    DeepStream容器执行Python的开发操作

    前面一篇文章已经带着大家将 DeepStream 容器配置 Python 使用环境,本文的重点就是继续执行实际的开发操作
    的头像 发表于 08-17 10:22 1570次阅读

    电磁流量计调试过程中存在的问题以及解决措施

    跟其他类型的仪表调试相比,电磁流量计的调试方法存在很大的差异性,它的复杂程度会更高,稍不注意,调试过程中就会出现人工失误操作问题,影响电磁流量计的正常运行。进行电磁流量计
    的头像 发表于 10-27 09:08 1202次阅读