只需要将json所在路径、txt所在路径和类别名称填上就行
import json
import os
import argparse
from tqdm import tqdm
def convert_label_json(json_dir, save_dir, classes):
# 获取json文件夹中的所有文件路径
json_paths = os.listdir(json_dir)
# 将传入的类名字符串分割成列表
classes = classes.split(',')
# 确保保存目录存在
if not os.path.exists(save_dir):
os.makedirs(save_dir)
for json_path in tqdm(json_paths):
path = os.path.join(json_dir, json_path)
with open(path, 'r') as load_f:
json_dict = json.load(load_f)
h, w = json_dict['imageHeight'], json_dict['imageWidth']
# 构造保存txt文件的路径
txt_path = os.path.join(save_dir, json_path.replace('json', 'txt'))
with open(txt_path, 'w') as txt_file:
for shape_dict in json_dict['shapes']:
label = shape_dict['label']
label_index = classes.index(label)
points = shape_dict['points']
points_nor_list = []
for point in points:
# 将坐标点归一化
points_nor_list.append(str(point[0] / w))
points_nor_list.append(str(point[1] / h))
# 将归一化后的坐标点列表转换为字符串
points_nor_str = ' '.join(points_nor_list)
# 构造标签字符串
label_str = f"{label_index} {' '.join(points_nor_list)}\n"
txt_file.write(label_str)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='将JSON格式的标注文件转换为TXT格式')
parser.add_argument('--json-dir', type=str, default=r'D:\Desktop\img', help='JSON文件所在目录')
parser.add_argument('--save-dir', type=str, default=r'D:\Desktop\txt', help='TXT文件保存目录')
parser.add_argument('--classes', type=str, default='NG,OK', help='类别列表,用逗号分隔')
args = parser.parse_args()
json_dir = args.json_dir
save_dir = args.save_dir
classes = args.classes
convert_label_json(json_dir, save_dir, classes)