亲测有效!关键点检测——COCO格式转YOLO格式代码!!!

话不多收,直接上代码,这个我也是找了好久的,分享不易,给个鼓励!(记得点赞收藏)

大家可以直接使用此代码转换你自己的数据集,路径换成你自己的就行了,注意路径格式!

1、我们的关键点数据集是coco格式的,也就是要把json文件转成txt格式的,代码如下

import os
import json

# 将目标检测框的信息转为yolo格式
def cc2yolo_bbox(img_width, img_height, bbox):
    dw = 1. / img_width
    dh = 1. / img_height
    x = bbox[0] + bbox[2] / 2.0
    y = bbox[1] + bbox[3] / 2.0
    w = bbox[2]
    h = bbox[3]
    x = format(x * dw, '.5f')
    w = format(w * dw, '.5f')
    y = format(y * dh, '.5f')
    h = format(h * dh, '.5f')
    return (x, y, w, h)

# 将关键点keypoints的信息转为yolo格式
def cc2yolo_keypoints(img_width, img_height, keypoints):
    list = []
    dw = 1. / img_width
    dh = 1. / img_height
    keypoint_num = len(keypoints)
    for i in range(keypoint_num):
        if i % 3 == 0:
            list.append(format(keypoints[i] * dw, '.5f'))
        if i % 3 == 1:
            list.append(format(keypoints[i] * dh, '.5f'))
        if i % 3 == 2:
            list.append(keypoints[i])
    result = tuple(list)
    return result

json_file_path = r'E:\AI\pose\person_keypoints_val2017.json'
data = json.load(open(json_file_path, 'r'))
yolo_anno_path = r'E:\AI\pose\txt\/'
if not os.path.exists(yolo_anno_path):
    os.makedirs(yolo_anno_path)

cate_id_map = {}
num = 0
for cate in data['categories']:
    cate_id_map[cate['id']] = num
    num += 1

success_count = 0  # 初始化成功转换的计数器

for img in data['images']:
    filename = img['file_name']
    img_width = img['width']
    img_height = img['height']
    img_id = img['id']
    yolo_txt_name = filename.split('.')[0] + '.txt'

    with open(yolo_anno_path + yolo_txt_name, 'w') as f:
        for anno in data['annotations']:
            if anno['image_id'] == img_id:
                f.write(str(cate_id_map[anno['category_id']]) + ' ')
                bbox_info = cc2yolo_bbox(img_width, img_height, anno['bbox'])
                keypoints_info = cc2yolo_keypoints(img_width, img_height, anno['keypoints'])
                for item in bbox_info:
                    f.write(item + ' ')
                for item in keypoints_info:
                    f.write(str(item) + ' ')
                f.write('\n')

    # 打印转换成功的提示,并增加计数器
    print(f'成功转换: {filename}')
    success_count += 1  # 增加成功转换的计数

# 打印总共成功转换的文件数量
print(f'总共成功转换了 {success_count} 个文件')

2、结果成功!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Springboot集成SpringbootAdmin实现服务监控管理-10

SpringbootAdmin Spring Boot Admin是一个用于管理和监控Spring Boot应用程序的开源软件。 概要介绍 Spring Boot Admin可以监控Spring Boot单机或集群项目,它提供了详细的健康(Health)信息、内存信息、JVM系统和环境属性、垃圾回收信息、…

AI自动生成PPT工具上新

