目标检测脚本之mmpose json转yolo txt格式
目标检测脚本之mmpose json转yolo txt格式
一、需求分析
在使用yolopose及yolov8-pose 网络进行人体姿态检测任务时,有时需要标注一些特定场景的中的人型目标数据,用来扩充训练集,提升自己训练模型的效果。因为单纯的人工标注耗时费力,所以可以使用一些开源的大模型如(mmpose)来标注图片。以mmpose为例,对下面图片进行预测后生成的结果图如下所示:
1.预测图片
从预测图片可以看出,预测的结果还是不错的,目标框和关键点的位置预测的还是比较准确的。

2. json 文件
从json 文件中可以看出,包含4个字段:Keyponts、keypoints_score、bbox、bbox_score,注意其中keypoints只包含关键点的(x,y)坐标值,并没有yolo格式中的v值。keypoints_score表示每个关键点的得分,bbox表示目标框的左上角和右下角坐标,bbox_score表示目标框的得分。


二、需求实现
1. 预计结果
如下图所示,希望通过脚本文件可以批量将mmpose生成的json文件转为yolo的txt标签格式

2. 源码实现:
# 处理 mmpose 推理后的json文件,生成coco格式关键点的标签文件
import json
import os
import cv2# 目标检测框 x1y1x2y2 转 为 cls,x_center,y_center,w,h
def convert_xywh(box,image_width,image_height):x1,y1 = box[0],box[1]x2,y2 = box[2],box[3]x = (x2 + x1) /(2*image_width)y = (y2 + y1) /(2*image_height)width = (x2-x1) / image_widthheight = (y2-y1) / image_heightclass_id = 0return [class_id,round(x,4),round(y,4),round(width,4),round(height,4)]# 判断目标的尺寸是否太小,这里设置了5以下返回True,可以自行根据实际情况更改
def is_too_small(label,image_width,image_height):if label[4] * image_width < 5 or label[3] * image_height< 5:return Truedef json2txt(json_dir,image_dir,save_label_dir):"""根据输入的json文件夹,图像文件夹,和保存标签的文件夹,生成coco格式的标签文件。Args:json_dir (str): 存放json文件的文件夹路径。image_dir (str): 存放图像文件的文件夹路径。save_label_dir (str): 保存标签文件的文件夹路径。Returns:None"""print(save_label_dir)if not os.path.exists(save_label_dir):os.makedirs(save_label_dir)json_list = os.listdir(json_dir)for json_file in json_list:image_file = os.path.join(image_dir,json_file.split('.')[0]+'.jpg')img = cv2.imread(image_file)if img is None:continuewidth,height = img.shape[1],img.shape[0]json_path = os.path.join(json_dir,json_file)label_path = os.path.join(save_label_dir,json_file.split('.')[0]+'.txt')with open(json_path,'r',encoding='utf-8') as f:result = json.load(f) # 读取json文件kepoints = []kepoints_scores = []boxes = []for item in result:kepoints.append(item.get("keypoints"))kepoints_scores.append(item.get("keypoint_scores"))boxes.append(item.get("bbox"))# print(len(boxes))coco_model_kepoints = []coco_boxes = []# 共有多少个目标,也相当于多少组关键点评分for i in range(len(kepoints_scores)):coco_model_kepoints_temp = []#每组关键点有17个,每个关键点有2个值,需要将每个关键点都转换成coco格式,补充为3个值for j in range(len(kepoints_scores[i])): if kepoints_scores[i][j] >= 0.45:x = kepoints[i][j][0]/width if kepoints[i][j][0]/width > 0 else 0y = kepoints[i][j][1]/height if kepoints[i][j][1]/height > 0 else 0v = 2else:x = 0y = 0v = 0if x > 1:x = 1if y > 1:y = 1x = round(x,4)y = round(y,4)coco_model_kepoints_temp.append(x)coco_model_kepoints_temp.append(y)coco_model_kepoints_temp.append(v)if all(v == 0 for v in coco_model_kepoints_temp) is False:coco_boxes.append(convert_xywh(boxes[i][0],width,height))coco_model_kepoints.append(coco_model_kepoints_temp)final_label = [] for k in range(len(coco_model_kepoints)):temp_label = []for item1 in coco_boxes[k]:temp_label.append(item1)for item2 in coco_model_kepoints[k]:temp_label.append(item2)final_label.append(temp_label)with open(label_path,'w',encoding='utf-8') as f1:for label in final_label:if is_too_small(label,width,height):continuefor item in label:f1.write(str(item)+' ')f1.write('\n')if __name__ == '__main__':json_dir = '' # 放置使用mmpose 预测出来的图片的json 文件路径image_dir = '' # 放置用于预测的图片路径save_label_dir = '' # 用来保存最终label文件的路径json2txt(json_dir,image_dir,save_label_dir)相关文章:
目标检测脚本之mmpose json转yolo txt格式
目标检测脚本之mmpose json转yolo txt格式 一、需求分析 在使用yolopose及yolov8-pose 网络进行人体姿态检测任务时,有时需要标注一些特定场景的中的人型目标数据,用来扩充训练集,提升自己训练模型的效果。因为单纯的人工标注耗时费力&…...
大数据技术在民生资金专项审计中的应用
一、应用背景 目前,针对审计行业,关于大数据技术的相关研究与应用一般包括大数据智能采集数据技术、大数据智能分析技术、大数据可视化分析技术以及大数据多数据源综合分析技术。其中,大数据智能采集数据技术是通过网络爬虫或者WebService接口实现跨部门在线数据交互;大数…...
视觉SLAM十四讲|【四】误差Jacobian推导
视觉SLAM十四讲|【四】误差Jacobian推导 预积分误差递推公式 ω 1 2 ( ( ω b k n k g − b k g ) ( w b k 1 n k 1 g − b k 1 g ) ) \omega \frac{1}{2}((\omega_b^kn_k^g-b_k^g)(w_b^{k1}n_{k1}^g-b_{k1}^g)) ω21((ωbknkg−bkg)(wbk1nk1g−bk1g)) …...
「实战应用」如何用DHTMLX Gantt构建类似JIRA式的项目路线图(一)
DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求,是最完善的甘特图图表库。 在web项目中使用DHTMLX Gantt时,开发人员经常需要满足与UI外观相关的各种需求。因此他们必须确定JavaScript甘特图库的…...
【习题】应用程序框架
判断题 1. 一个应用只能有一个UIAbility。错误(False) 正确(True)错误(False) 2. 创建的Empty Ability模板工程,初始会生成一个UIAbility文件。正确(True) 正确(True)错误(False) 3. 每调用一次router.pushUrl()方法,页面路由栈数量均会加1。错误(Fal…...
java基于ssm的线上选课系统的设计与实现论文
摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对学生选课信息管理的提升&#x…...
汽车雷达:实时SAR成像的实现
摘要: 众所周知,点云成像是目前实现汽车雷达感知最流行的方案,尤其是采用多级联实现的4D点云成像雷达,这是目前最有希望实现产品落地的技术方案之一。 今天重点分享关于汽车雷达SAR成像相关技术内容,这也证实了4D点云成像雷达并不一定就是汽车雷达成像唯一的方案,在业内…...
《C++语言程序设计(第5版)》(清华大学出版社,郑莉 董渊编著)习题——第2章 C++语言简单程序设计
2-15 编写一个程序,运行时提示输入一个数字,再把这个数字显示出来。 #include <iostream>using namespace std;int main() {// 提示用户输入数字cout << "请输入一个数字: ";// 用于存储用户输入的数字的变量double number;// 从…...
2023年生成式AI全球使用报告
生成式人工智能工具正在迅速改变多个领域,从营销和新闻到教育和艺术。 这些工具使用算法从大量培训材料中获取新的文本、音频或图像。虽然 ChatGPT 和 Midjourney 之类的工具可以用来实现超出人类能力或想象力的艺术效果,但目前它们最常用于比人类更轻松…...
安全防御之漏洞扫描技术
每年都有数以千计的网络安全漏洞被发现和公布,加上攻击者手段的不断变化,网络安全状况也在随着安全漏洞的增加变得日益严峻。寻根溯源,绝大多数用户缺乏一套完整、有效的漏洞管理工作流程,未能落实定期评估与漏洞修补工作。只有比…...
SPON世邦 IP网络对讲广播系统 多处文件上传漏洞复现
0x01 产品简介 SPON世邦IP网络对讲广播系统是一种先进的通信解决方案,旨在提供高效的网络对讲和广播功能。 0x02 漏洞概述 SPON世邦IP网络对讲广播系统 addscenedata.php、uploadjson.php、my_parser.php等接口处存在任意文件上传漏洞,未经身份验证的攻击者可利用此漏洞上…...
Python综合数据分析_RFM用户分层模型
文章目录 1.数据加载2.查看数据情况3.数据合并及填充4.查看特征字段之间相关性5.聚合操作6.时间维度上看销售额7.计算用户RFM8.数据保存存储(1).to_csv(1).to_pickle 1.数据加载 import pandas as pd dataset pd.read_csv(SupplyChain.csv, encodingunicode_escape) dataset2…...
【C++进阶04】STL中map、set、multimap、multiset的介绍及使用
一、关联式容器 vector/list/deque… 这些容器统称为序列式容器 因为其底层为线性序列的数据结构 里面存储的是元素本身 map/set… 这些容器统称为关联式容器 关联式容器也是用来存储数据的 与序列式容器不同的是 其里面存储的是<key, value>结构的键值对 在数据检索时…...
在 Linux 中开启 Flask 项目持续运行
在 Linux 中开启 Flask 项目持续运行 在部署 Flask 项目时,情况往往并不是那么理想。默认情况下,关闭 SSH 终端后,Flask 服务就停止了。这时,您需要找到一种方法在 Linux 服务器上实现持续运行 Flask 项目,并在服务器…...
考研个人经验总结【心理向】
客官你好 首先,不管你是以何种原因来到这篇博客,以下内容或多或少可能带给你一些启发。如果你还是大二or大三学生,有考研的打算,不妨提前了解一些考研必备的心理战术,有时候并不是你知识学得不好,而是思维…...
如何在CentOS安装SQL Server数据库并通过内网穿透工具实现公网访问
文章目录 前言1. 安装sql server2. 局域网测试连接3. 安装cpolar内网穿透4. 将sqlserver映射到公网5. 公网远程连接6.固定连接公网地址7.使用固定公网地址连接 前言 简单几步实现在Linux centos环境下安装部署sql server数据库,并结合cpolar内网穿透工具࿰…...
jupyter内核错误
1、在dos窗口输入以下命令激活环境:anaconda activate 【py环境名,比如py37】(目的是新家你一个虚拟环境) 2、在虚拟环境py37下安装jupyter notebook,命令:pip install jupyter notebook 3、安装ipykerne…...
设计模式的艺术P1基础—2.3 类之间的关系
设计模式的艺术P1基础—2.3 类之间的关系 在软件系统中,类并不是孤立存在的,类与类之间存在各种关系。对于不同类型的关系,UML提供了不同的表示方式 1.关联关系 关联(Association)关系是类与类之间最常用…...
工业无人机行业研究:预计2025年将达到108.2亿美元
近年来,在技术进步和各行各业对无人驾驶飞行器 (UAV) 不断增长的需求的推动下,工业无人机市场一直在快速增长。该市场有望在未来几年继续其增长轨迹,许多关键趋势和因素推动其发展。 在全球范围内,工业无人机市场预计到 2025 年将…...
PCA主成分分析算法
在数据分析中,如果特征太多,或者特征之间的相关性太高,通常可以用PCA来进行降维。比如通过对原有10个特征的线性组合, 我们找出3个主成分,就足以解释绝大多数的方差,该算法在高维数据集中被广泛应用。 算法(…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
