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

news2024/12/24 3:46:36

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

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

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、结果成功!

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

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

相关文章

【经验总结】超参数对模型训练的影响

1. 学习率对模型训练的影响 python 代码: import numpy as np from keras.models import Sequential from keras.layers import Dense from keras.optimizers import Adam import matplotlib.pyplot as plt# 生成随机数据集 np.random.seed(0) X_train np.random…

2024年最新趋势跨境电商平台开发需了解的新技术

随着数字化技术的不断演进和全球市场的日益融合,跨境电商平台开发将面临前所未有的挑战和机遇。为了更好地适应并引领这一发展,开发者需要密切关注2024年最新的技术趋势,以确保他们的平台能够在竞争激烈的市场中脱颖而出。本文将对跨境电商平…

TCP UDP

传输层 端口号 tcp udp 网络层 IP地址 IP TCP,UDP 1,TCP是面向链接的协议,而UDP是无连接的协议; 2,TCP协议的传输是可靠的,而UDP协议的传输“尽力而为” 3,TCP可以实现流控,但UDP不行;…

通用型产品发布解决方案(后端环境搭建)

文章目录 后端renren脚手架配置1.解压后放到项目目录下2.新建商品模块1.创建一个新模块 sunliving-commodity2.删除两个不必要的文件3.pom.xml 引入依赖 3.maven进行聚合管理1.将刚才配置的pom.xml文件复制到父项目下并进行修改2.手动将这个pom.xml加入项目(如果右下…

14 华三 Telent

AI 解读 09 华三 SSH-CSDN博客 华三 Telent是华为三号电信工程有限公司的简称,是一家专门从事电信网络工程建设的公司。该公司提供电信网络规划、设计、建设、维护等一系列服务,包括有线和无线网络设备的安装和调试、网络性能优化等。华三 Telent致力于…

linux fdisk 银河麒麟操作系统 v10 磁盘分区和挂载 详细教程

1查看 未加载的磁盘 fdisk -l 2 开始分区 fdisk /dev/vdb #查看分区 #新建分区和保存 3 格式化和挂载 fdisk -l mkfs.xfs /dev/vdb1 #查看uuid blkid /dev/vdb1 mkdir /data vi /etc/fstab UUID209daa-fb1c-48f2-bf5e-e63f38cb8a /data xfs defaults 0 0 #加载下 mo…

指针(脑图梳理)

今天让我们来梳理一下指针都有哪些概念吧 这个脑图是整理的一些指针相关知识的概念,希望对大家有帮助

如何远程控制另一部手机:远程控制使用方法

在现今高科技的社会中,远程控制手机的需求在某些情境下变得越来越重要。不论是为了协助远在他乡的家人解决问题,还是为了确保孩子的在线安全,了解如何实现这一功能都是有益的。本文将为您简要介绍几种远程控制手机的方法及其使用要点。 KKVi…

OC foudation框架(下)的学习

OCfoudation框架(下) 前面学习了有关OCfoudation框架的部分内容,我们现在对于后面的内容继续学习。 文章目录 OCfoudation框架(下)数组(NSArray和NSMutableArray)对集合元素整体调用方法排序使用…

idea-自我常见配置

1. 主题配置 2. 显示方法分隔符 Editor->General->Appearance 3. 忽略大小写提示 Editor->General->Code Completion 4. 自动导包 Editor->general->Auto Import 5. 取消单行显示Tabs Editor->General->Editor Tabs 效果如下图: 6. 设置…

Vue项目npm install certificate has expired报错解决方法

1.Vue项目 npm install 安装依赖突然报错: npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.org/zrender/download/zrender-4.3.0.tgz failed, reason: certificate has expired npm ERR! A com…

Neo4j 之安装和 CQL 基本命令学习

正常使用结构化的查询语言 SQL(Structured Query Language)较多一些,但是像 Neo4j 这种非结构化的图形数据库来说,就不得不学习下 CQL(Cypher Query Language)语言了。如果你之前学过 《离散数学》或《图论…

Navicat 17 的数据分析

上周的博客预告了 Navicat 17(英文版)即将发布,目前正在测试阶段,并计划于 5 月 13 日发布。如我们所见,版本 17 推出了众多令人兴奋的新功能。其中最大亮点是数据分析工具,只需点击按钮,即可为…

phpmyadmin配置文件权限错误

错误信息 配置文件权限错误,不应任何用户都能修改! 解决办法 找到phpmyadmin所在目录 给phpmyadmin目录授权755 chmod -R 755 phpmyadmin验证服务是否可以正常访问

Unity使用ToggleGroup对多个Toggle进行管理时,初始化默认选项失效的问题

问题描述: 在unity脚本的OnEnable中用代码设置Toggle集合中的其中一个对象的ison时,发现并没有根据设置发生变化。但是该Toggle的OnValueChange却发生过变化。 如果使用协程等待0.01s,那么对应组件的ison的修改才能生效,但是逐帧分析的话会发…

mysql 细分

索引选择性 索引列的唯一值数量 / 表中的总行数 mysql如何优化-CSDN博客 批量问题 批处理默认是逐条发送 SQL 到数据库的,没有充分利用数据库提供的原生批处理能力,需要额外的配置来启用真正的批处理支持,如使用ExecutorType.BATCH 自定…

​​​【收录 Hello 算法】第 5 章 栈与队列

第 5 章 栈与队列 Abstract 栈如同叠猫猫,而队列就像猫猫排队。 两者分别代表先入后出和先入先出的逻辑关系。 本章内容 5.1 栈5.2 队列5.3 双向队列5.4 小结

前端Vue uView 组件<u-search> 自定义右侧搜索按钮样式

前言 uView 文档的效果不是ui设计的样式 需要重新编辑 原效果 ui设计效果 解决方案 设置里说明的需要传一个样式对象 这个对象 需要写在 script 标签里面 这里需要遵循驼峰命名 比如font-size 改为 fontSize lineHeight和textAlign为水平锤子居中效果 searchStyle: {ba…

k8s安装nginx Ingress超详细指南

在本全面的 Ingress 指南中,您将学习如何在 Kubernetes 上设置 Nginx Ingress控制器并使用 DNS 配置 Ingress。 目前有两种 Nginx Ingress 控制器。 kubernetes 社区的 Nginx Ingress 控制器Nginx Inc 开发的 Nginx Ingress 控制器 我们将使用 Kubernetes 社区 N…

【Qt 学习笔记】Qt常用控件 | 多元素控件 | Table Widget的说明及介绍

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 多元素控件 | Table Widget的说明及介绍 文章编号&#…