AI大模型能力持续增强,零一万物(李开复领导的团队)推出的万知只是其中的一个缩影,生成PPT也只是其中一个能力。 如果你还没用WPSAI的PPT自动生成能力(WPS Office AI实战总结,智能化办公时代已来&#xff09…

web安全之登录框渗透骚姿势,新思路

不管漏洞挖掘还是挖SRC,登录框都是重点关注对象,什么漏洞都有可能出现, 本篇文章做个总结,后面发现新思路后会继续更新 万能密码 or 弱口令 SQL注入 水平越权 垂直越权 逻辑漏洞 短信轰炸 邮箱轰炸 信息泄露 验证码DOS XSS万能密…

【C++模板入门】

C模板入门 泛型编程函数模板格式原理函数模板的实例化 类模板 泛型编程 如何实现一个通用的交换函数呢? void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(double& left, double& right) {double temp l…

信安标委发布16项网络安全国家标准:8项为旧标准替代,8项标准为新发布

1. 背景 根据2024年4月25日国家市场监督管理总局、国家标准化管理委员会发布的中华人民共和国国家标准公告(2024年第6号),全国网络安全标准化技术委员会归口的16项国家标准正式发布。 2. 标准清单 本次国家标准涵盖了信息技术安全评估准则、…

【oj题】环形链表

目录 一. OJ链接: 环形链表 【思路】 快慢指针 ​编辑【扩展问题】 为什么快指针每次走两步,慢指针走一步可以解决问题? ​编辑【扩展问题】快指针一次走3步,走4步,...n步行吗? 二. OJ链接&#xff1a…

栈和队列初级题目(包含四个题)

目录 一、原题链接: 二、有效的括号: ​编辑代码实现: 三、用队列实现栈: 四、用栈实现队列: 五、设计循环队列: 六、读书分享: 一、原题链接: 20. 有效的括号 225. 用队列实…

理解Go语言中的测试种类

测试金字塔将测试分为不同的类别,如下图所示 单元测试在金字塔的底部。大部分测试都是单元测试,它们编写成本代、执行速度快且执行结果高度确定。通常,越往金子塔的上层走,测试变得越复杂,运行速度越慢,并且越难保证执行结果的确定性。 一个常见的技巧是明确说明要运行哪…

maven的安装与配置(超详细)

在Java开发中,配置Maven环境有几个重要的原因: 依赖管理:Maven 是一个强大的依赖管理工具,它能够帮助开发人员轻松地管理项目所需的各种第三方库和组件。通过在项目的 Maven 配置文件(pom.xml)中定义依赖&…

怎么把手机ip地址变成了外省

在日常使用中,有时我们可能因为某些原因需要快速切换手机的IP地址,特别是当需要从一个省份切换到另一个省份的IP时。这种需求可能来源于网络访问限制、地理位置相关服务的使用、或者网络安全等方面的考虑。那么,怎么把手机IP地址变成外省呢&a…

Ps 滤镜:蒙尘与划痕

Ps菜单:滤镜/杂色/蒙尘与划痕 Filter/Noise/Dust & Scratch 蒙尘与划痕 Dust & Scratch滤镜可用于修复图像中的小瑕疵、尘埃或划痕,特别适合用于清理扫描的照片或老照片中的损伤,以及其他因拍摄条件不理想或相机传感器上的尘埃所造成…

前端开发指导

前端开发指导 本文介绍了配置前端开发环境需要的软件、配置项等,指导如何开始进行UDM部门前端开发的全流程。本文以Windows系统下在Microsoft Virtual Studio Code中开发为基础。 一、综述 目标:零基础或者新员工依照此文档,能够完成开发环境的搭建及熟悉测试环境的搭建。…

【Java难点】多线程-终极【更新中...】

Java内存模型之JMM 为什么需要JMM 计算机存储结构:从本地磁盘到主存到CPU缓存,也就是从硬盘到内存,到CPU。一般对应的程序的操作就是从数据库查数据到内存然后到CPU进行计算。 CPU和物理主内存的速度不一致,所以设置多级缓存&am…

SinoDB数据库出现长事务的解决方法

SinoDB数据库出现长事务的具体现象:   长事务会引发逻辑日志耗尽,导致数据库进入叫做“长事务阻塞Blocked:LONGTX”的状态中,数据库服务响应停止。这时候,数据库状态通过onstat – 命令通常有如下提示: Sinoregal Si…

DSP ARM FPGA 实验箱_音频处理_滤波操作教程:3-9 音频信号的滤波实验

一、实验目的 掌握Matlab辅助设计滤波器系数的方法,并实现音频混噪及IIR滤波器滤除,并在LCD上显示音频信号的FFT计算结果。 二、实验原理 音频接口采用的是24.576MHz(读兆赫兹)晶振,实验板上共有3个音频端口&#x…

计算机视觉:三维重建技术

书籍:Computer Vision:Three-dimensional Reconstruction Techniques 作者:Andrea Fusiello 出版:Springer 书籍下载-《计算机视觉:三维重建技术》​本书探讨了用于通过图像确定实体物体的几何属性的理论和计算技术…

将来会是Python、Java、Golang三足鼎立吗?

在开始前我有一些资料,是我根据网友给的问题精心整理了一份「 Java的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!! 软件工程里没有银弹&#xff…

Java方法的重载

方法重载 1. 为什么需要方法重载 public class TestMethod{public static void main (String[] args){int a 10;int b 20;int ret add(a,b);System.out.println("ret "ret);double a2 10.5;double b2 20.5;double ret2 add(a2,b2);System.out.println("…

layui select 绑定onchange事件失效

layui select 绑定onchange事件失效 问题背景解决方案 问题背景 在日常工作中,可能会用到页面 freemaker 以及 layui 前端框架,这个时候直接在 select 上面绑定 onchange 事件往往是不生效的,错误的方式 这种方式给 select 绑定的 onchange…

OpenCV学习(一)银行卡号识别

B站教学链接: 银行卡号识别(OpenCV-Python) 代码:Card_Number_Recognition 1.方法 使用模板匹配的方法来识别银行卡号数字。具体来说,先通过图像预处理将图像中的银行卡号分割出来,再与提供的模板进行…