Labelme2Yolo labelme格式的json标注转yolo格式txt

news2024/11/23 22:37:35

该工作适用于目标检测工作。

由于labelme标注出的文件是如下图的单个json文件格式,不符合yolo的训练格式,需要转格式。

观察发现labelme标注的json文件中有imageData,还挺大的,查阅后得知是base64后的图片数据,也就是说json文件中,只要带有imageData就其实是包含了图片文件的数据,可以用json文件直接输出图片文件。

所以利用labelme的json可以直接完成yolo格式标注的输出。使用该代码可以直接按比例分割train,val,test,并输出文件到如下标准格式文件目录

yoloformat
    |--images
    |    |--train
    |    |--val
    |    |--test
    |--labels
         |--train
         |--val
         |--test

代码如下:

import base64
import os
import io
import json
import glob
from PIL import Image
import random

def labelme_to_yolo(json_file, output_img_dir, output_label_dir, class_dict):
    # 读取JSON文件
    with open(json_file, 'r') as f:
        data = json.load(f)
    
    # 解析imageData并获取图像的宽度和高度
    image = Image.open(io.BytesIO(base64.b64decode(data['imageData'])))
    width, height = image.size
    
    # 提取JSON文件的基础文件名
    base_name = os.path.basename(json_file).replace('.json', '')
    
    # 保存图像
    image_path = os.path.join(output_img_dir, base_name + '.png')
    image.save(image_path)
    
    # 创建YOLO标注文件
    txt_path = os.path.join(output_label_dir, base_name + '.txt')
    with open(txt_path, 'w') as f:
        for shape in data['shapes']:
            # 获取对象的类别和边界框
            label = shape['label']
            points = shape['points']
            
            # 计算YOLO格式的中心点和宽度/高度
            x_center = (points[0][0] + points[1][0]) / 2 / width
            y_center = (points[0][1] + points[1][1]) / 2 / height
            box_width = abs(points[1][0] - points[0][0]) / width
            box_height = abs(points[1][1] - points[0][1]) / height
            
            # 将此行写入YOLO标注文件
            f.write(f"{class_dict[label]} {x_center} {y_center} {box_width} {box_height}\n")

# 类别字典,将类别名称映射为整数
class_dict = {"oil": 0, "scr": 1, "sta": 2}  # 根据你的数据集来替换这些类别

# 设置输出目录
output_dir = 'newlabel'
os.makedirs(os.path.join(output_dir, 'images', 'train'), exist_ok=True)
os.makedirs(os.path.join(output_dir, 'images', 'val'), exist_ok=True)
os.makedirs(os.path.join(output_dir, 'images', 'test'), exist_ok=True)
os.makedirs(os.path.join(output_dir, 'labels', 'train'), exist_ok=True)
os.makedirs(os.path.join(output_dir, 'labels', 'val'), exist_ok=True)
os.makedirs(os.path.join(output_dir, 'labels', 'test'), exist_ok=True)

# 获取所有的JSON文件
json_files = glob.glob('*.json')

# 打乱文件列表
random.shuffle(json_files)

# 计算训练集、验证集和测试集的大小
n_total = len(json_files)
n_val = int(n_total * 0.12)
n_test = int(n_total * 0.12)
n_train = n_total - n_val - n_test

# 分割文件列表
train_files = json_files[:n_train]
val_files = json_files[n_train:n_train+n_val]
test_files = json_files[n_train+n_val:]

# 处理所有的JSON文件
for json_file in train_files:
    labelme_to_yolo(json_file, os.path.join(output_dir, 'images', 'train'), os.path.join(output_dir, 'labels', 'train'), class_dict)
for json_file in val_files:
    labelme_to_yolo(json_file, os.path.join(output_dir, 'images', 'val'), os.path.join(output_dir, 'labels', 'val'), class_dict)
for json_file in test_files:
    labelme_to_yolo(json_file, os.path.join(output_dir, 'images', 'test'), os.path.join(output_dir, 'labels', 'test'), class_dict)

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

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

相关文章

多表操作、其他字段和字段参数、django与ajax(回顾)

多表操作 1 基于对象的跨表查 子查询----》执行了两句sql,没有连表操作 2 基于双下滑线的连表查 一次查询,连表操作 3 正向和反向 放在ForeignKey,OneToOneField,ManyToManyField的-related_namebooks:双下滑线连表查询,反向…

深圳锐杰金融:用金融力量守护社区健康

深圳市锐杰金融投资有限公司,作为中国经济特区的中流砥柱,近年来以其杰出的金融成绩和坚定的社会责任立场引人注目。然而,这并非一个寻常的金融机构。锐杰金融正在用自己的方式诠释企业责任和慈善精神,通过一系列独特的慈善项目&a…

定兴县第三实验小学开展“宪法宣传周”系列活动

2023年12月4日是我国第十个国家宪法日,我校集中深入学习宣传宪法,弘扬宪法精神,维护宪法权威,开展“宪法宣传周”系列活动。 宪法主题升旗仪式 五(6)班薛谨熙同学以《学法懂法 与我同行》为主题做国旗下讲…

【开源】基于JAVA语言的APK检测管理系统

项目编号: S 038 ,文末获取源码。 \color{red}{项目编号:S038,文末获取源码。} 项目编号:S038,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 开放平台模块2.3 软…

低代码你需要了解一下

