DeepStream 参考应用程序 - deepstream-test5 app#

Test5 应用程序除了常规推理管道外,还支持以下功能

  • 将消息发送到后端服务器。

  • 作为消费者工作,接收来自后端服务器的消息。

  • 根据从服务器接收的消息触发基于事件的记录。

  • OTA 模型更新。

  • 通过 REST API 的传感器配置支持

支持的 IoT 协议和云配置#

DeepStream 插件指南中列出了 nvmsgbroker 插件支持的 IoT 协议(如 KAFKA、Azure、AMQP 等)的详细信息。可以参考 DeepStream 公共文档来设置特定于所用协议的 IoT 集线器/服务器/代理。[sink] 组密钥与 type=6 关联,用于 nvmsgconvnvmsgbroker 配置,详见配置组

消息消费者#

可以将 deepstream-test5-app 配置为充当云消息的消息消费者。解析接收到的消息后,可以根据消息的内容触发特定操作。例如,保存智能记录上下文的 NvDsSrcParentBin* 作为参数在 start_cloud_to_device_messaging() 中传递,该函数用于触发智能记录的启动/停止。默认情况下,已实现基于事件的记录来演示消息消费者的用法。用户需要实现自定义逻辑来处理其他类型的接收消息。有关实现的更多详细信息,请参阅 deepstream_c2d_msg* 文件。要订阅云消息,请相应地配置 [message-consumer] 组。

智能记录 - 基于事件的记录#

可以将 Test5 应用程序配置为根据从服务器接收的事件记录原始视频源。这样,此功能允许仅记录感兴趣的事件,而不是始终保存数据。有关智能记录的更多详细信息,请参阅 DeepStream 插件手册和 gst-nvdssr.h ``header file for more details about smart record. Event based recording can be enabled by setting ``smart-record[sourceX] 组下。目前,test5 应用程序仅支持源类型 = 4 (RTSP)。类似的方法也适用于其他类型的源。可以通过两种方式触发智能记录事件

  1. 通过云消息。

要通过云消息触发智能记录,应将 Test5 应用程序配置为充当消息消费者。可以通过相应地配置 [message-consumerX] 组来完成此操作。

配置消息消费者后,应在需要基于事件的记录的源上启用智能记录。可以按如下方式完成此操作

smart-record=1

以下最小 Json 消息预计会触发智能记录的启动/停止。

{
  command: string   // <start-recording / stop-recording>
  start: string     // "2020-05-18T20:02:00.051Z"
  end: string       // "2020-05-18T20:02:02.851Z",
  sensor: {
  id: string
  }
 }
  1. 通过本地事件。

设置 smart-record=2,这将通过云消息以及本地事件启用智能记录。为了演示通过本地事件进行基于事件的记录,应用程序默认每十秒触发启动/停止事件。此间隔和其他参数是可配置的。

OTA 模型更新#

Test5 应用程序可以在正在运行的管道中动态更新模型。为此,该应用程序提供了命令行选项 -o。如果使用 -o (ota_override_file) 选项启动 test5 应用程序,则会监视对该文件的任何更改,并根据该文件中的更改,使用新的模型动态更新正在运行的管道。

使用 OTA 功能#

执行以下操作以使用 OTA 功能

  1. 使用 -o <ota_override_file> 选项运行 deepstream-test5-app

  2. 在 DS 应用程序运行时,使用新的模型详细信息更新 <ota_override_file> 并保存它

  3. deepstream-test5-app 检测到文件内容更改,然后启动模型更新过程。目前,仅模型更新功能作为 OTA 功能的一部分受支持。

动态模型更新的假设:

  1. 新模型必须具有与先前模型相同的网络参数配置(例如,网络分辨率、网络架构、类数)

  2. 新模型的引擎文件或缓存文件由开发人员提供

  3. 如果覆盖文件中提供了其他 primary gie 配置参数的更新值,例如 group-thresholdbbox colorgpu-idnvbuf-memory-type 等,则在模型切换后将不起作用。

  4. Secondary gie 模型更新未经过验证,仅验证了主模型更新。

  5. 在动态模型更新过程中,不应观察到丢帧/没有推理的帧

  6. 如果模型更新失败,则会在控制台上打印错误消息,并且管道应继续使用旧的模型配置运行

  7. 需要 config-file 参数来抑制配置文件解析错误打印,模型切换过程中不使用此配置文件中的值

通过 REST API 的传感器配置支持(运行时传感器添加/删除功能)#

通过启用 nvmultiurisrcbin 的使用,deepstream-(test5-)app 可以支持运行时传感器 ADD/REMOVE 功能。

有关 nvmultiurisrcbin 的更多信息,请参见 此处

使用 nvmultiurisrcbin 运行 deepstream-test5-app 的示例命令

cd /opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-test5/configs
deepstream-test5-app -c test5_config_file_nvmultiurisrcbin_src_list_attr_all.txt

上述命令中传递的配置文件使用 [source-list] 配置组,其中配置键 use-nvmultiurisrcbin=1 用于启用 nvmultiurisrcbin。

  1. 应用程序启动时带有 2 个 X 源

  2. 能够使用 Section REST API 有效负载定义和参考示例 curl 命令中记录的 curl 命令 REST API 命令添加/删除流。

  3. 默认情况下,nvstreammux 配置键 drop-pipeline-eos 已设置,允许应用程序始终处于活动状态。这意味着即使在最后一个流 EOS 之后,应用程序也不会退出。这允许正在运行的 REST 服务器配置其他传感器。

  4. 默认情况下,FPS 日志中不观察流名称。在 source-list 组中,设置 stream-name-display=1 以查看流名称以及源 ID。

  5. 默认情况下,在添加流时,tiler 不会重复使用空图块。设置 square-seq-grid=1 以始终遵循正方形网格,如果添加新源,则将重复使用空图块。