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

目标检测脚本之mmpose json转yolo txt格式

目标检测脚本之mmpose json转yolo txt格式

一、需求分析

在使用yolopose及yolov8-pose 网络进行人体姿态检测任务时,有时需要标注一些特定场景的中的人型目标数据,用来扩充训练集,提升自己训练模型的效果。因为单纯的人工标注耗时费力,所以可以使用一些开源的大模型如(mmpose)来标注图片。以mmpose为例,对下面图片进行预测后生成的结果图如下所示:

1.预测图片

从预测图片可以看出,预测的结果还是不错的,目标框和关键点的位置预测的还是比较准确的。

mmpose 预测结果图

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 网络进行人体姿态检测任务时&#xff0c;有时需要标注一些特定场景的中的人型目标数据&#xff0c;用来扩充训练集&#xff0c;提升自己训练模型的效果。因为单纯的人工标注耗时费力&…...

大数据技术在民生资金专项审计中的应用

一、应用背景 目前,针对审计行业,关于大数据技术的相关研究与应用一般包括大数据智能采集数据技术、大数据智能分析技术、大数据可视化分析技术以及大数据多数据源综合分析技术。其中,大数据智能采集数据技术是通过网络爬虫或者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​((ωbk​nkg​−bkg​)(wbk1​nk1g​−bk1g​)) …...

「实战应用」如何用DHTMLX Gantt构建类似JIRA式的项目路线图(一)

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求&#xff0c;是最完善的甘特图图表库。 在web项目中使用DHTMLX Gantt时&#xff0c;开发人员经常需要满足与UI外观相关的各种需求。因此他们必须确定JavaScript甘特图库的…...

【习题】应用程序框架

判断题 1. 一个应用只能有一个UIAbility。错误(False) 正确(True)错误(False) 2. 创建的Empty Ability模板工程&#xff0c;初始会生成一个UIAbility文件。正确(True) 正确(True)错误(False) 3. 每调用一次router.pushUrl()方法&#xff0c;页面路由栈数量均会加1。错误(Fal…...

java基于ssm的线上选课系统的设计与实现论文

摘 要 在如今社会上&#xff0c;关于信息上面的处理&#xff0c;没有任何一个企业或者个人会忽视&#xff0c;如何让信息急速传递&#xff0c;并且归档储存查询&#xff0c;采用之前的纸张记录模式已经不符合当前使用要求了。所以&#xff0c;对学生选课信息管理的提升&#x…...

汽车雷达:实时SAR成像的实现

摘要: 众所周知,点云成像是目前实现汽车雷达感知最流行的方案,尤其是采用多级联实现的4D点云成像雷达,这是目前最有希望实现产品落地的技术方案之一。 今天重点分享关于汽车雷达SAR成像相关技术内容,这也证实了4D点云成像雷达并不一定就是汽车雷达成像唯一的方案,在业内…...

《C++语言程序设计(第5版)》(清华大学出版社,郑莉 董渊编著)习题——第2章 C++语言简单程序设计

2-15 编写一个程序&#xff0c;运行时提示输入一个数字&#xff0c;再把这个数字显示出来。 #include <iostream>using namespace std;int main() {// 提示用户输入数字cout << "请输入一个数字: ";// 用于存储用户输入的数字的变量double number;// 从…...

2023年生成式AI全球使用报告

生成式人工智能工具正在迅速改变多个领域&#xff0c;从营销和新闻到教育和艺术。 这些工具使用算法从大量培训材料中获取新的文本、音频或图像。虽然 ChatGPT 和 Midjourney 之类的工具可以用来实现超出人类能力或想象力的艺术效果&#xff0c;但目前它们最常用于比人类更轻松…...

安全防御之漏洞扫描技术

每年都有数以千计的网络安全漏洞被发现和公布&#xff0c;加上攻击者手段的不断变化&#xff0c;网络安全状况也在随着安全漏洞的增加变得日益严峻。寻根溯源&#xff0c;绝大多数用户缺乏一套完整、有效的漏洞管理工作流程&#xff0c;未能落实定期评估与漏洞修补工作。只有比…...

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 项目时&#xff0c;情况往往并不是那么理想。默认情况下&#xff0c;关闭 SSH 终端后&#xff0c;Flask 服务就停止了。这时&#xff0c;您需要找到一种方法在 Linux 服务器上实现持续运行 Flask 项目&#xff0c;并在服务器…...

