当前位置: 首页 > 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;
}

相关文章:

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

在 H.264 视频编码中&#xff0c;SEI&#xff08;Supplemental Enhancement Information&#xff09;消息用于传输额外的、非编码的数据&#xff0c;例如目标检测的信息。SEI 数据可以嵌入到 H.264 流中&#xff0c;以在解码过程中传递这些附加信息。 一、步骤 确定 SEI 类型&…...

大模型api谁家更便宜

1 openai 可点此链接查询价格&#xff1a;https://openai.com/api/pricing/ 2 百度 可点此链接查询价格&#xff1a;https://console.bce.baidu.com/qianfan/chargemanage/list 需要注意&#xff0c;百度千帆平台上还提供其他家的模型调用服务&#xff0c; 如llama, yi-34b等…...

代码随想录算法训练营第二十三天| 455. 分发饼干、376. 摆动序列、53. 最大子序和

今日内容 贪心理论基础Leetcode. 455 分发饼干Leetcode. 376 摆动序列Leetcode. 53 最大子序和 贪心理论基础 贪心算法的本质就是选择每一阶段的最优&#xff0c;达到全局上的最优。 贪心算法和之前学到的所有方法相比&#xff0c;它没有固定的使用套路&#xff0c;也没有固…...

react js 路由 Router

完整的项目,我已经上传了 资料链接 起因, 目的: 路由, 这部分很难。 原因是, 多个组件,进行交互,复杂度比较高。 我看的视频教程 1. 初步使用 安装: npm install react-router-dom 修改 index.js/ 或是 main.js 把 App, 用 BrowserRouter 包裹起来 2. Navigate 点击…...

AplPost使用

请求get 方法 1&#xff0c;添加token 2&#xff0c;填写get 的参数 2,post方法 把对象的形式直接复制到row里面 3&#xff0c;delete方法 可以直接后面拼接参数...

【Qt】Qt与Html网页进行数据交互

前言&#xff1a;此项目使用达梦数据库&#xff0c;以Qt制作服务器&#xff0c;Html制作网页客户端界面&#xff0c;可以通过任意浏览器访问。 1、Qt与网页进行数据交互 1.1、第一步&#xff1a;准备qwebchannel.js文件 直接在qt的安装路径里复制即可 1.2、第二步&#xf…...

教师节特辑:AI绘制的卡通人物,致敬最可爱的人‍

【编号&#xff1a;9】教师节到了&#xff0c;今天我要分享一组由AI绘制的教师节主题卡通人物插画&#xff0c;每一幅都充满了对老师的敬意和爱戴。让我们一起用这些可爱的卡通形象&#xff0c;向辛勤的园丁们致敬&#xff01; &#x1f393;【教师形象】 这…...

SprinBoot+Vue智慧农业专家远程指导系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…...

AI大模型行业专题报告:大模型发展迈入爆发期,开启AI新纪元

大规模语言模型&#xff08;Large Language Models&#xff0c;LLM&#xff09;泛指具有超大规模参数或者经过超大规模数据训练所得到的语言模型。与传统语言模型相比&#xff0c;大语言模型的构建过程涉及到更为复杂的训练方法&#xff0c;进而展现出了强大的自然语言理解能力…...

FLV 格式详解资料整理,关键帧格式解析写入库等等

FLV 是一种比较简单的视频封装格式。大致可以分为 FLV 文件头&#xff0c;Metadata元数据&#xff0c;然后一系列的音视频数据。 资料够多&#xff1a; FLV格式解析图 知乎用户 Linux服务器研究 画了一张格式解析图&#xff0c;比较全&#xff0c;但默认背景是白色&#xff…...

《深度学习》OpenCV 高阶 图像直方图、掩码图像 参数解析及案例实现

目录 一、图像直方图 1、什么是图像直方图 2、作用 1&#xff09;分析图像的亮度分布 2&#xff09;判断图像的对比度 3&#xff09;检测图像的亮度和色彩偏移 4&#xff09;图像增强和调整 5&#xff09;阈值分割 3、举例 二、直方图用法 1、函数用法 2、参数解析…...

coredump-N: stack 消耗完之后,用户自定义信号处理有些问题 sigaltstack

https://mzhan017.blog.csdn.net/article/details/129401531 在上面一篇是关于stack耗尽的一个小程序例子。 https://www.man7.org/linux/man-pages/man2/sigaltstack.2.html 这里提到一个问题,就是如果栈被用光了,这个时候SIGSEGV的用户自定义的handler处理可能就没有空间进…...

数据库有关c语言

数据库的概念 SQL&#xff08;Structured Query Language&#xff09;是一种专门用来与数据库进行交互的编程语言&#xff0c;它允许用户查询、更新和管理关系型数据库中的数据。关系型数据库是基于表&#xff08;Table&#xff09;的数据库&#xff0c;其中表由行&#xff08…...

【网页播放器】播放自己喜欢的音乐

// 错误处理 window.onerror function(message, source, lineno, colno, error) {console.error("An error occurred:", message, "at", source, ":", lineno);return true; };// 检查 particlesJS 是否已定义 if (typeof particlesJS ! undefi…...

【第27章】Spring Cloud之适配Sentinel

