YOLO格式数据集转COCO格式

网上找了很久的YOLO格式数据集转COCO格式的代码,但是没有一个成功的,费尽千辛万苦终于找到一个能用的,因此记录一下。

一、首先YOLO格式数据集文件布局

其中lmages和labels 中的内容布局如下,只不过一个存放图片,一个存放标签

二、COCO数据集布局

下面的代码生产生成的是下图的第一个文件夹,存放标注文件json,其他三个文件夹都是图片

三、转换代码

import json
import os
import shutilimport cv2# info,license暂时用不到
info = {"year": 2024"version": '1.0',"date_created": 2024 - 03 - 29
}licenses = {"id": 1,"name": "yiquan","url": "null",
}#自己的标签类别,跟yolo格式的数据集类别要对应好;
categories = [{"id": 0,"name": 'Eating',"supercategory": 'lines',},{"id": 1,"name": 'Raising_a_hand',"supercategory": 'lines',},
{"id": 2,"name": 'Reading',"supercategory": 'lines',},{"id": 3,"name": 'Sleeping_At_a_desk',"supercategory": 'lines',},{"id": 4,"name": 'Writing',"supercategory": 'lines',}]#初始化train,test、val数据字典
# info licenses categories 在train和test,val里面都是一致的;
train_data = {'info': info, 'licenses': licenses, 'categories': categories, 'images': [], 'annotations': []}
test_data = {'info': info, 'licenses': licenses, 'categories': categories, 'images': [], 'annotations': []}# image_path 对应yolo的图像路径,比如images/train;
# label_path 对应yolo的label路径,比如labels/train 跟images要对应;
def v5_covert_coco_format(image_path, label_path):images = []annotations = []for index, img_file in enumerate(os.listdir(image_path)):if img_file.endswith('.jpg'):image_info = {}img = cv2.imread(os.path.join(image_path, img_file))height, width, channel = img.shapeimage_info['id'] = indeximage_info['file_name'] = img_fileimage_info['width'], image_info['height'] = width, heightelse:continueif image_info != {}:images.append(image_info)# 处理label信息-------label_file = os.path.join(label_path, img_file.replace('.jpg', '.txt'))with open(label_file, 'r') as f:for idx, line in enumerate(f.readlines()):info_annotation = {}class_num, xs, ys, ws, hs = line.strip().split(' ')class_id, xc, yc, w, h = int(class_num), float(xs), float(ys), float(ws), float(hs)xmin = (xc - w / 2) * widthymin = (yc - h / 2) * heightxmax = (xc + w / 2) * widthymax = (yc + h / 2) * heightbbox_w = int(width * w)bbox_h = int(height * h)img_copy = img[int(ymin):int(ymax),int(xmin):int(xmax)].copy()info_annotation["category_id"] = class_id  # 类别的idinfo_annotation['bbox'] = [xmin, ymin, bbox_w, bbox_h]  ## bbox的坐标info_annotation['area'] = bbox_h * bbox_w ###areainfo_annotation['image_id'] = index # bbox的idinfo_annotation['id'] = index * 100 + idx  # bbox的id# cv2.imwrite(f"./temp/{info_annotation['id']}.jpg", img_copy)info_annotation['segmentation'] = [[xmin, ymin, xmax, ymin, xmax, ymax, xmin, ymax]]  # 四个点的坐标info_annotation['iscrowd'] = 0  # 单例annotations.append(info_annotation)return images, annotations# key == train,test,val
# 对应要生成的json文件,比如instances_train.json,instances_test.json,instances_val.jsondef gen_json_file(yolov5_data_path, coco_format_path, key):# json pathjson_path = os.path.join(coco_format_path, f'annotations/instances_{key}.json')dst_path = os.path.join(coco_format_path, f'{key}')if not os.path.exists(os.path.dirname(json_path)):os.makedirs(os.path.dirname(json_path), exist_ok=True)data_path = os.path.join(yolov5_data_path, f'images/{key}')label_path = os.path.join(yolov5_data_path, f'labels/{key}')images, anns = v5_covert_coco_format(data_path, label_path)if key == 'train':train_data['images'] = imagestrain_data['annotations'] = annswith open(json_path, 'w') as f:json.dump(train_data, f, indent=2)# shutil.copy(data_path,'')elif key == 'val':test_data['images'] = imagestest_data['annotations'] = annswith open(json_path, 'w') as f:json.dump(test_data, f, indent=2)else:print(f'key is {key}')print(f'generate {key} json success!')returnif __name__ == '__main__':yolov5_data_path = 'D:/deep_learn/yolov8_20230701/ClassroomBehavior'  #保存YOLO数据集的目录coco_format_path = 'D:/deep_learn/yolov8_20230701/COCO'               #转换后生成的COCO数据集   json文件gen_json_file(yolov5_data_path, coco_format_path,key='train')gen_json_file(yolov5_data_path, coco_format_path,key='val')gen_json_file(yolov5_data_path, coco_format_path, key='test')