考研个人经验总结【心理向】

客官你好 首先&#xff0c;不管你是以何种原因来到这篇博客&#xff0c;以下内容或多或少可能带给你一些启发。如果你还是大二or大三学生&#xff0c;有考研的打算&#xff0c;不妨提前了解一些考研必备的心理战术&#xff0c;有时候并不是你知识学得不好&#xff0c;而是思维…...

如何在CentOS安装SQL Server数据库并通过内网穿透工具实现公网访问

文章目录 前言1. 安装sql server2. 局域网测试连接3. 安装cpolar内网穿透4. 将sqlserver映射到公网5. 公网远程连接6.固定连接公网地址7.使用固定公网地址连接 前言 简单几步实现在Linux centos环境下安装部署sql server数据库&#xff0c;并结合cpolar内网穿透工具&#xff0…...

jupyter内核错误

1、在dos窗口输入以下命令激活环境&#xff1a;anaconda activate 【py环境名&#xff0c;比如py37】&#xff08;目的是新家你一个虚拟环境&#xff09; 2、在虚拟环境py37下安装jupyter notebook&#xff0c;命令&#xff1a;pip install jupyter notebook 3、安装ipykerne…...

设计模式的艺术P1基础—2.3 类之间的关系

设计模式的艺术P1基础—2.3 类之间的关系 在软件系统中&#xff0c;类并不是孤立存在的&#xff0c;类与类之间存在各种关系。对于不同类型的关系&#xff0c;UML提供了不同的表示方式 1&#xff0e;关联关系 关联&#xff08;Association&#xff09;关系是类与类之间最常用…...

工业无人机行业研究:预计2025年将达到108.2亿美元

近年来&#xff0c;在技术进步和各行各业对无人驾驶飞行器 (UAV) 不断增长的需求的推动下&#xff0c;工业无人机市场一直在快速增长。该市场有望在未来几年继续其增长轨迹&#xff0c;许多关键趋势和因素推动其发展。 在全球范围内&#xff0c;工业无人机市场预计到 2025 年将…...

PCA主成分分析算法

在数据分析中&#xff0c;如果特征太多&#xff0c;或者特征之间的相关性太高&#xff0c;通常可以用PCA来进行降维。比如通过对原有10个特征的线性组合, 我们找出3个主成分&#xff0c;就足以解释绝大多数的方差&#xff0c;该算法在高维数据集中被广泛应用。 算法&#xff08…...

Hyperledger Fabric 权限策略和访问控制

访问控制是区块链网络十分重要的功能&#xff0c;负责控制某个身份在某个场景下是否允许采取某个操作&#xff08;如读写某个资源&#xff09;。 常见的访问控制模型包括强制访问控制&#xff08;Mandatory Access Control&#xff09;、自主访问控制&#xff08;Discretionar…...

Day28 回溯算法part04 93. 复原IP地址 78. 子集 90. 子集 II

