# -*- coding: utf-8 -*-
"""
数据集转换脚本,包含以下内容
1、json文件转txt文件
2、对数据集进行划分,并存放至相应目录
注意:
1、将此程序放置yolov5工程目录下的data文件夹下
2、图像和标签文件夹的名字和我的文件名称改为一致
"""
import json
import os
import cv2
import shutil
import random# !!!!这里是重点,需要查看自己的数据集名称对不对,不对的话,把自己的文件夹重命名一下
json_file_path = './Annotations/'                  # 检查和自己的json文件夹名称是否一致
img_folder_path = './SourceImages/'        # 检查和自己的图像文件夹名称是否一致# 将自己数据集的类别对应写一下,几类就写几个,一定要从0开始
label_mapping = {"nicaishenmeyisi":0,"jiushiwaner": 1,
}# 数据集划分比例,训练集70%,验证集20%, 测试集10%
train_percent = 0.7
val_percent = 0.2
test_percent = 0.1if not os.path.exists('./temp_labels/'):      # 临时标签文件夹位置,这不要改动,之后会删掉的os.makedirs('./temp_labels/')
txt_folder_path = './temp_labels/'def convert(size, box):dw = 1. / size[0]dh = 1. / size[1]x = (box[0] + box[1]) / 2.0y = (box[2] + box[3]) / 2.0w = abs(box[1] - box[0])h = abs(box[3] - box[2])x = x * dww = w * dwy = y * dhh = h * dhreturn x, y, w, h#保存为绝对坐标形式 :label x1 y1 x2 y2
def absolute_coordinate_txt(img_name,json_d,img_path):src_img=cv2.imread(img_path)h,w = src_img.shape[:2]txt_name = img_name.split(".")[0]+".txt"txt_path = os.path.join(txt_folder_path,txt_name)# print("txt_path:\t",txt_path)with open(txt_path,'w') as f:for item in json_d["shapes"]:point=item['points']x1 = point[0][0]y1 = point[0][1]x2 = point[1][0]y2 = point[1][1]b = (float(x1), float(x2), float(y1), float(y2))bb = convert((w, h), b)f.write(str(label_mapping[item['label']]) + " " + " ".join([str(a) for a in bb]) + '\n')# 如果json标签有问题,print输出一下,可以查看哪个json文件有问题
for jsonfile in os.listdir(json_file_path):temp_path=os.path.join(json_file_path,jsonfile)# print("json_path:\t",temp_path) jsonfile_path=temp_pathwith open(jsonfile_path, "r", encoding='utf-8') as f:json_d = json.load(f)    img_name =  jsonfile[:-4]+"jpg"img_path=os.path.join(img_folder_path,img_name)# print("img_path:\t",img_path)absolute_coordinate_txt(img_name,json_d,img_path)
# *********************************************** #
#  parent folder
#  ----images
#       ----train
#       ----val
#       ----test
#  ----labels
#       ----train
#       ----val
#       ----test
def create_dir():if not os.path.exists('./images/'):os.makedirs('./images/')if not os.path.exists('./labels/'):os.makedirs('./labels/')if not os.path.exists('./images/train/'):os.makedirs('./images/train')if not os.path.exists('./images/val/'):os.makedirs('./images/val/')if not os.path.exists('./images/test/'):os.makedirs('./images/test/')if not os.path.exists('./labels/train/'):os.makedirs('./labels/train/')if not os.path.exists('./labels/val/'):os.makedirs('./labels/val/')if not os.path.exists('./labels/test/'):os.makedirs('./labels/test/')return# *********************************************** #
print("************************************************************************")
# 读取所有的txt文件
create_dir()
total_txt = os.listdir(txt_folder_path)
num_txt = len(total_txt)
list_all_txt = range(num_txt)  # 范围 range(0, num)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
val_test = [i for i in list_all_txt if not i in train]
# 再从val_test取出num_val个元素,val_test剩下的元素就是test
val = random.sample(val_test, num_val)
# 检查两个列表元素是否有重合的元素
# set_c = set(val_test) & set(val)
# list_c = list(set_c)
# print(list_c)
# print(len(list_c))print("训练集数目:{}, 验证集数目:{},测试集数目:{}".format(len(train), len(val), len(val_test) - len(val)))
for i in list_all_txt:name = total_txt[i][:-4]srcImage = img_folder_path + name + '.jpg'srcLabel = txt_folder_path + name + '.txt'if i in train:dst_train_Image = './images/train/' + name + '.jpg'dst_train_Label = './labels/train/' + name + '.txt'shutil.copyfile(srcImage, dst_train_Image)shutil.copyfile(srcLabel, dst_train_Label)elif i in val:dst_val_Image = './images/val/' + name + '.jpg'dst_val_Label = './labels/val/' + name + '.txt'shutil.copyfile(srcImage, dst_val_Image)shutil.copyfile(srcLabel, dst_val_Label)else:dst_test_Image = './images/test/' + name + '.jpg'dst_test_Label = './labels/test/' + name + '.txt'shutil.copyfile(srcImage, dst_test_Image)shutil.copyfile(srcLabel, dst_test_Label)
shutil.rmtree(txt_folder_path)

