创建 AI 应用程序#
上一节介绍了如何运行预先创建的 DeepStream test1 应用程序。本节将介绍如何使用 Composer 从头开始创建 DeepStream test1 应用程序。

启动 Composer#
使用以下命令启动 Composer 工具
composer
拖放组件#
DeepStream 管道主要依赖于 Gstreamer 插件,这些插件在 Graph Composer 中由 INvDsElement
基类型表示。使用 GroupBy
按钮按基类型列出组件。 INvDsElement
下的所有组件都代表 GStreamer 插件。
DeepStream test1 应用程序检测单个批次视频源中的人物,并在显示器上渲染带有边界框的输出。它需要以下组件:
用于输入的源插件组件
Mux 插件组件,因为推理插件组件之前需要 mux
带有 peoplenet 模型的视频推理插件组件
OSD 插件组件,用于绘制边界框
Render 插件组件,用于显示输出
所有这些组件都可以在发布到 NVIDIA Cloud 存储库的扩展中找到,并且可以在 Composer 的组件列表窗口中浏览。您可以将这些组件从组件列表窗口拖放到画布上。
有关 DeepStream 支持的所有组件,请参阅 DeepStream 组件。

配置组件#
组件的参数可以在添加到画布后通过在画布上选择组件来配置。如果属性未更新,则使用默认值,因此并非所有属性都需要设置。通过将属性设置为预期值来配置组件
在源组件中设置输入文件路径,例如 “/opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4”
在 mux 中设置批处理大小和 GPU ID,例如 “0”
在视频推理组件中设置要使用的推理模型,例如 “nvidia::deepstream::NvDsResnet18_4ClassDetectorModel”
注意
插件组件 (INvDsElement) 属性与 GStreamer 插件属性 1:1 匹配。

注意
NvDsInferVideo
和 NvInferAudio
组件具有特殊的连接器 infer-model-config,允许用户连接 INvDsInferModelConfigComponent
组件。用户可以将推理配置文件与这些组件中的其他模型相关文件打包在一起。使用此配置是可选的,用户也可以直接在 config-file-path 属性中编程推理配置文件路径。
连接组件#
需要连接组件的输入/输出端口以建立数据传输。 INvDsElement
的输入/输出端口与 Gstreamer 插件垫 1:1 匹配。当前 Composer 不验证此版本中的输入/输出数据类型,它只会检查输入/输出句柄是否兼容。数据类型验证计划在未来版本中进行。用户可以使用名称匹配端口类型,例如 video-out、video-in、audio-out、audio-in 等。只有 out 和 in 端口可以相互连接,不允许 in 到 in 或 out 到 out 连接。

添加 GStreamer 调度器#
DeepStream 组件使用 DeepStream 和 GStreamer 插件,这需要 GStreamer 运行时从图中执行管道。 GStreamer 调度器组件处理后台 GStreamer 功能,以从图中创建和执行管道。

计数人数#
如何在推理管道中添加更多功能,例如测量 FPS 或计数对象?让我们在此管道中添加人数计数,因为我们使用了人员检测网络。

人数计数组件作为探针处理程序添加到输出视频端口。探针处理程序组件注册回调,每当连接端口上有数据可用时都会调用这些回调。它允许用户处理来自端口的数据,这些处理程序可以将新数据添加到 GstBuf 或修改现有的 GstBuf。
保存图#
可以通过右键单击画布来保存图。按照 GraphComposer_Graph_Runtime 中的说明使用保存的 .yaml 图文件运行应用程序。请参阅 /opt/nvidia/deepstream/deepstream-7.1/reference_graphs/deepstream-test1
中的 Container Builder 配置文件,作为为保存的图创建新配置的参考。
使用多个输入#
您可以添加多个 NvDsSingleSrcInput
组件并连接到 MvDsStreamMux 组件。这不允许在运行时添加/删除输入。

运行时添加/删除输入#
有一个 NvDsMultiSrcInput
组件,它基于 Gstream bin。它将输入列表作为属性,允许通过运行时操作器组件、智能记录开始/停止来运行时更改列表。运行时添加/删除和智能记录开始/停止信号可以由其他组件触发。您可以实现自定义组件来触发这些操作,例如云消息、键盘事件等。