运行后生成,至此任务完成。如果帮到你,麻烦帮忙点点赞

 参考文章

代码实现如何将yolov5数据格式转换为coco格式_yolo转coco-CSDN博客

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

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

相关文章

接口自动化框架搭建(三):pytest库安装

1,使用命令行安装 前提条件:已安装python环境 pip install pytest 或者 pip3 install pytest2,从编译器pycharme中安装

6.2物联网RK3399项目开发实录-驱动开发之GPIO使用(wulianjishu666)

物联网嵌入式开发源码例程: 链接:https://pan.baidu.com/s/1B3oqq5QBhN-VmTFt9CI-7A?pwd2ihg ******************************************************************************************* GPIO 使用 简介 GPIO, 全称 General-Purpose Input/…

前端-css-2

1.背景样式 属性名作用属性值background-color背景颜色颜色background-image设置背景图像地址url(地址)background-repeat设置背景图像重复方式 repeat:重复。 repeat-x:横向重复。 repeat-y:纵向重复。 no-repeat:不重复。 back…

YOLOv9改进策略 : C2f改进 | 引入YOLOv8 C2f结构

💡💡💡本文改进内容:应订阅者需求,如何将YOLOv8 C2f结构引入到YOLOv9 💡💡💡C2f层是一种特殊的卷积层,用于将不同尺度的特征图融合在一起,以提高目标检测的准…

C# 多线程

文章目录 C# 多线程进程与线程无参数的子线程带参数的子线程运行结果 销毁线程 Abort()运行结果 ThreadPool和Task运行结果 C# 多线程 进程与线程 进程:进程就是一个应用程序,对电脑的各种资源的占用 线程:线程是程序执行的最小单位&#…

新型的FPGA器件将支持多样化AI/ML创新进程

作者:郭道正, Achronix半导体中国区总经理 近日举办的GTC大会把人工智能/机器学习(AI/ML)领域中的算力比拼又带到了一个新的高度,这不只是说明了通用图形处理器(GPGPU)时代的来临,而是包括GPU、…

08-研发流程设计(上):如何设计Go项目的开发流程?

在Go 项目开发中,我们不仅要完成产品功能的开发,还要确保整个过程是高效的,代码是高质量的。 所以,Go 项目开发一定要设计一个合理的研发流程,来提高开发效率、减少软件维护成本。研发流程会因为项目、团队和开发模式…

Kitex 提供的服务注册与发现 etcd 拓展

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 <br> &#x1f4d8;相关专栏<a href"https://blog.csdn.net/studycodeday/category_12460797.html">…

EasyBoss ERP上线实时数据大屏,Shopee本土店铺数据实时监测

近日&#xff0c;灵隐寺PPT汇报用上数据大屏疯狂刷屏&#xff0c;有做东南亚本土电商的老板发现这种数据大屏的模式可以很好地展现店铺运营状况。 所以就有老板来问&#xff1a;EasyBoss能不能也上线实时数据大屏的功能&#xff1f;没问题&#xff01;立马安排&#xff01; 要有…

Coursera自然语言处理专项课程03:Natural Language Processing with Sequence Models笔记 Week01