回溯算法part04 93. 复原IP地址 78. 子集 90. 子集 II 93. 复原 IP 地址 class Solution { private:vector<string> result;bool isValid(string& s,int start,int end){if (start > end) return false;if (s[start] 0 && start ! end) { // 0开头的数…...

Linux系统常用的安全优化

环境&#xff1a;CentOS7.9 1、禁用SELinux SELinux是美国国家安全局对于强制访问控制的实现 1)永久禁用SELinux vim /etc/selinux/config SELINUXdisabled #必须重启系统才能生效2&#xff09;临时禁用SELInux getenforce #查看SELInux当前状态 setenforce 0 #数字…...

Vue-4、单向数据绑定与双向数据绑定

1、单向数据绑定 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>数据绑定</title><!--引入vue--><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/…...

【Flutter 开发实战】Dart 基础篇:常用运算符

在Dart中&#xff0c;运算符是编写任何程序的基本构建块之一。本文将详细介绍Dart中常用的运算符&#xff0c;以帮助初学者更好地理解和运用这些概念。 1. 算术运算符 算术运算符用于执行基本的数学运算。Dart支持常见的加、减、乘、除、整除以及取余运算。常见的算数运算符如…...

C++:ifstream通过getline读取文件会忽略最后一行空行

getline是读取文件的常用函数,虽然使用简单,但是有一个较容易被忽视的问题,就是文件最后一行空行会被忽略。 #include <iostream> #include <fstream> #include <string> using namespace std;void readWholeFileWithGetline(string fileName) {string t…...

力扣123. 买卖股票的最佳时机 III

动态规划 思路&#xff1a; 最多可以完成两笔交易&#xff0c;因此任意一天结束后&#xff0c;会处于5种状态&#xff1a; 未进行任何操作&#xff1b;只进行了一次买操作&#xff1b;进行了一次买操作和一次卖操作&#xff1b;再完成了一次交易之后&#xff0c;进行了一次买操…...

Vue3:vue-cli项目创建

一、node.js检测或安装&#xff1a; node -v node.js官方 二、vue-cli安装&#xff1a; npm install -g vue/cli # OR yarn global add vue/cli/*如果安装的时候报错&#xff0c;可以尝试一下方法 删除C:\Users**\AppData\Roaming下的npm和npm-cache文件夹 删除项目下的node…...

C# .Net学习笔记—— 异步和多线程(Task)

一、概念 Task是DotNet3.0之后所推出的一种新的使用多线程的方式&#xff0c;它是基于ThreadPool线程进行封装的。 二、使用多线程的时机 任务能够并发运行的时候&#xff0c;提升速度&#xff1b;优化体验 三、基本使用方法 private void button5_Click(object sender, Ev…...

Python从入门到网络爬虫(读写Excel详解)

前言 Python操作Excel的模块有很多&#xff0c;并且各有优劣&#xff0c;不同模块支持的操作和文件类型也有不同。最常用的Excel处理库有xlrd、xlwt、xlutils、xlwings、openpyxl、pandas&#xff0c;下面是各个模块的支持情况&#xff1a; 工具名称.xls.xlsx获取文件内容写入…...

wordpress调用列表文章/青岛seo推广

服务器信息 在阿里云买了个抢占式的服务器&#xff0c;地区为华南广州&#xff0c;系统为Ubuntu 20.04&#xff0c;8核16GB。 安装Docker 命令如下&#xff1a; $ apt-get update -y $ apt-get upgrade -y $ apt-get install -y docker.io 安装成功后&#xff0c;检查一下版…...

无锡企业网站制作价格/如何做好网络推广销售

Spark 的核心是建立在统一的抽象弹性分布式数据集&#xff08;Resiliennt Distributed Datasets&#xff0c;RDD&#xff09;之上的&#xff0c;这使得 Spark 的各个组件可以无缝地进行集成&#xff0c;能够在同一个应用程序中完成大数据处理。 那什么是RDD呢&#xff1f;详见…...

asp动态网站开发实训小结/百度热搜电视剧

分别在Windows下和Linux下重置了MYSQL的root的密码&#xff1a;在windows下&#xff1a;1&#xff1a;进入cmd&#xff0c;停止mysql服务&#xff1a;Net stop mysql到mysql的安装路径启动mysql&#xff0c;在bin目录下使用mysqld-nt.exe启动&#xff0c;2&#xff1a;执行&…...

做电子书网站/什么是seo和sem

Linux之文本处理三剑客介绍 awk 名称得自于它的创始人阿尔佛雷德艾侯、彼得温伯格和布莱恩柯林汉姓氏的首个字母,它具备了一个完整的语言所应具有的几乎所有精美特性&#xff0c;AWK是一个解释器&#xff0c;三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简…...

手机做效果图的app/百度关键词优化排名技巧

三层体系结构的概念 用户界面表示层(USL)业务逻辑层(BLL)数据访问层(DAL) BLL将USL与DAL隔开了&#xff0c;并且加入了业务规则 各层的作用 1&#xff1a;数据数据访问层:主要是对原始数据&#xff08;数据库或者文本文件等存放数据的形式&#xff09;的操作层&#xff0c;而不…...

企业邮箱是怎么样的/seo咨询茂名

借助securtCRT&#xff0c;使用linux命令sz可以很方便的将服务器上的文件下载到本地&#xff0c;使用rz命令则是把本地文件上传到服务器。 &#xff08;如果没有&#xff0c;先安装&#xff1a;yum install lrzsz&#xff09;http://www.linuxidc.com/Linux/2010-06/26484.htm…...