Gst-nvof#

NVIDIA GPU,从 dGPU Turing 世代(TU117 GPU 除外)和 Jetson Orin 世代开始,包含用于计算光流的硬件加速器。光流向量在各种用例中非常有用,例如对象检测和跟踪、视频帧率提升、深度估计、拼接等等。Gst-nvof 插件收集一对 NV12 图像,并将其传递给底层光流库。底层库返回两个帧之间光流向量的映射作为其输出。光流向量的映射封装在 NvDsOpticalFlowMeta 结构中,并作为用户元数据添加,meta_type 设置为 NVDS_OPTICAL_FLOW_META。用户元数据被添加到 NvDsFrameMeta 的 frame_user_meta_list 成员中。有关如何访问用户元数据的指南,请参阅 NvDsMatchMeta 和张量元数据内部的用户/自定义元数据添加。

Gst-Nvof

注意

光流向量是二维向量,光流向量的每个分量都使用 S10.5 存储在 16 位数字的定点表示中。结构体 NvOFFlowVector 用于存储光流向量。

/**
* Holds motion vector information about an element.
*/
typedef struct _NvOFFlowVector
{
/** Holds the motion vector X component. */
gshort flowx;

/** Holds the motion vector Y component. */
gshort flowy;
} NvOFFlowVector;

MSB 指定符号位,接下来的 10 位指定整数值,最后 5 位表示光流向量的小数值。硬件仅支持四分之一像素分辨率,并且仅使用 5 个可用小数位中的前 2 位。我们可以使用以下公式将光流向量从定点表示转换为浮点表示。

NvOFFlowVector   output;
float32_t flow_vector.x = output.flowx/32.0f;
float32_t flow_vector.y = output.flowy/32.0f;

输入和输出#

  • 输入

    • 包含 NV12 帧的 GStreamer 缓冲区

  • 控制参数

    • gpu-id:选择 GPU ID(仅对 dGPU 平台有效)

    • dump-of-meta:启用将光流映射向量转储到 .bin 文件中

    • preset-level:设置预设级别

    • pool-size:设置池大小

    • grid-size:设置网格大小

  • 输出

    • 包含 NV12 帧的 GStreamer 缓冲区

    • NvDsOpticalFlowMeta 元数据

功能特性#

下表总结了插件的功能特性。

Gst-nvof 插件功能特性#

功能

描述

发布版本

配置 GPU 选择

设置用于光流操作的 GPU ID(仅对 dGPU 平台有效)

DS 4.0

配置光流元数据转储

启用光流输出(运动向量数据)的转储

DS 4.0

配置预设级别

设置所需的预设级别

DS 4.0

配置网格大小

设置光流向量块大小

DS 4.0

Gst 属性#

下表描述了 Gst-nvof 插件的 Gst 属性。

Gst-nvof 插件功能特性#

属性

含义

类型和范围

示例注释

gpu-id

用于解码的 GPU 设备 ID(仅限 dGPU)。

整数,0 到 4,294,967,295

gpu-id=0

dump-of-meta

将光流输出转储到 .bin 文件中。

dump-of-meta=1

preset-level

选择预设级别,默认预设级别为 0,即 NV_OF_PERF_LEVEL_FAST

可能的值包括

0 (NV_OF_PERF_LEVEL_FAST):高性能、低质量。

1 (NV_OF_PERF_LEVEL_MEDIUM):中等性能和质量。

2 (NV_OF_PERF_LEVEL_SLOW):低性能、最佳质量(仅对 dGPU 平台有效)。

枚举,0 到 2

preset-level=0

grid-size

选择网格大小。硬件按块生成光流向量,每个 4×4 像素块一个向量。目前仅支持 4x4 网格大小。

枚举,0

grid-size=0

pool-size

设置要分配的内部运动向量输出缓冲区数量。

整数,1 到 4,294,967,295

pool-size=7