irpas技术客

Yolo训练自己的数据集,将json格式转换成txt文件格式_TycoonL_json to txt

网络投稿 7732

一、json to txt 解决的问题 1)文件夹目录下有json格式数据和jpg数据,读取json数据时会报错

解决方法:增加json文件后缀判断

for json_name in json_names: if json_name[-4:]=='json': 2)pandas数据用append增加行无效

解决方法:需要重新对pd进行赋值更新

label=label.append(new_label,ignore_index=True) 3)json数据坐标存在缺失,本应有四个值

报错:

x2 = float((i['points'][1][0])) / img_w IndexError: list index out of range

解决方法:使用try-except捕捉错误

4)pandas索引存在重复 if i['label'] not in label: new_label=pd.DataFrame(columns=['label'], data=[i['label']]) label=label.append(new_label,ignore_index=True)

解决方法:

if (label['label'] != i['label']).all(): 5)存储label名称到txt文件时,为缩略的形式

txt_name = 'label.txt' # 生成txt文件你想存放的路径 txt_file = open(txt_name, 'w') txt_file.write(str(label['label'])+ '\n')

解决方法:

label.to_csv('label.txt', sep='\t', index=True) 二、源代码 import json import os import pandas as pd def convert(img_size, box): # dw = 1. / (img_size[0]) # dh = 1. / (img_size[1]) # x = (box[0] + box[2]) / 2.0 - 1 # y = (box[1] + box[3]) / 2.0 - 1 # w = box[2] - box[0] # h = box[3] - box[1] # x = x * dw # w = w * dw # y = y * dh # h = h * dh x1 = box[0] y1 = box[1] x2 = box[2] y2 = box[3] return (x1, y1, x2, y2) def decode_json(json_floder_path, json_name,label): txt_name = r'C:\Users\Tycoon\Desktop\Taxi invoice\train/' + json_name[0:-5] + '.txt' # 生成txt文件你想存放的路径 txt_file = open(txt_name, 'w') json_path = os.path.join(json_floder_path, json_name) data = json.load(open(json_path, 'r')) img_w = data['imageWidth'] img_h = data['imageHeight'] for i in data['shapes']: if i['shape_type'] == 'rectangle': if (label['label'] != i['label']).all(): new_label=pd.DataFrame(columns=['label'], data=[i['label']]) label=label.append(new_label,ignore_index=True) try: x1 = float((i['points'][0][0])) / img_w y1 = float((i['points'][0][1])) / img_h x2 = float((i['points'][1][0])) / img_w y2 = float((i['points'][1][1])) / img_h n = label[label['label']==i['label']].index[0] bb = (x1, y1, x2, y2) bbox = convert((img_w, img_h), bb) txt_file.write(str(n) + " " + " ".join([str(a) for a in bbox]) + '\n') except IndexError: print(json_name[0:-5]+'的'+i['label']+"标签坐标缺失") return label if __name__ == "__main__": json_floder_path = r'C:\Users\Tycoon\Desktop\Taxi invoice\train_dataset\已标注训练集汇总' # json文件的路径 json_names = os.listdir(json_floder_path) label= pd.DataFrame(columns = ['label']) for json_name in json_names: if json_name[-4:]=='json': print(json_name) label=decode_json(json_floder_path, json_name,label) label.to_csv('label.txt', sep='\t', index=True) # 生成txt文件你想存放的路径 三、结果 1)原来json格式

2)txt格式

3)label.txt


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #JSON #To #txt #一JSON