练习 - 运行 NVIDIA DeepStream Graph Composer 参考应用程序

已完成

让我们详细了解 DeepStream Graph Composer 启用的 IVA 应用程序工作流。 如前所述,NVIDIA 的云存储库或其他外部注册表可以提供拖放组件,以便在 DeepStream Composer 应用程序中使用。

通过使用这些扩展,你可以向 Composer 应用程序添加特性和功能。 最终,你可以使用此工具通过捆绑的容器生成器打包和分发 IVA 工作负载。 下图展示了此过程。

显示重新访问的 NVIDIA DeepStream 工作流的示意图。

  1. 首先,同步到 NVIDIA 的公有云存储库以引入最新的可用扩展。 若要完成此过程,请在主机上的终端中运行以下命令:

    registry repo sync -n ngc-public
    

    该命令生成类似下面的输出:

    2021-09-13 21:32:39,127 - Registry - INFO - Syncing repo ngc-public ...
    2021-09-13 21:32:41,022 - Registry - INFO - Syncing extension NvDsBaseExt version 0.0.1
    2021-09-13 21:32:45,833 - Registry - INFO - Syncing extension NvDsAnalyticsExt version 0.0.1
    2021-09-13 21:32:50,676 - Registry - INFO - Syncing extension NvDsCloudMsgExt version 0.0.1
    2021-09-13 21:32:55,743 - Registry - INFO - Syncing extension NvDsConverterExt version 0.0.1
    2021-09-13 21:33:00,579 - Registry - INFO - Syncing extension NvDsDewarperExt version 0.0.2
    2021-09-13 21:33:05,283 - Registry - INFO - Syncing extension NvDsDewarperExt version 0.0.1
    2021-09-13 21:33:10,300 - Registry - INFO - Syncing extension NvDsInferenceExt version 0.0.1
    2021-09-13 21:33:15,899 - Registry - INFO - Syncing extension NvDsInferenceUtilsExt version 0.0.2
    2021-09-13 21:33:20,574 - Registry - INFO - Syncing extension NvDsInferenceUtilsExt version 0.0.1
    2021-09-13 21:33:25,722 - Registry - INFO - Syncing extension NvDsInterfaceExt version 0.0.1
    2021-09-13 21:33:30,814 - Registry - INFO - Syncing extension NvDsMuxDemuxExt version 0.0.1
    Repository synced
    
  2. 使用以下命令验证扩展是否已安装且可用:

    registry extn list
    

    你可能会注意到,其中许多扩展都以映射到 DeepStream SDK 中包含的 NVIDIA 优化 GStreamer 插件的前缀开头。 例如,NvDsMuxDemuxExt 扩展提供了一个可视化组件,用于与 Gst-nvstreamdemux 进行交互。

  3. 现在,使用以下命令打开 Composer 应用程序:

    composer
    

    显示 NVIDIA DeepStream Graph Composer 正在打开的屏幕截图。

    请注意,组件列表填充在应用程序用户界面的右侧。 组件按扩展名称进行分组。 如果未显示列表,则可能需要使用前面完成的步骤重新同步到 ncg-public 存储库。 选择扩展名称查看其提供的组件,如下所示:

    显示 NVIDIA DeepStream Graph Composer 组件的屏幕截图。

    以下指南可帮助你了解如何与 Composer 应用程序交互以开发自定义应用程序:

    • 若要添加新的组件实例,请选择并按住组件的名称。 然后将其拖至图形编辑器空间。
    • 若要显示组件的名称,请查看图形区域中的标题。 组件还可能包含输入/输出端口的句柄。
    • 若要将组件彼此连接,请选择一个句柄,并在兼容的输入/输出端口之间绘制连接。
    • 若要显示组件详细信息,请选择该组件。 详细信息显示在应用程序右侧的“详细信息”窗口中。 可以编辑此窗口中的属性,以自定义该组件的行为。
  4. 让我们来看一看参考应用程序,以展示你可以根据前面的指南创建什么内容。 之前安装 DeepStream 参考图包时,许多示例都安装在以下路径中:

    /opt/nvidia/deepstream/deepstream/reference_graphs/
    
    1. 在 Composer 应用程序中,选择“文件”>“打开 Graph”,然后转到“/opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test1”路径。 选择“deepstream-test1.yaml”文件。 然后选择“确定”。

      显示 NVIDIA DeepStream Graph Composer 正在打开 Test1 应用程序的屏幕截图。

    2. 选择“NvDsSingleSrcInput”组件,然后在应用程序右侧打开“详细信息”窗格。 在“详细信息”窗格中向下滚动,并注意“uri”属性,我们在其中设置了将用作此 IVA 管道输入的视频文件。

      显示 NVIDIA DeepStream Graph Composer Test1 应用程序属性的屏幕截图。

    3. 如果想修改“uri”属性以使用 RTSP 流,请将“类型”设置为“4”。 提供 RTSP 路径“rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov”。 此操作与下面显示的 DeepStream [source0] 配置组条目具有相同的效果:

      [source0]
      enable=1
      #Type - 1=CameraV4L2 2=URI 3=MultiURI 4=RTSP
      type=4
      uri=rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov
      num-sources=1
      #drop-frame-interval=2
      gpu-id=0
      # (0): memtype_device   - Memory type Device
      # (1): memtype_pinned   - Memory type Host Pinned
      # (2): memtype_unified  - Memory type Unified
      cudadec-memtype=0
      
  5. 接下来,查看此示例中显示的 IVA 管道的整体流程。 了解图形的整体工作流程和预期行为后,就会将此工作负载作为容器化工作负载进行重新分配和执行。

    显示 NVIDIA DeepStream Graph Composer Test1 应用程序全貌的屏幕截图。

    此应用程序使用 NvDsSingleSrcInput 将视频源作为输入,然后将其传递到 NvDsStreamMux(从技术上讲,它可以处理多个视频输入)。 NvDsStreamMux 的输出提供每个视频输入中的帧,该帧将发送到 NvDsInferVideo 中进行处理。 通过使用 ResNet 4 类对象检测器(例如自行车、汽车、人物或路标)应用推理。 NvDsInferVideo 的推理结果将传递给 NvDsPerClassObjectCounting,以显示每个检测到的类的计数,也会传递给 NvsOSD,它将生成带有边界框的屏幕检测。 这些框通过到 NvDsVideoRenderer 的最终连接显示。

  6. 若要验证此行为并查看其实际效果,请调用包含的 execute_graph.sh 脚本并在 parameters.yaml 中传递必要的参数。 若要在基于 x86 的主机上执行 deepstream-test1.yaml 的图形,请在终端中运行以下命令:

    cd /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test1
    /opt/nvidia/graph-composer/execute_graph.sh deepstream-test1.yaml parameters.yaml -d /opt/nvidia/graph-composer/config/target_x86_64_cuda_11_4.yaml
    

    此时应会看到如下所示的输出:

    显示 NVIDIA DeepStream Graph Composer Test1 正在运行的屏幕截图。

    注意

    如果打算使用虚拟机来满足主机要求,则在尝试运行使用 EGL 接收器进行可视化输出的 DeepStream 应用程序时可能会遇到问题。 若要解决此限制,请将 FakeSink 的“uri”源的“类型”更改为“1”。 请注意,FakeSink 不会提供任何视觉对象输出。 它允许工作负载执行,但不提供已处理的结果的相关屏幕显示。