文章目录 前言一、准备1. 引入依赖2. 配置控制台信息 二、定义资源1. Controller2. Service3. ServiceImpl 三、访问控制台1. 发起请求2. 访问控制台 总结 前言 Spring Cloud Alibaba 默认为 Sentinel 整合了 Servlet、RestTemplate、FeignClient 和 Spring WebFlux。Sentinel…...

怎么debug python

1、打开pycharm&#xff0c;新建一个python程序&#xff0c;命名为excel.py。 2、编写代码。 3、点击菜单栏中的“Run”&#xff0c;在下拉菜单中选择“debug excel.py”或者“Debug...”&#xff0c;这两个功能是一样的&#xff0c;都是调试功能。 4、调试快捷键&#xff1a;C…...

Java 递归

目录 1&#xff0e;A方法调用B方法&#xff0c;很容易理解&#xff01; 2&#xff0e;递归&#xff1a;A方法调用A方法&#xff0c;就是自己调用自己&#xff01; 3. 递归的优点&#xff1a; 4. 递归结构包括两个部分&#xff1a; 5. 递归的三个阶段 6. 递归的缺点&#…...

获取业务库的schema信息导出成数据字典

获取业务库的schema信息导出成数据字典 场景&#xff1a;需要获取业务库的schema信息导出成数据字典&#xff0c;以下为获取oracle与mysql数据库的schema信息语句 --获取oracle库schema信息 selecttt1.owner as t_owner,tt1.table_name,tt1.column_name,tt1.data_type,tt1.dat…...

力扣: 快乐数

文章目录 需求分析代码结尾 需求 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。 …...

一般位置下的3D齐次旋转矩阵

下面的矩阵虽然复杂&#xff0c;但它的逆矩阵求起来非常简单&#xff0c;只需要在 sin ⁡ θ \sin\theta sinθ 前面加个负号就是原来矩阵的逆矩阵。 如果编程序是可以直接拿来用的&#xff0c;相比其它获取一般旋转轴不经过原点的三维旋转矩阵的途径或算法&#xff0c;应该能…...

每日一题——第八十六题

题目&#xff1a;写一个函数&#xff0c;输入一个十进制的数&#xff0c;将其转换为任意的r进制数 #include<stdio.h> void convertToBaseR(int num, int r); int main() {int num, r;printf("请输入十进制的整数&#xff1a;");scanf_s("%d", &…...

十、组合模式

组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许将对象组合成树形结构来表示“部分-整体”的层次关系。组合模式能够让客户端以统一的方式对待单个对象和对象集合&#xff0c;使得客户端在处理复杂树形结构的时候&#xff0c;可以以…...

一分钟了解网络安全风险评估!

网络安全风险评估是一种系统性的分析过程&#xff0c;旨在识别和评估网络系统中的潜在安全风险。这个过程包括识别网络资产、分析可能的威胁和脆弱性、评估风险的可能性和影响&#xff0c;以及提出缓解措施。网络安全风险评估有助于组织了解其网络安全状况&#xff0c;制定相应…...

【springsecurity】使用PasswordEncoder加密用户密码

目录 1. 导入依赖2. 配置 PasswordEncoder3. 使用 PasswordEncoder 加密用户密码4. 使用 PasswordEncoder 验证用户密码 1. 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifac…...

从0到1实现线程池(C语言版)

目录 &#x1f324;️1. 基础知识 ⛅1.1 线程概述 ⛅1.2 linux下线程相关函数 &#x1f325;️1.2.1 线程ID &#x1f325;️1.2.2 线程创建 &#x1f325;️1.2.3 线程回收 &#x1f325;️1.2.4 线程分离 &#x1f324;️2. 线程池概述 ⛅2.1 线程池的定义 ⛅2.2 为…...

Visual studio自动添加头部注释

记事本打开VS版本安装目录下的Class.cs文件 增加如下内容&#xff1a;...

【C#生态园】提升性能效率:C#异步I/O库详尽比较和应用指南

优化异步任务处理&#xff1a;C#异步I/O库全面解析 前言 在C#开发中&#xff0c;异步I/O是一个重要的主题。为了提高性能和响应速度&#xff0c;开发人员需要深入了解各种异步I/O库的功能和用法。本文将介绍几个常用的C#异步I/O库&#xff0c;包括Task Parallel Library、Asy…...

管理医疗AI炒作的三种方法

一个人类医生和机器人医生互相伸手。 全美的医院、临床诊所和医疗系统正面临重重困难。他们的员工队伍紧张且人员短缺&#xff0c;运营成本不断上升&#xff0c;服务需求常常超过其承受能力&#xff0c;限制了医疗服务的可及性。 人工智能应运而生。在自ChatGPT推出将AI推向聚…...

VMware Workstation Pro Download 个人免费使用

参考 VMware Workstation Pro Download...

DevOps平台搭建过程详解--Gitlab+Jenkins+Docker+Harbor+K8s集群搭建CICD平台

一、环境说明 1.1CI/CD CI即为持续集成(Continue Integration,简称CI)&#xff0c;用通俗的话讲&#xff0c;就是持续的整合版本库代码编译后制作应用镜像。建立有效的持续集成环境可以减少开发过程中一些不必要的问题、提高代码质量、快速迭代等;(Jenkins) CD即持续交付Con…...