Gst-nvdsanalytics#
此插件对 nvinfer
(主检测器) 和 nvtracker
附加的元数据执行分析。分析指的是感兴趣区域 (ROI) 过滤、拥挤检测、方向检测和越线。该插件以批处理模式运行,独立处理每个流的上下文。基于 ROI 的分析适用于主检测器输出,但方向检测和越线需要跟踪器 ID,因为这两项分析都需要之前的历史/状态。分析规则的配置通过配置文件实现。对于所有分析计算,都使用对象的边界框的底部中心坐标。如果边界框定义为 (x_left, y_top, width, height),则底部中心坐标将是 (x_left + width/2, y_top + height)
gst-nvdsanalytics
插件从上游 (nvtracker/nvinfer
) 元素发送的批处理缓冲区中提取元数据,并将其传递到低级 nvdsanalytics
库。低级库根据为每个流的每个功能配置的规则执行分析,库返回分析输出,该输出适用于每个跟踪的对象以及完整的帧。分析输出(帧级别)封装在 NvDsAnalyticsFrameMeta
结构中,并作为用户元数据添加,meta_type 设置为 NVDS_USER_FRAME_META_NVDSANALYTICS
。用户元数据添加到 NvDsFrameMeta
的 frame_user_meta_list
成员。分析输出(每个检测到的对象)封装在 NvDsAnalyticsObjInfo
结构中,并作为用户元数据添加,meta_type 设置为 NVDS_USER_OBJ_META_NVDSANALYTICS
。用户元数据添加到 NvDsObjectMeta
的 obj_user_meta_list
成员。
NvDsAnalyticsObjInfo
NvDsAnalyticsFrameMeta
的定义在 sources/includes/nvds_analytics_meta.h
头文件中可用。有关如何访问用户元数据的指南,请参阅 NvDsBatchMeta 和 Tensor Metadata 中“用户/自定义元数据”的添加。