低代码的概念可以追溯到1980年代,当时IBM的快速应用程序开发工具(RAD)被冠以新的名称——低代码,由此,低代码的概念首次面向大众。然而,在近40年的历程中,低代码发展经历了两个阶段:…

Ray构建GPU隔离的机器学习平台

Ray框架介绍 Ray 是一个开源分布式计算框架,在 机器学习基础设施中发挥着至关重要的作用。Ray 促进分布式机器学习训练,使机器学习从业者能够有效利用多个 GPU 的能力。 Ray可以在集群上分布式地运行任务,并且可以指定任务运行时需要使用的GPU数量。Ray可与Nvidia-docker等…

Adobe系列软件:创意之旅的得力助手

在数字创意领域,Adobe系列软件一直以其卓越的性能和广泛的应用而备受瞩目。从图像处理、视频编辑到音频编辑,从网页开发到排版设计,这些软件都提供了强大的功能和工具,帮助用户实现他们的创意。 让我们详细介绍这些软件的作用&…

文件管理:每个文件夹只移入1个文件要怎样操作?批量移动文件技巧

在文件管理过程中,有时要将多个文件分别移动到不同的文件夹中,每个文件夹只包含一个文件。这样的需求可能出现在许多场景中,比如整理文件、备份资料或者进行特定的项目处理。如果每个手动去移动文件就会出现丢失的情况,以及太过耗…

【设计模式-3.1】结构型——外观模式

说明:本文介绍设计模式中结构型设计模式中的,外观模式; 亲手下厨还是点外卖? 外观模式属于结构型的设计模式,关注类或对象的组合,所呈现出来的结构。以吃饭为例,在介绍外观模式之前&#xff0…

谷歌ARCore认证,什么是ARCore认证

一、谷歌ARCore认证介绍 谷歌ARCore 是 Google 推出的用于打造增强现实体验的平台,利用移动设备的传感器以及相机通过不同的 API 让您的手机能够感知其所处环境、了解世界并进行信息交互。设备要使用谷歌的ARCore功能,需要进行测试并通过认证后方可预载或使用Googl…

Python编程技巧 – 异常处理

Python编程技巧 – 异常处理 Python Programming Skills – Exception Handling By JacksonML 每一个程序都未必是健壮的,有时候很脆弱。只有在人的理想思维状况下,返回的结果才是正确的,如意的。 1. 错误发生及异常输出 面对种种编写有疏…

人工智能_机器学习061_KKT条件公式理解_原理深度解析_松弛变量_不等式约束---人工智能工作笔记0101

然后我们再来看,前面我们,拉格朗日乘子法,把带有条件的,问题,优化成了等式问题,从而, 构建拉格朗日乘子公式,进行实现了求解,但是在现实生活中,往往也有,很多不等式问题. 比如上面的这个,就是要求是h(x)<=0的情况下,函数f(x)的最小值. 可以看到,这个带有一个不等式的条件,…

揭秘C语言结构体:通往内存对齐的视觉之旅

揭秘C语言结构体&#xff1a;通往内存对齐的视觉之旅 引言 在C语言的编程旅程中&#xff0c;结构体&#xff08;structs&#xff09;是一个关键而强大的概念。结构体不仅允许我们组织和存储不同类型的数据&#xff0c;而且通过深入了解内存对齐&#xff0c;我们可以更好地优化…

ZKP Understanding Nova (2) Relaxed R1CS

Understanding Nova Kothapalli, Abhiram, Srinath Setty, and Ioanna Tzialla. “Nova: Recursive zero-knowledge arguments from folding schemes.” Annual International Cryptology Conference. Cham: Springer Nature Switzerland, 2022. Nova: Paper Code 2. Unders…

micro_ros_setup包镜像及部分注释(我觉得此包支持很有限)

GitHub - micro-ROS/micro_ros_setup at humble README.md This ROS 2 package(这是一个包) is the entry point for building micro-ROS apps for different embedded platforms. Supported platforms Standalone build system toolsDependenciesQuick startBuilding Creati…

QML与C++之间结构体输出

1.定义带有结构体的头文件TrackClass.h #ifndef TRACKCLASS_H #define TRACKCLASS_H#include <QGuiApplication> #include "QObject" #include <QVector>struct TrackPoint {Q_GADGETQ_PROPERTY(qreal lat MEMBER lat)Q_PROPERTY(qreal lon MEMBER lon)…

中山大学李华山、王彪课题组开发 SEN 机器学习模型,高精度预测材料性能

内容一览&#xff1a;了解全局晶体对称性并分析等变信息&#xff0c;对于预测材料性能至关重要&#xff0c;但现有的、基于卷积网络的算法尚且无法完全实现这些需求。针对于此&#xff0c;中山大学的李华山、王彪课题组&#xff0c;开发了一款名为 SEN 的机器学习模型&#xff…

Textual Inversion

参考博客1:https://www.bilibili.com/read/cv25430752/

新版IDEA中,module模块无法被识别,类全部变成咖啡杯无法被识

新版IDEA中&#xff0c;module模块无法被识别&#xff0c;类全部变成咖啡杯无法被识 如下图&#xff1a; 解决方法&#xff1a;java的Directory文件没有被设置为根目录&#xff0c;解决方法如下&#xff1a; 这是方法之一&#xff0c;还有很多的原因 可能的原因&#xff1a; …

androidstudio设置内存

androidstudio一直 scanning files to index&#xff0c;需要去设置内存&#xff1a; 操作如下&#xff1a;