Skip to main content

概述

qtivoverlay 元素是一个硬件加速的就地绘制与位块传输(blitting)插件,旨在将可视化叠加对象直接渲染到传入的视频帧(如 YUV 或 RGB 缓冲区)之上。通过将叠加内容直接合成到帧数据上,处理后的视频可以以极小的额外开销显示在屏幕上或转发用于编码。这使其非常适合对性能和低延迟要求较高的实时视频应用。 该元素支持多种叠加内容,包括用户自定义的图形和标注,例如徽标、边界框、自定义标签、日期和时间、缓冲区时间戳、隐私遮罩以及其他可视化指示。此外,qtivoverlay 还可以渲染 GstMeta 中携带的动态叠加信息,这种方式通常用于将 AI 或分析结果附加到每一帧,以便进行后处理和可视化。 为了实现高效的叠加渲染,qtivoverlay 将基于 CPU 的绘制与基于 GPU 的混合相结合:
  • 使用 Cairo 的 CPU 渲染:叠加内容首先使用开源 Cairo 图形库绘制到紧凑、内存高效的叠加缓冲区中。
  • GPU 硬件混合:随后使用 GPU 硬件加速将这些渲染好的叠加缓冲区与主视频帧混合。
这种混合方式有助于降低内存占用并提升整体性能,尤其是在处理高分辨率或高帧率视频流的流水线中。 该元素支持的叠加可以通过两种方式描述: 通过元素属性 这些是由用户手动配置的叠加,包括:
  • 静态图像或徽标
  • 边界框
  • 日期和/或时间
  • 缓冲区时间戳
  • 自定义文本
  • 隐私遮罩
通过缓冲区元数据 这些叠加以元数据形式附加到每个输入帧上,通常由 qtimetamux 插件添加。该元数据用于绘制与机器学习相关的叠加,例如:
  • 检测叠加,包括边界框
  • 分割叠加,例如语义掩码或掩码图像
  • 分类叠加,例如标签或用户文本
  • 姿态图叠加
总而言之,qtivoverlay 是一个硬件加速的就地图像绘制与位块传输插件,用于在视频帧上叠加可视化标注。它同时支持手动配置的叠加和元数据驱动的叠加,适用于视频分析、AI 推理可视化和隐私遮罩等使用场景。
qtivoverlay_arch

示例流水线

1

下载所需文件

2

将文件复制到设备

3

连接到设备

4

设置环境变量

在设备上运行以下命令
5

运行流水线

层级结构

GObject
   GstObject
      GstElement
         GstBaseTransform
            qtivoverlay

Pad 模板

sink

src

元素属性

元数据(AI 后处理信息)

传入的视频缓冲区可能以 GstMeta 的形式包含额外的元数据。该元素会检查每个缓冲区中支持的元数据类型,并将检测到的任何元数据直接渲染到对应的图像帧之上。每种受支持的元数据类型都会按照其自身的可视化表示方式进行处理和显示。

支持的元数据类型

GstVideoRegionOfInterestMeta

该元数据描述帧内的感兴趣区域(ROI),通常表示一个对象,例如人、车辆、键盘或任何其他被检测到的物体。 系统会使用指定的 X/Y 坐标、宽度和高度在 ROI 周围绘制一个矩形。矩形以可见边框和透明内部的方式渲染,使区域内的对象保持可见。 GstVideoRegionOfInterestMeta

GstVideoLandmarksMeta

该元数据描述一组关键点(landmark),可以表示人体姿态关键点、面部特征、手部关节或其他相互连接的兴趣点。 各个点以及连接相关点的线条都会绘制在图像上,从而清晰地可视化关键点结构。 GstVideoLandmarksMeta

GstVideoClassificationMeta

该元数据包含针对整幅图像的可能标签或分类列表。 所有关联标签都会渲染在帧的左上角,使分类结果一目了然。 GstVideoClassificationMeta

GstCvOptclFlowMeta

该元数据表示光流运动矢量,用于描述两个连续视频帧之间像素的运动。 这些矢量指示运动方向和幅度,便于可视化视频流中的帧间运动。 GstCvOptclFlowMeta

通过属性配置用户自定义叠加对象

除缓冲区元数据外,该插件还支持可通过属性配置的用户自定义叠加对象。这些叠加可以在运行时添加、更新或移除。配置完成后,每个叠加会持续显示在每个传入的视频帧上,直到用户显式将其移除。

支持的属性类型

静态图像

可以使用 images 属性添加静态图像,例如徽标、图标或水印。 通过该属性提供的所有图像必须为原始 RGBA 格式。 属性载荷遵循 GStreamer structure 布局,首次设置时需要以下必填参数:
StaticImage

自定义文本

可以使用 strings 属性设置文本叠加,例如字幕、标题、标注或标签。 属性载荷遵循 GStreamer structure 布局,首次设置时需要以下参数:
CustomText

时间戳

可以使用 timestamps 属性显示时间戳,例如当前日期/时间或缓冲区时间戳。 属性载荷遵循 GStreamer structure 布局,首次设置时需要以下参数:
Timestamp

隐私遮罩

可以使用 masks 属性,通过隐私遮罩来遮挡图像中的特定区域。 属性载荷遵循 GStreamer structure 布局,需要一个唯一名称、一个 color 值以及以下受支持的形状定义之一: 附加参数:
Privacy

边界框

可以使用 bboxes 属性配置用于突出显示帧内某个区域或对象的矩形。 属性载荷遵循 GStreamer structure 布局,首次设置时需要以下参数:
BoundingBox

用法

用户自定义叠加与实时相机预览

以下示例流水线在视频帧(来自相机的实时预览)的左上角显示用户自定义文本,同时应用一个圆形隐私遮罩来遮挡图像中选定的区域。

带叠加的单阶段 AI 推理

以下示例流水线包含一个单阶段 AI 推理,对视频帧执行目标检测。AI 阶段以字符串格式生成 ROI 元数据并将其附加到主帧上。随后,该元数据由 qtivoverlay 插件渲染为叠加内容,并显示在输出视频上。
1

下载所需文件

如果下载的任何文件是 .zip 压缩包,请在复制之前先在主机上解压: unzip filename.zip
2

将文件复制到设备

3

连接到设备

4

设置环境变量

在设备上运行以下命令
5

运行流水线

应用静态图像作为叠加

该流水线演示如何使用 qtivoverlayimages 属性,将一张静态图像(例如公司徽标或水印)位块传输到实时视频流上。图像在流水线启动时加载一次,并以指定的位置和尺寸合成到每一帧上。
图像文件必须为原始 BGRA 格式。在运行此流水线之前,请将图像保存为 logo.bgra
1

准备所需文件

2

将文件复制到设备

3

连接到设备

4

设置环境变量

在设备上运行以下命令
5

运行流水线

应用时间戳 — 以文本叠加形式显示 DD/MM/YY 和时间

该流水线演示如何使用 qtivoverlaytimestamps 属性,将 DD/MM/YYYY 格式的当前日期和当前时间作为实时文本叠加渲染到每个视频帧上。时间戳会在每个缓冲区上自动更新。

应用圆形和菱形隐私遮罩

该流水线演示如何使用 qtivoverlaymasks 属性,应用多个不同形状的隐私遮罩——一个圆形和一个菱形(多边形)——以遮挡视频帧中的敏感区域。两个遮罩会在每一帧上同时渲染。
可以在单个 masks 属性中组合多个遮罩,方法是以逗号分隔列出多个 GStreamer structure。每个遮罩独立渲染,并且可以使用不同的形状、位置和颜色。