DeepStream SDK 中的元数据#
Gst Buffer 是 GStreamer 中数据传输的基本单元。每个 Gst Buffer 都有相关的元数据。DeepStream SDK 附加了 DeepStream 元数据对象 NvDsBatchMeta,在以下章节中描述。要了解更多关于 Gst Buffer 的信息,请参考 GStreamer 文档。
NvDsBatchMeta:基本元数据结构#
DeepStream 使用可扩展的标准结构来表示元数据。基本元数据结构 NvDsBatchMeta
从批次级别元数据开始,在 Gst-nvstreammux 插件内部创建。附属元数据结构保存帧、对象、分类器和标签数据。DeepStream 还提供了一种机制,用于在批次、帧或对象级别添加用户特定的元数据。DeepStream 通过附加 NvDsBatchMeta
结构并在 Gst-nvstreammux 插件中将 GstNvDsMetaType.meta_type
设置为 NVDS_BATCH_GST_META
,将元数据附加到 Gst Buffer。当您的应用程序处理 Gst Buffer 时,它可以遍历附加的元数据以查找 NVDS_BATCH_GST_META。函数 gst_buffer_get_nvds_batch_meta()
从 Gst Buffer 中提取 NvDsBatchMeta
。(请参阅 sources/include/gstnvdsmeta.h.
中的声明)有关此函数用法的示例,请参见 deepstream-test1 示例应用程序。有关更多详细信息,请参阅 DeepStream API 指南 中的 DeepStream SDK API 参考文档。
NvDsBatchMeta 内部的用户/自定义元数据添加#
要在 NvDsBatchMeta
内的批次、帧或对象级别附加用户特定的元数据,您必须通过调用 nvds_acquire_user_meta_from_pool()
从用户元数据池中获取 NvDsUserMeta
的实例。(有关详细信息,请参阅 sources/includes/nvdsmeta.h
。)然后,您必须初始化 NvDsUserMeta
。您必须设置的成员是 user_meta_data
、meta_type
、copy_func
和 release_func
。有关更多详细信息,请参阅 sources/apps/sample_apps/deepstream-user-metadata-test/deepstream_user_metadata_app.c
中的示例应用程序源代码。
从 Gst-nvstreammux 上游的 Gst 插件中添加自定义元数据#
DeepStream SDK 在 Gst-nvstreammux 插件中创建批次级别元数据。它在批次、批次内的帧和帧内的对象的层次结构中保存 NvDsBatchMeta
元数据。
在 Gst-nvstreammux 之前的插件中添加元数据#
此过程将元数据引入到 Gst-nvstreammux 之前插件的 DeepStream 管道中。
设置插件的 NvDsMeta 结构的以下成员
copy_func
free_func
meta_type
gst_to_nvds_meta_transform_func
gst_to_nvds_meta_release_func
通过调用
gst_buffer_add_nvds_meta()
附加元数据,并在gst_buffer_add_nvds_meta()
返回的 NvDsMeta 实例中设置meta_type
。Gst-nvstreammux 插件将步骤 2 中创建的来自 Gst Buffer 的输入 gst-meta 转换为与相应 NvDsFrameMeta 对象关联的
NvDsUserMeta
对象。它将此对象添加到frame_user_data
列表中。在 NvDsFrameMeta 对象中搜索
frame_user_meta_list
,查找在步骤 2 中设置的meta_type
,并访问附加的元数据。
有关更多详细信息,请参阅 sources/apps/sample_apps/deepstream-gst-metadata-test/deepstream_gst_metadata.c
中的示例应用程序源代码。如果 gst meta 未使用 gst_buffer_add_nvds_meta()
附加,则不会将其转换为 DeepStream 元数据。它仍然在 Gst Buffer 中可用。
新的元数据字段#
DeepStream 5.0 GA 版本中的 NvDsObjectMeta
结构具有三个 bbox 信息和两个置信度值
detector_bbox_info
- 保存检测器检测到对象时的边界框参数。tracker_bbox_info
- 保存跟踪器处理对象时的边界框参数。rect_params
- 保存管道中最后一个更新它的模块处理的对象的边界框坐标。这些边界框坐标被裁剪,使其不会落在帧边界之外。
这些边界框参数用于叠加
confidence
- 保存对象的置信度值,由推理模块设置。tracker_confidence
- 保存 NvDCF 设置的对象置信度值。对于其他跟踪器(例如,IOU
、NvSORT
和NvDeepSORT
)来说,它将为1.0
,这些跟踪器不具备视觉跟踪能力。
如上所述,来自检测器和跟踪器的 bbox 坐标分别存储在新引入的 detector_bbox_info
和 tracker_bbox_info
中。bbox 信息 rect_params
继续像以前的 DeepStream 版本一样保存 bbox 信息,以实现向后兼容性。请注意,rect_params
将在未来版本中弃用。预先存在的 confidence
参数保存检测器置信度值,而新引入的 tracker_confidence
参数将保存跟踪器置信度值。