Natural Language Processing with Sequence Models Course Certificate 本文是https://www.coursera.org/learn/sequence-models-in-nlp 这门课程的学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。 文章目录 Natural Language Processing with Sequence ModelsWeek 01…

Netty核心原理剖析与RPC实践21-25

Netty核心原理剖析与RPC实践21-25 21 技巧篇&#xff1a;延迟任务处理神器之时间轮 HahedWheelTimer Netty 中有很多场景依赖定时任务实现&#xff0c;比较典型的有客户端连接的超时控制、通信双方连接的心跳检测等场景。在学习 Netty Reactor 线程模型时&#xff0c;我们知道…

基于单片机居家室内环境监测系统仿真设计

**单片机设计介绍&#xff0c;基于单片机居家室内环境监测系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机居家室内环境监测系统仿真设计是一个综合性的项目&#xff0c;它结合了单片机技术、传感器技术、…

【JavaWeb】Day27.Web入门——Tomcat介绍

目录 WEB服务器-Tomcat 一.服务器概述 二.Web服务器 三.Tomcat- 基本使用 1.下载 2.安装与卸载 3.启动与关闭 4.常见问题 四.Tomcat- 入门程序 WEB服务器-Tomcat 一.服务器概述 服务器硬件&#xff1a;指的也是计算机&#xff0c;只不过服务器要比我们日常使用的计算…

应用案例 | 复合机器人助力智能仓储物流实现高效发展

随着智能仓储物流技术的快速发展&#xff0c;复合机器人作为一种先进的自动化设备&#xff0c;正逐渐在仓储物流领域发挥重要作用。以下是一个复合机器人在智能仓储物流的应用案例。 案例背景 某大型电商企业面临着日益增长的订单量和仓储物流压力。为了提高物流效率、降低人力…

docker中配置交互式的JupyterLab环境的问题

【报错1】 Could not determine jupyter lab build status without nodejs 【解决措施】安装nodejs(利用conda进行安装/从官网下载进行安装&#xff09; 1、conda安装 conda install -c anaconda nodejs 安装后出现其他报错&#xff1a;Please install nodejs 5 and npm bef…

02正式学习第一天

1、windows上加载socket库 链接输入ws2_32.lib 代码code&#xff1a; #ifdef _WIN32 #include<windows.h> #else #include <sys/socket.h> #include<sys/types.h> #include<unistd.h> #include<cstring> #include<arpa/inet.h> #include…

三极管知识点总结

目录 一、三极管概述 (Bipolar Junction Transistor) 1.历史&#xff1a; 2.内部结构 3.符号 4.分类 二、三极管三种工作状态 (working position) 1.截止状态 2.放大状态 3.饱和导通 三、三极管输入\输出特性曲线 &#xff08;characteristic curve&#xff09; 四、…

2013年认证杯SPSSPRO杯数学建模B题(第一阶段)流行音乐发展简史全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 B题 流行音乐发展简史 原题再现&#xff1a; 随着互联网的发展&#xff0c;流行音乐的主要传播媒介从传统的电台和唱片逐渐过渡到网络下载和网络电台等。网络电台需要根据收听者的已知喜好&#xff0c;自动推荐并播放其它音乐。由于每个人喜好…

mongodb sharding分片模式的集群数据库,日志治理缺失导致写入数据库报错MongoWriteConcernException的问题总结(上)

一、背景 常见的mongodb集群模式有以下三种&#xff1a; 主从复制&#xff08;Master-Slave&#xff09;模式副本集&#xff08;Replica Set&#xff09;模式分片&#xff08;Sharding&#xff09;模式 公司测试环境搭建的集群采用分片模式&#xff0c;有同事反馈说&#xf…

统信 UOS V20 一键安装 Oracle 12CR2(220118)单机版

Oracle 一键安装脚本&#xff0c;演示 统信 UOS V20 一键安装 Oracle 12CR2&#xff08;220118&#xff09;单机版过程&#xff08;全程无需人工干预&#xff09;&#xff1a;&#xff08;脚本包括 ORALCE PSU/OJVM 等补丁自动安装&#xff09; ⭐️ 脚本下载地址&#xff1a;…