talk is cheap show me the code!
def convert_txt_to_labelme_json(txt_path, image_path, output_dir, image_fmt='.jpg'):# txt 转labelme json# 将yolo的txt转labelme jsontxts = glob.glob(os.path.join(txt_path, "*.txt"))for txt in txts:labelme_json = {'version': '4.5.7','flags': {},'shapes': [],'imagePath': None,'imageData': None,'imageHeight': None,'imageWidth': None,}txt_name = os.path.basename(txt)image_name = txt_name.split(".")[0] + image_fmtlabelme_json['imagePath'] = image_nameimage_name = os.path.join(image_path, image_name)if not os.path.exists(image_name):raise Exception('txt 文件={},找不到对应的图像={}'.format(txt, image_name))image = cv2.imdecode(np.fromfile(image_name, dtype=np.uint8), cv2.IMREAD_COLOR)h, w = image.shape[:2]labelme_json['imageHeight'] = hlabelme_json['imageWidth'] = wwith open(txt, 'r') as t:lines = t.readlines()for line in lines:content = line.split(' ')label = content[0]object_width = float(content[3])object_height = float(content[4])top_left_x = (float(content[1]) - object_width / 2) * wtop_left_y = (float(content[2]) - object_height / 2) * hbottom_right_x = (float(content[1]) + object_width / 2) * wbottom_right_y = (float(content[2]) + object_height / 2) * hshape = {'label': str(label),'group_id': None,'shape_type': 'rectangle','flags': {},'points': [[float(top_left_x), float(top_left_y)],[float(bottom_right_x), float(bottom_right_y)]]}labelme_json['shapes'].append(shape)json_name = txt_name.split('.')[0] + '.json'json_name_path = os.path.join(output_dir, json_name)fd = open(json_name_path, 'w')json.dump(labelme_json, fd, indent=4)fd.close()print("save json={}".format(json_name_path))
附 Yolo 坐标系格式: https://roboflow.com/formats/yolov5-pytorch-txt