<计算机视觉二> labelme标定的数据转换成yolo训练格式
上一章讲了如何使用labelme标注自己的数据集,本章将继续将标注的数据转换成网络能够训练的数据格式。首先说明下,适合自己的数据格式才是重要的,本文的数据不代表一定要这么写。有可能你在工作或者实际使用中自己摸索一套习惯用的数据格式,或者在团队有已经有了约定俗称的数据格式,本文大致说下思路和具体实现。
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@File : create_targets.py
@Time : 2021/08/19 16:18:57
@Author : XIA Yan
@Contact : 微信 lingyanlove
@Version : 0.1
@License : Apache License Version 2.0, January 2004
@Language: python3.8
@Desc : 将labelme生成的json标签 制作成YOLO网络能够训练的格式
为了简化代码,这里强制保存在 data文件夹中不再增加额外的路径代码
'''
import json
import os
import os.path as osp
import labelme
from pathlib import Path
from PIL import Image
import cv2
import numpy as np
import tqdm
import glob
import json
import argparse
#1 创建标签生成
def create_label(json_path:str):
'''
@description:
遍历所有的labelme json文件,生成一个class.txt标签文件
@Args:
json_path :(string) 训练的json文件路径
@Return:
None
'''
assert osp.exists(json_path),f"{json_path}不存在当前目录,请检查运行的根目录!"
label_list = [] #创建一个list用于存放标签
json_path = glob.glob(f"{json_path}/*.json")
num_js = len(json_path)
for path in tqdm.tqdm(json_path, total= num_js, desc= "正在生成classes.txt标签文件:"):
try:
label_file = labelme.LabelFile(filename = str(path))
except:
print(path)
exit(-1)
for shape in label_file.shapes:
#忽略指定标签
if shape["label"] == "#":
continue
elif