雷达目标跟踪标注的数据格式转换为MOT格式

1. 点云标注

标注软件我用的是annotate软件:

GitHub - Earthwings/annotate: Create 3D labelled bounding boxes in RViz

标注软件的使用教程这名博主讲的很详细:

3D目标检测(1):点云标注工具之annotate - 知乎

2. 目标跟踪MOT数据标注格式

MOT的数据一般的标注格式是:

frame, id, x, y, width, height, conf(置信度), -1, -1, -1

这些坐标都是在二维图像上的坐标,因此需要将annotate.yaml标注数据提取,然后再转换到图像坐标系

雷达坐标系一般是:

      x||
y—— ——z(朝向外)

图像坐标系一般是指:

o —— ——> x(width)
|
|
y(height)

还是比较好转换的,这里给出代码:

import yaml
import numpy as npdef quaternion_to_rotation_matrix(quaternion):q = np.array(quaternion)q /= np.linalg.norm(q)rotation_matrix = np.array([[1 - 2*q[2]**2 - 2*q[3]**2, 2*q[1]*q[2] - 2*q[0]*q[3], 2*q[1]*q[3] + 2*q[0]*q[2]],[2*q[1]*q[2] + 2*q[0]*q[3], 1 - 2*q[1]**2 - 2*q[3]**2, 2*q[2]*q[3] - 2*q[0]*q[1]],[2*q[1]*q[3] - 2*q[0]*q[2], 2*q[2]*q[3] + 2*q[0]*q[1], 1 - 2*q[1]**2 - 2*q[2]**2]])return rotation_matrix# 读取 YAML 文件
with open("annotate_all.yaml", "r") as file:yaml_data = yaml.safe_load(file)# 提取并按照 frame_id 排列
entries = {}
for track_data in yaml_data["tracks"]:for entry in track_data["track"]:timestamp = entry["header"]["stamp"]["secs"] + entry["header"]["stamp"]["nsecs"] / 1e9if timestamp not in entries:entries[timestamp] = []#雷达坐标系下 # length, width, and heightquaternion = np.array([entry["rotation"]["x"],entry["rotation"]["y"],entry["rotation"]["z"],entry["rotation"]["w"]])translation = np.array([entry["translation"]["x"],entry["translation"]["y"],entry["translation"]["z"]])w = entry["box"]["width"]h = entry["box"]["height"]l = entry["box"]["length"]label = entry["label"]rotation_matrix = quaternion_to_rotation_matrix(quaternion)corner1 = np.dot(rotation_matrix, np.array([translation[0] - l / 2.0, translation[1] - w / 2.0, 0]))##图像坐标系下x = -corner1[1] #(-y1, -x1)y = -corner1[0]width = wheight = ltrack_id = track_data["id"]entries[timestamp].append({"id": track_id,"label": label,"x": x,"y": y,"width": width,"height": height})# 将提取的数据按照 frame_id 排序并写入文本文件
output_file_path = "gtbox.txt"
timestamp_counter = 0
with open(output_file_path, "w") as output_file:for timestamp, data_list in sorted(entries.items()):timestamp_counter += 1for entry in data_list:output_file.write(f"{timestamp_counter},{entry['id']},{entry['x']},{entry['y']},{entry['width']},{entry['height']},-1,-1,-1,-1\n")print(f"提取的数据已按照时间戳写入到 {output_file_path}")

生成你的gtbox真值gtbox.txt,然后利用的跟踪代码生成track.txt,接着进行代码评估

3. 数据评估

这里我沿用的是这个博主的代码:

MOT多目标跟踪评价指标及计算代码(持续更新) - 知乎

将你的gtbox.txt和track.txt分别放到相应的路径,就可以运行了,生成最终的跟踪评估结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/183211.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣刷题篇之分治

系列文章目录 目录 系列文章目录 前言 一、分解问题 二、解决子问题 三、合并结果 总结 前言 刷题按照: [力扣刷题攻略] Re:从零开始的力扣刷题生活 - 力扣(LeetCode) 参考: 「五大常用算法」一文搞懂分治算法…

大数据HCIE成神之路之数学(4)——最优化实验

最优化实验 1.1 最小二乘法实现1.1.1 算法介绍1.1.2 代码实现1.2 梯度下降法实现1.2.1 算法介绍1.2.2 代码实现1.3 拉格朗日乘子法1.3.1 实验1.3.2 实验操作步骤1.1 最小二乘法实现 1.1.1 算法介绍 最小二乘法(Least Square Method),做为分类回归算法的基础,有着悠久的历…

第20章:多线程

20.1 线程简介 在Java中,并发机制非常重要,程序员可以在程序中执行多个线程,每个线程完成一个功能,并与其他线程并发执行,这种机制被称为多线程。但是,并不是所有编程语言都支持多线程。 线程的特点&#…

visual studio 2022 更改字体和大小

工具--->选项 文本编辑器 输出窗口

