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 参考文档。

DeepStream MetaData

NvDsBatchMeta 内部的用户/自定义元数据添加#

要在 NvDsBatchMeta 内的批次、帧或对象级别附加用户特定的元数据,您必须通过调用 nvds_acquire_user_meta_from_pool() 从用户元数据池中获取 NvDsUserMeta 的实例。(有关详细信息,请参阅 sources/includes/nvdsmeta.h。)然后,您必须初始化 NvDsUserMeta。您必须设置的成员是 user_meta_datameta_typecopy_funcrelease_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 管道中。

  1. 设置插件的 NvDsMeta 结构的以下成员

  • copy_func

  • free_func

  • meta_type

  • gst_to_nvds_meta_transform_func

  • gst_to_nvds_meta_release_func

  1. 通过调用 gst_buffer_add_nvds_meta() 附加元数据,并在 gst_buffer_add_nvds_meta() 返回的 NvDsMeta 实例中设置 meta_type

  2. Gst-nvstreammux 插件将步骤 2 中创建的来自 Gst Buffer 的输入 gst-meta 转换为与相应 NvDsFrameMeta 对象关联的 NvDsUserMeta 对象。它将此对象添加到 frame_user_data 列表中。

  3. 在 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 信息和两个置信度值

  1. detector_bbox_info - 保存检测器检测到对象时的边界框参数。

  2. tracker_bbox_info - 保存跟踪器处理对象时的边界框参数。

  3. rect_params - 保存管道中最后一个更新它的模块处理的对象的边界框坐标。这些边界框坐标被裁剪,使其不会落在帧边界之外。

这些边界框参数用于叠加

  1. confidence - 保存对象的置信度值,由推理模块设置。

  2. tracker_confidence - 保存 NvDCF 设置的对象置信度值。对于其他跟踪器(例如,IOUNvSORTNvDeepSORT)来说,它将为 1.0,这些跟踪器不具备视觉跟踪能力。

如上所述,来自检测器和跟踪器的 bbox 坐标分别存储在新引入的 detector_bbox_infotracker_bbox_info 中。bbox 信息 rect_params 继续像以前的 DeepStream 版本一样保存 bbox 信息,以实现向后兼容性。请注意,rect_params 将在未来版本中弃用。预先存在的 confidence 参数保存检测器置信度值,而新引入的 tracker_confidence 参数将保存跟踪器置信度值。