当前位置: 首页 > news >正文

h264 视频流中添加目标检测的位置、类型信息到SEI帧

在 H.264 视频编码中,SEI(Supplemental Enhancement Information)消息用于传输额外的、非编码的数据,例如目标检测的信息。SEI 数据可以嵌入到 H.264 流中,以在解码过程中传递这些附加信息。

一、步骤

  1. 确定 SEI 类型:定义用于传递目标检测信息的 SEI 类型。H.264 标准允许用户定义自定义 SEI 消息类型。你可以选择一个未被标准使用的 SEI 类型(例如,0x1F 是一个预留的 SEI 类型)或自定义类型。

  2. 创建 SEI 消息

    • 帧级 SEI:SEI 消息可以附加到视频帧中。需要在编码过程中生成 SEI 消息,并将其插入到 NAL 单元中。
    • SEI 结构:SEI 消息通常包含一个类型字段和一个负载字段。你可以在负载字段中存储目标检测信息。
  3. SEI 负载格式:目标检测信息可能包括目标的位置、类型等。可以使用以下格式之一(或设计自己的格式)来表示这些信息:

    • 位置:可以使用目标的边界框(bounding box)来表示,如 (x, y, width, height)
    • 类型:用整数或字符串表示目标类型。
  4. 插入 SEI 消息:将创建的 SEI 消息插入到 H.264 流中,通常是在 IDR 帧之前。SEI 消息是通过特定的 NAL 单元类型插入的,如 NAL_UNIT_SEI

二、SEI 消息格式

假设 SEI 类型为 0x1F,并且负载格式为:

  • 0x1F(SEI 类型)
  • 目标数量(1 字节)
  • 目标数据
    • 目标类型(1 字节)
    • 位置(4 字节:xywidthheight

三、代码

#include <vector>// 定义 SEI 消息类型
const uint8_t SEI_TYPE_OBJECT_DETECTION = 0x1F;// 创建 SEI 消息
std::vector<uint8_t> create_object_detection_sei(const std::vector<std::tuple<int, int, int, int, uint8_t>>& detections) {std::vector<uint8_t> sei_message;sei_message.push_back(SEI_TYPE_OBJECT_DETECTION); // SEI 类型// 目标数量sei_message.push_back(static_cast<uint8_t>(detections.size()));// 目标数据for (const auto& detection : detections) {auto [x, y, width, height, type] = detection;sei_message.push_back(type); // 目标类型sei_message.push_back(static_cast<uint8_t>(x));      // xsei_message.push_back(static_cast<uint8_t>(y));      // ysei_message.push_back(static_cast<uint8_t>(width));  // widthsei_message.push_back(static_cast<uint8_t>(height)); // height}return sei_message;
}

http://www.lryc.cn/news/434686.html

相关文章:

  • 大模型api谁家更便宜
  • 代码随想录算法训练营第二十三天| 455. 分发饼干、376. 摆动序列、53. 最大子序和
  • react js 路由 Router
  • AplPost使用
  • 【Qt】Qt与Html网页进行数据交互
  • 教师节特辑:AI绘制的卡通人物,致敬最可爱的人‍
  • SprinBoot+Vue智慧农业专家远程指导系统的设计与实现
  • AI大模型行业专题报告:大模型发展迈入爆发期,开启AI新纪元
  • FLV 格式详解资料整理,关键帧格式解析写入库等等
  • 《深度学习》OpenCV 高阶 图像直方图、掩码图像 参数解析及案例实现
  • coredump-N: stack 消耗完之后,用户自定义信号处理有些问题 sigaltstack
  • 数据库有关c语言
  • 【网页播放器】播放自己喜欢的音乐
  • 【第27章】Spring Cloud之适配Sentinel
  • 怎么debug python
  • Java 递归
  • 获取业务库的schema信息导出成数据字典
  • 力扣: 快乐数
  • 一般位置下的3D齐次旋转矩阵
  • 每日一题——第八十六题
  • 十、组合模式
  • 一分钟了解网络安全风险评估!
  • 【springsecurity】使用PasswordEncoder加密用户密码
  • 从0到1实现线程池(C语言版)
  • Visual studio自动添加头部注释
  • 【C#生态园】提升性能效率:C#异步I/O库详尽比较和应用指南
  • 管理医疗AI炒作的三种方法
  • VMware Workstation Pro Download 个人免费使用
  • DevOps平台搭建过程详解--Gitlab+Jenkins+Docker+Harbor+K8s集群搭建CICD平台
  • Nginx之日志切割,正反代理,HTTPS配置