练习 - 运行 NVIDIA DeepStream Graph Composer 参考应用程序
让我们详细了解 DeepStream Graph Composer 启用的 IVA 应用程序工作流。 如前所述,NVIDIA 的云存储库或其他外部注册表可以提供拖放组件,以便在 DeepStream Composer 应用程序中使用。
通过使用这些扩展,你可以向 Composer 应用程序添加特性和功能。 最终,你可以使用此工具通过捆绑的容器生成器打包和分发 IVA 工作负载。 下图展示了此过程。
首先,同步到 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
使用以下命令验证扩展是否已安装且可用:
registry extn list
你可能会注意到,其中许多扩展都以映射到 DeepStream SDK 中包含的 NVIDIA 优化 GStreamer 插件的前缀开头。 例如,NvDsMuxDemuxExt 扩展提供了一个可视化组件,用于与 Gst-nvstreamdemux 进行交互。
现在,使用以下命令打开 Composer 应用程序:
composer
请注意,组件列表填充在应用程序用户界面的右侧。 组件按扩展名称进行分组。 如果未显示列表,则可能需要使用前面完成的步骤重新同步到 ncg-public 存储库。 选择扩展名称查看其提供的组件,如下所示:
以下指南可帮助你了解如何与 Composer 应用程序交互以开发自定义应用程序:
- 若要添加新的组件实例,请选择并按住组件的名称。 然后将其拖至图形编辑器空间。
- 若要显示组件的名称,请查看图形区域中的标题。 组件还可能包含输入/输出端口的句柄。
- 若要将组件彼此连接,请选择一个句柄,并在兼容的输入/输出端口之间绘制连接。
- 若要显示组件详细信息,请选择该组件。 详细信息显示在应用程序右侧的“详细信息”窗口中。 可以编辑此窗口中的属性,以自定义该组件的行为。
让我们来看一看参考应用程序,以展示你可以根据前面的指南创建什么内容。 之前安装 DeepStream 参考图包时,许多示例都安装在以下路径中:
/opt/nvidia/deepstream/deepstream/reference_graphs/
在 Composer 应用程序中,选择“文件”>“打开 Graph”,然后转到“/opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test1”路径。 选择“deepstream-test1.yaml”文件。 然后选择“确定”。
选择“NvDsSingleSrcInput”组件,然后在应用程序右侧打开“详细信息”窗格。 在“详细信息”窗格中向下滚动,并注意“uri”属性,我们在其中设置了将用作此 IVA 管道输入的视频文件。
如果想修改“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
接下来,查看此示例中显示的 IVA 管道的整体流程。 了解图形的整体工作流程和预期行为后,就会将此工作负载作为容器化工作负载进行重新分配和执行。
此应用程序使用
NvDsSingleSrcInput
将视频源作为输入,然后将其传递到NvDsStreamMux
(从技术上讲,它可以处理多个视频输入)。NvDsStreamMux
的输出提供每个视频输入中的帧,该帧将发送到NvDsInferVideo
中进行处理。 通过使用 ResNet 4 类对象检测器(例如自行车、汽车、人物或路标)应用推理。NvDsInferVideo
的推理结果将传递给NvDsPerClassObjectCounting
,以显示每个检测到的类的计数,也会传递给NvsOSD
,它将生成带有边界框的屏幕检测。 这些框通过到NvDsVideoRenderer
的最终连接显示。若要验证此行为并查看其实际效果,请调用包含的
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
此时应会看到如下所示的输出:
注意
如果打算使用虚拟机来满足主机要求,则在尝试运行使用 EGL 接收器进行可视化输出的 DeepStream 应用程序时可能会遇到问题。 若要解决此限制,请将 FakeSink 的“uri”源的“类型”更改为“1”。 请注意,FakeSink 不会提供任何视觉对象输出。 它允许工作负载执行,但不提供已处理的结果的相关屏幕显示。