YOLOV5模型训练之JSON格式的数据集制作,一个py程序搞,搞不定邮件联系,我帮你!!!!相关推荐

  1. YOLOV5的Json格式的数据集标签转化成txt格式

    应用背景 思路分析 转化成txt 实现效果 总结 1.应用背景 当你要做某个目标检测的项目时,你获得的数据集可能是VOC格式的,也可能是Json格式的.但是用YOLOV5做目标检测的时候存储标签数据的 ...

  2. 车牌检测模型训练(含源码和数据集)

    车牌检测模型训练(含源码和数据集) 本教程利用NVIDIA TAO进行车牌检测模型的训练: 模型框架:SSD 数据集: CRPD, 连接:https://github.com/yxgong0/CRPD ...

  3. yolov5模型训练

    本文将介绍yolov5从环境搭建到模型训练的整个过程.最后训练识别哆啦A梦的模型. 1.anconda环境搭建 2.yolov5下载 3.素材整理 4.模型训练 5.效果预测 - Anconda环境搭 ...

  4. Json格式的数据集标签转化为有效的txt格式(data_coco)

    Json格式的数据集标签转化为有效的txt格式(data_coco) 学习前言 分析json格式标签 转化为有效的txt格式 实现效果 学习前言 在参加许多目标检测比赛时,为了能够获得合理的评价结果, ...

  5. 教程:超详细从零开始yolov5模型训练

    本文将介绍yolov5从环境搭建到模型训练的整个过程.最后训练识别哆啦A梦的模型. 1.anconda环境搭建 2.yolov5下载 3.素材整理 4.模型训练 5.效果预测 - Anconda环境搭 ...

  6. yolov5模型训练流程

    yolov5简介 YOLOv5(You Only Look Once)是由 UitralyticsLLC公司发布的一种单阶段目标检测算 法,YOLOv5 相比YOLOv4 而言,在检测平均精度降低不多 ...

  7. YOLOv5模型训练可视化wandb使用

    作者:RayChiu_Labloy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 目录 可视化需求背景 在训练的服务器上安装wandb: 在终端(例如有网的window ...

  8. 使用Jquery提交Json格式的数据到Asp.net程序的另类做法

    一般我们使用Jquery提交数据到Asp.net程序都有两种方法,今天我再介绍一种方法.以下是详细描述: 1)使用Get请求的方式,将参数接在请求Url的后面.例如: http://www.googl ...

  9. wx轮播图接口学习用json格式_零基础学小程序008----列表和轮播图的实现,小程序解析json数据...

    点击下面网址进入系列教程 上一节带领大家实现领简单的计算器,这节来带领大家学习小程序列表功能. 本节知识点 1,定义本地json文件 2,本地文件引入 3,小程序列表渲染实现 4,解析本地json(为 ...

最新文章

  1. 华为自研编程语言「仓颉」火上热搜,已正式开启内测,成员辟谣:不是中文编程...
  2. python2 队列的使用_使用2个队列创建堆栈
  3. NodeJS 流水式创建EOS主网账户, 羊毛党必备, 新手一键创建账户
  4. 不同项目之间的控件共享
  5. 性能优化:Sql语句中HINT不起作用
  6. vue从入门到精通之高级篇(一)vue-router的高级用法
  7. android 插入耳机 使用自身mic录音_这样选用麦克风,耳机降噪效果会更好
  8. 通信技术计算机通信方向专业,江西科技学院2014年招生通信工程(计算机通信方向)专业介绍...
  9. Javascript 强制浏览器渲染Dom文档
  10. [C/C++11语法]_[0基础]_[lamba 表达式介绍]
  11. 一段程序看懂比特币原理
  12. wi7计算机桌面删除,win7系统删除桌面右键多余选项
  13. VSCode如何打开Interpreter
  14. 三维地图代码 echarts demo
  15. 破圈的《张朝阳的物理课》,开启“知识突围”的搜狐视频
  16. 详解spring用到的九种设计模式
  17. 《30天自制操作系统》笔记----Day6
  18. 点燃我温暖你——李峋的爱心代码
  19. python猜数字小游戏制作
  20. 防追踪创安全网络环境 EFF推Beta版“Privacy Badger”扩展

热门文章

  1. 用Compose实现手写春联效果
  2. 解决servlet请求转发、响应重定向无法实现页面跳转问题
  3. 云呐|动力环境监控系统,机房环境及动力设备监控系统
  4. 好色面试官为小哥们整理的mysql思维导图,可分享xmind等可编辑格式
  5. linux两个文件取交集、并集、差集
  6. UniSwap V3协议浅析(上)
  7. 安娜尔机器人冻结资金设置_安娜尔机器人冻结资金设置如何
  8. 2020计算机专业保研夏令营面经:南科大计算机
  9. 分享77个NET源码,总有一款适合您
  10. IE浏览器无法上网设置