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
和张量元数据内部的用户/自定义元数据添加。

注意
光流向量是二维向量,光流向量的每个分量都使用 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 元数据
功能特性#
下表总结了插件的功能特性。
功能 |
描述 |
发布版本 |
---|---|---|
配置 GPU 选择 |
设置用于光流操作的 GPU ID(仅对 dGPU 平台有效) |
DS 4.0 |
配置光流元数据转储 |
启用光流输出(运动向量数据)的转储 |
DS 4.0 |
配置预设级别 |
设置所需的预设级别 |
DS 4.0 |
配置网格大小 |
设置光流向量块大小 |
DS 4.0 |
Gst 属性#
下表描述了 Gst-nvof 插件的 Gst 属性。
属性 |
含义 |
类型和范围 |
示例注释 |
---|---|---|---|
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 |