DeepStream 参考应用程序 - deepstream-test5 app#
Test5 应用程序除了常规推理管道外,还支持以下功能
将消息发送到后端服务器。
作为消费者工作,接收来自后端服务器的消息。
根据从服务器接收的消息触发基于事件的记录。
OTA 模型更新。
通过 REST API 的传感器配置支持
支持的 IoT 协议和云配置#
DeepStream 插件指南中列出了 nvmsgbroker
插件支持的 IoT 协议(如 KAFKA、Azure、AMQP 等)的详细信息。可以参考 DeepStream 公共文档来设置特定于所用协议的 IoT 集线器/服务器/代理。[sink] 组密钥与 type=6
关联,用于 nvmsgconv
和 nvmsgbroker
配置,详见配置组。
消息消费者#
可以将 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)。类似的方法也适用于其他类型的源。可以通过两种方式触发智能记录事件
通过云消息。
- 要通过云消息触发智能记录,应将 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 } }
通过本地事件。
设置
smart-record=2
,这将通过云消息以及本地事件启用智能记录。为了演示通过本地事件进行基于事件的记录,应用程序默认每十秒触发启动/停止事件。此间隔和其他参数是可配置的。
OTA 模型更新#
Test5 应用程序可以在正在运行的管道中动态更新模型。为此,该应用程序提供了命令行选项 -o
。如果使用 -o
(ota_override_file) 选项启动 test5 应用程序,则会监视对该文件的任何更改,并根据该文件中的更改,使用新的模型动态更新正在运行的管道。
使用 OTA 功能#
执行以下操作以使用 OTA 功能
使用
-o <ota_override_file>
选项运行deepstream-test5-app
在 DS 应用程序运行时,使用新的模型详细信息更新
<ota_override_file>
并保存它deepstream-test5-app
检测到文件内容更改,然后启动模型更新过程。目前,仅模型更新功能作为 OTA 功能的一部分受支持。
动态模型更新的假设:
新模型必须具有与先前模型相同的网络参数配置(例如,网络分辨率、网络架构、类数)
新模型的引擎文件或缓存文件由开发人员提供
如果覆盖文件中提供了其他
primary gie
配置参数的更新值,例如group-threshold
、bbox color
、gpu-id
、nvbuf-memory-type
等,则在模型切换后将不起作用。Secondary gie
模型更新未经过验证,仅验证了主模型更新。在动态模型更新过程中,不应观察到丢帧/没有推理的帧
如果模型更新失败,则会在控制台上打印错误消息,并且管道应继续使用旧的模型配置运行
需要 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。
应用程序启动时带有 2 个 X 源
能够使用 Section REST API 有效负载定义和参考示例 curl 命令中记录的 curl 命令 REST API 命令添加/删除流。
默认情况下,nvstreammux 配置键 drop-pipeline-eos 已设置,允许应用程序始终处于活动状态。这意味着即使在最后一个流 EOS 之后,应用程序也不会退出。这允许正在运行的 REST 服务器配置其他传感器。
默认情况下,FPS 日志中不观察流名称。在 source-list 组中,设置 stream-name-display=1 以查看流名称以及源 ID。
默认情况下,在添加流时,tiler 不会重复使用空图块。设置 square-seq-grid=1 以始终遵循正方形网格,如果添加新源,则将重复使用空图块。