wsl设置ssh时kex_exchange_identification: Connection closed by remote host问题

问题: 在wsl所有ssh相关的东西设置好的情况下出现:kex_exchange_identification: Connection closed by remote host。 解决方案 如果是使用密码登陆的,修改/etc/ssh/sshd_config,将PasswordAuthentication改为yes即可。

Linux系统之uptime命令的基本使用

Linux系统之uptime命令的基本使用 一、uptime介绍二、uptime命令使用帮助2.1 uptime的help帮助信息2.2 uptime的语法解释 三、uptime的基本使用3.1 直接使用uptime命令3.2 显示uptime版本信息3.3 显示系统运行时间3.4 显示系统最后一次启动时间 四、uptime命令的使用注意事项 一…

docker中安装mysql,远程连接

docker中安装mysql,远程连接 安装mysql 拉取mysql镜像 搜索mysql镜像 docker search mysql建议使用Oracle官方标记的 拉取镜像 docker pull mysql# 查询镜像是否拉取成功 docker images启动mysql镜像 需要做端口映射 docker run --name mysql02 -p3306:3306 -e …

基于YOLOv8深度学习的生活垃圾分类目标检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

springboot 使用脚本进行启动部署

一 springboot 使用脚本进行启动部署 1.1 使用脚本进行启动部署 我们公司使用了 6 年的Spring Boot 项目部署方案!打包 Shell 脚本部署详解,稳的一批! 待完善....

C++前缀和算法的应用:优化了6版的1324模式

本文涉及的基础知识点 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 本题其它解法 C前缀和算法的应用:统计上升四元组 类似题解法 包括题目及代码C二分查找算法:132 模式解法一枚举3C二分查找算法:…

k8s中Pod控制器简介,ReplicaSet、Deployment、HPA三种处理无状态pod应用的控制器介绍

目录 一.Pod控制器简介 二.ReplicaSet(简写rs) 1.简介 (1)主要功能 (2)rs较完整参数解释 2.创建和删除 (1)创建 (2)删除 3.扩容和缩容 &#xff08…

vuepress-----7、发布在GitHub

# 7、发布在GitHub 在你的项目中,创建一个如下的 deploy.sh 文件(请自行判断去掉高亮行的注释): #!/usr/bin/env sh# 确保脚本抛出遇到的错误 set -e# 生成静态文件 npm run docs:build# 进入生成的文件夹 cd docs/.vuepress/dist# 如果是发…

WebUI自动化学习(Selenium+Python+Pytest框架)004

接下来,WebUI基础知识最后一篇。 1.下拉框操作 关于下拉框的处理有两种方式 (1)按普通元素定位 安装普通元素的定位方式来定位下拉框,使用元素的操作方法element.click()方法来操作下拉框内容的选择 (2&#xff09…

PCB设计注意事项

四个二极管不能省略 pwm波跟电机频率不要是倍频 运放越靠近取样电阻越好 反向输入端跟输出端很敏感,有寄生电容就容易震荡 距离取样电阻近就会距离单片机远,那么线上会有寄生电容,这时候在输出端接一个10k电阻到地

深度学习-模型调试经验总结

1、 这句话的意思是:期望张量的后端处理是在cpu上,但是实际是在cuda上。排查代码发现,数据还在cpu上,但是模型已经转到cuda上,所以可以通过把数据转到cuda上解决。 解决代码: tensor.to("cuda")…

【开源视频联动物联网平台】Node-RED规则引擎

Node-RED是一个开源的流程编排工具,它基于JavaScript运行时Node.js构建,专门为简化物联网(IoT)设备之间的集成而设计,但在其他领域,它也被广泛用作规则引擎。 规则引擎是一种系统,用于定义和执…

Android12移植busybox

在Android 12中移植busybox,可以通过以下步骤实现: 1. 下载busybox源码:访问https://busybox.net/downloads.html,选择合适的版本下载。 2. 解压源码包:将下载的源码包解压到一个目录中,例如/path/to/bus…

Redis 入门和环境搭建

认识Redis Redis是一种NoSQL数据库,以键值对形式存储数据,支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等,使其适用于多种应用场景。由于所有数据都存储在内存中,Redis的读写性能非常高。同时&#xff0…

安网AC智能路由系统actpt_5g.data敏感信息泄露漏洞复现 [附POC]

文章目录 安网AC智能路由系统actpt_5g.data敏感信息泄露漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 安网AC智能路由系统actpt_5g.data敏感信息泄露漏洞复现 [附POC] 0x01 前言 免责声明:请勿利…

uniappios请求打开麦克风 uniapp发起请求

第一种 ajax请求方式 uni.request(OBJECT) 参数名类型必填默认值说明平台差异说明urlString是开发者服务器接口地址dataObject/String/ArrayBuffer否请求的参数App(自定义组件编译模式)不支持ArrayBuffer类型headerObject否设置请求的 header,header 中不能设置 Referer。…