输入和输出#
输入
包含 NV12/RGBA 帧的 GStreamer 缓冲区,带有附加的元数据
控制参数
enable: True 启用插件,False 设置为直通模式
config-file: 包含分析规则的配置文件
输出
原始 NV12/RGBA 批处理缓冲区
NvDsAnalyticsFrameMeta
(包含有关批处理缓冲区中各个帧的信息的元数据)NvDsAnalyticsObjInfo
(包含有关批处理缓冲区各个帧中各个对象的信息的元数据)
功能#
下表总结了插件的功能。
功能 |
描述 |
发布版本 |
---|---|---|
ROI 过滤 |
此功能检测 ROI 中对象的存在,结果作为每个对象的元数据附加,以及每帧 ROI 中对象的总数。 |
DS 5.0 |
拥挤检测 |
此功能检测 ROI 中对象的存在,结果作为每个对象的元数据附加,以及每帧 ROI 中对象的总数以及拥挤状态,即 ROI 中对象的数量超过预配置的阈值。 |
DS 5.0 |
方向检测 |
使用对象的历史位置和当前帧信息检查对象是否沿预配置的方向移动。结果作为每个对象的元数据附加。 |
DS 5.0 |
越线 |
此功能检查对象是否沿虚拟线的预配置方向移动,以及是否已越过虚拟线。结果在越线时附加到对象,帧元数据中还附加了累积计数以及每帧越线计数。 |
DS 5.0 |
Gst 属性#
下表描述了 Gst-nvdsanalytics 插件的 Gst 属性。
属性 |
含义 |
类型和范围 |
示例注释 |
---|---|---|---|
unique-id |
用于标识元素附加的输出的唯一标识无符号整数值 |
整数,0 到 4,294,967,295 |
unique-id=17 |
enable |
True 启用插件,False 设置为直通模式 |
布尔值 |
enable=1 |
config-file |
包含分析规则的配置文件 |
字符串 |
config-file=config_nvdsanalytics.txt |
配置文件参数#
配置文件位于 sources/apps/sample_apps/deepstream-nvdsanalytics-test/config_nvdsanalytics.txt。
Gst-nvdsanalytics 配置文件使用 “Key File” 格式,描述见: https://specifications.freedesktop.org/desktop-entry-spec/latest
[property]
组配置插件的常规行为。它是唯一强制性的组。[roi-filtering-stream-<n>]
组配置由 <n> 指定的流的 ROI 过滤规则参数。例如,classes.[roi-filtering-stream-0]
为流 ID 0 配置 ROI 过滤规则。[overcrowding-<n>]
组配置由 `` 指定的流的拥挤参数。 [direction-detection-<n>]
组配置由 <n> 指定的流的方向检测参数。[line-crossing-<n>]
组配置由 <n> 指定的流的越线参数。
下表分别描述了 [property]
组和 [<feature>-stream-<n>]
组支持的键。
属性 |
适用组 |
含义 |
类型和范围 |
示例注释 |
---|---|---|---|---|
enable |
[property] | [<feature>-stream-<n>] |
用于启用或禁用插件或功能的通用属性 |
布尔值 |
enable=1 |
config-width |
[property] |
配置分析规则的宽度 |
整数,>0 |
config-width=1280 |
config-height |
[property] |
[property] |
整数,>0 |
配置分析规则的高度 |
osd-mode |
[property] |
0:禁用显示任何线条、ROI 和文本 1:仅显示线条、roi 和静态文本,即标签 2:除了 1 中的所有信息外,还显示所有事件的信息 |
整数 0,1,2 |
osd-mode=2 |
display-font-size |
[property] |
设置分析数据的 OSD 字体大小 |
整数 > 0 |
display-font-size=12 |
roi-<label> |
[roi-filtering-stream-<n>] | [overcrowding-stream-<n>] |
ROI 可以使用 roi 键后跟其对应的标签 (roi-<label>) 来指定,值由多边形的半冒号分隔的坐标组成 (roi-<label>=x1;y1;x2;y2;x3;y3;x4;y4;x5;y5)。用户可以指定一个具有 > 3 个点的简单多边形。点应按顺序指定,因为需要点的相对位置来检查多边形中的对象。 |
字符串 |
roi-RF= 295;643;579;634;642;913;56;828 roi-OC= 295;643;579;634;642;913;56;828 |
inverse-roi |
[roi-filtering-stream-<n>] |
如果标志设置为 true,则表示配置的 ROI 外部的对象将附加 ROI 标签,并计算 ROI 外部的对象并作为帧级别输出发送 |
布尔值 |
inverse-roi=0 |
class-id |
[<feature>-stream-<n>] |
应用分析规则的类 ID,用分号分隔。| -1 表示规则将应用于所有类 |
字符串 |
class-id=0;1;2 或 class-id=-1 |
object-threshold |
[overcrowding-stream-<n>] |
总计数,超过此计数后应在帧元数据中指示拥挤标志。 |
整数,>=0 |
object-threshold=10 |
direction-<label> |
[direction-detection-stream-<n>] |
该值指示与配置的 <label> 对应的方向 (x1;y1;x2;y2)。当对象沿配置的方向移动时,特定规则的标签将作为用户元数据附加到对象 |
字符串 |
direction-South=284;840;360;662 |
line-crossing-<label> |
[line-crossing-stream-<n>] |
该值指示方向的 2 个坐标,后跟虚拟线的 2 个坐标。这些坐标使用分号分隔 (line-crossing-<label>=x1d;y1d;x2d;y2d;x1c;y1c;x2c;y2c)。方向指示对象应沿其移动的方向,该方向可被视为计数,因此对象应沿 x1d,y1d 到 x2d,y2d 方向,这表示方向向量。越线坐标 x1c,y1c 和 x2c,y2c 指示虚拟线,当沿配置方向移动的对象越过该虚拟线时,将计入越线。<label> 是规则的字符串标识。可以为单个流定义多个越线 |
字符串 |
line-crossing-Exit=789;672;1084;900;851;773;1203;732 |
extended |
[line-crossing-stream-<n>] |
布尔参数,用于检查仅在配置的线上或覆盖视频帧的扩展线上发生的穿越。如果 extended 为 0,则仅计数配置线上的越线 |
布尔值 |
extended=0 |
mode |
[line-crossing-stream-<n>] |
参数,允许用户配置对象方向与配置方向的符合程度以进行穿越。可能的选项:strict、balanced、loose。按照名称建议操作,其中 loose 将仅检查对象是否已越过线,并且只需要对象处于相同方向且容差非常高。 |
字符串 |
mode=loose
mode=strict
mode=balanced
|
注意
config-width、config-height 指示配置分析规则的分辨率。如果运行时流分辨率与配置分辨率不同。插件会处理分辨率更改,并为运行时分辨率缩放规则。配置规则不是以绝对像素值表示的。
以下管道演示了插件的用法。
适用于 dGPU
gst-launch-1.0 filesrc location=streams/sample_1080p_h264.mp4 ! qtdemux ! h264parse ! nvv4l2decoder ! m.sink_0 nvstreammux name=m width=1920 height=1080 batch-size=1 live-source=1 ! nvinfer config-file-path= sources/apps/sample_apps/ deepstream-nvdsanalytics-test/nvdsanalytics_pgie_config.txt ! nvtracker ll-lib-file = /opt/nvidia/deepstream/deepstream/lib/libnvds_nvdcf.so ll-config-file= tracker_config.yml tracker-width=640 tracker-height=384 ! nvdsanalytics config-file= sources/apps/sample_apps/deepstream-nvdsanalytics-test/config_nvdsanalytics.txt ! nvmultistreamtiler ! nvvideoconvert ! nvdsosd ! nveglglessink
适用于 Jetson
gst-launch-1.0 filesrc location=streams/sample_1080p_h264.mp4 ! qtdemux ! h264parse ! nvv4l2decoder ! m.sink_0 nvstreammux name=m width=1920 height=1080 batch-size=1 live-source=1 ! nvinfer config-file-path= sources/apps/sample_apps/ deepstream-nvdsanalytics-test/nvdsanalytics_pgie_config.txt ! nvtracker ll-lib-file = /opt/nvidia/deepstream/deepstream/lib/libnvds_nvdcf.so ll-config-file= tracker_config.yml tracker-width=640 tracker-height=384 ! nvdsanalytics config-file= sources/apps/sample_apps/deepstream-nvdsanalytics-test/config_nvdsanalytics.txt ! nvmultistreamtiler ! nvvideoconvert ! nvdsosd ! nv3dsink