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

YOLOv8/11自定义seg分割数据集格式转换json2txt

文章目录

  • 一、数据转换
  • 二、数据划分train/val/test

一、数据转换

修改 路径和label名称,就行

#json2txt_yolo11_seg.py
import cv2
import os
import json
import glob
import numpy as npclass_names = ["0"]
#class_names = ["0","1","2"]def convert_json_label_to_yolov_seg_label():json_path = "./seg0613"  # 本地json路径json_files = glob.glob(json_path + "/*.json")# print(json_files)# 指定输出文件夹output_folder = "./seg_txt"  # txt存放路径if not os.path.exists(output_folder):os.makedirs(output_folder)for json_file in json_files:# print(json_file)with open(json_file, 'r') as f:json_info = json.load(f)img = cv2.imread(os.path.join(json_path, json_info["imagePath"]))height, width, _ = img.shapenp_w_h = np.array([[width, height]], np.int32)txt_file = os.path.join(output_folder, os.path.basename(json_file).replace(".json", ".txt"))with open(txt_file, "w") as f:for point_json in json_info["shapes"]:txt_content = ""np_points = np.array(point_json["points"], np.int32)label = point_json["label"]index = class_names.index(label)# print(type(label))norm_points = np_points / np_w_hnorm_points_list = norm_points.tolist()txt_content += str(index) + " " + " ".join([" ".join([str(cell[0]), str(cell[1])]) for cell in norm_points_list]) + "\n"f.write(txt_content)convert_json_label_to_yolov_seg_label()
print("end convert!!!")

二、数据划分train/val/test

# txt_split_yolo11.py
# 将图片和标注数据按比例切分为 训练集和测试集
import shutil
import random
import os# 原始路径
image_original_path = "./seg0613/"
label_original_path = "./seg_txt/"cur_path = os.getcwd() #获取当前工作目录
#cur_path = './chatou_seg'
# 训练集路径
train_image_path = os.path.join(cur_path, "data/images/train/")
train_label_path = os.path.join(cur_path, "data/labels/train/")# 验证集路径
val_image_path = os.path.join(cur_path, "data/images/val/")
val_label_path = os.path.join(cur_path, "data/labels/val/")# 测试集路径
test_image_path = os.path.join(cur_path, "data/images/test/")
test_label_path = os.path.join(cur_path, "data/labels/test/")# 训练集目录
list_train = os.path.join(cur_path, "data/train.txt")
list_val = os.path.join(cur_path, "data/val.txt")
list_test = os.path.join(cur_path, "data/test.txt")train_percent = 0.9
val_percent = 0.1
test_percent = 0.0def del_file(path):for i in os.listdir(path):file_data = path + "\\" + ios.remove(file_data)def mkdir():if not os.path.exists(train_image_path):os.makedirs(train_image_path)else:del_file(train_image_path)if not os.path.exists(train_label_path):os.makedirs(train_label_path)else:del_file(train_label_path)if not os.path.exists(val_image_path):os.makedirs(val_image_path)else:del_file(val_image_path)if not os.path.exists(val_label_path):os.makedirs(val_label_path)else:del_file(val_label_path)if not os.path.exists(test_image_path):os.makedirs(test_image_path)else:del_file(test_image_path)if not os.path.exists(test_label_path):os.makedirs(test_label_path)else:del_file(test_label_path)def clearfile():if os.path.exists(list_train):os.remove(list_train)if os.path.exists(list_val):os.remove(list_val)if os.path.exists(list_test):os.remove(list_test) 
def main():mkdir()clearfile()file_train = open(list_train, 'w')file_val = open(list_val, 'w')file_test = open(list_test, 'w')total_txt = os.listdir(label_original_path)num_txt = len(total_txt)list_all_txt = range(num_txt)num_train = int(num_txt * train_percent)num_val = int(num_txt * val_percent)num_test = num_txt - num_train - num_valtrain = random.sample(list_all_txt, num_train)# train从list_all_txt取出num_train个元素# 所以list_all_txt列表只剩下了这些元素val_test = [i for i in list_all_txt if not i in train]# 再从val_test取出num_val个元素,val_test剩下的元素就是testval = random.sample(val_test, num_val)print("训练集数目:{}, 验证集数目:{}, 测试集数目:{}".format(len(train), len(val), len(val_test) - len(val)))for i in list_all_txt:name = total_txt[i][:-4]srcImage = image_original_path + name + '.bmp'srcLabel = label_original_path + name + ".txt"if i in train:dst_train_Image = train_image_path + name + '.bmp'dst_train_Label = train_label_path + name + '.txt'shutil.copyfile(srcImage, dst_train_Image)shutil.copyfile(srcLabel, dst_train_Label)file_train.write(dst_train_Image + '\n')elif i in val:dst_val_Image = val_image_path + name + '.bmp'dst_val_Label = val_label_path + name + '.txt'shutil.copyfile(srcImage, dst_val_Image)shutil.copyfile(srcLabel, dst_val_Label)file_val.write(dst_val_Image + '\n')else:dst_test_Image = test_image_path + name + '.bmp'dst_test_Label = test_label_path + name + '.txt'shutil.copyfile(srcImage, dst_test_Image)shutil.copyfile(srcLabel, dst_test_Label)file_test.write(dst_test_Image + '\n')file_train.close()file_val.close()file_test.close()
if __name__ == "__main__":main()
http://www.lqws.cn/news/479935.html

相关文章:

  • 第八章 目录一致性协议 A Primer on Memory Consistency and Cache Coherence - 2nd Edition
  • 如何用AI开发完整的小程序<10>—总结
  • unity版本控制PlasticSCM转git
  • 需求初步探讨-从OR-AR
  • 《Redis》事务
  • 抽象工厂设计模式
  • 查询消耗 IO 多的 SQL -达梦
  • 一个免费的视频、音频、文本、图片多媒体处理工具
  • 数据库高性能应用分析报告
  • 鸿蒙 Column 组件指南:垂直布局核心技术与场景化实践
  • Python爬虫实战:研究Ghost.py相关技术
  • 【深度学习与机器学习的区别】从本质到应用的全景对比
  • 单例模式-Python示例
  • 多设备Obsidian笔记同步:WebDAV与内网穿透技术高效实现教程
  • 探秘Flink Connector加载机制:连接外部世界的幕后引擎
  • 考研408《计算机组成原理》复习笔记,第三章(1)——存储系统概念
  • 【数据结构试题】
  • 【JS-4.4-键盘常用事件】深入理解DOM键盘事件:提升用户交互体验的关键
  • idea——AI时代学习python的必要性
  • 学习打卡---回溯
  • linux jq命令详解
  • 基于深度学习的智能图像风格迁移系统:技术与实践
  • Spring AI 项目实战(十一):Spring Boot +AI + DeepSeek 开发智能教育作业批改系统(附完整源码)
  • 华为云Flexus+DeepSeek征文|华为云 Dify 高可用部署教程:CCE 容器集群一键构建企业级智能应用
  • 【第一章-计算机系统概述】
  • 鸿蒙ArkTs仿网易云音乐项目:架构剖析与功能展示
  • 对射式红外传感器计次旋转编码器计次
  • 第八章 网络安全
  • 减少推实时视频流的延时,要提高摄像头的帧率吗
  • openCV