Yolo训练自己的数据集,将json格式转换成txt文件格式
生活随笔
收集整理的這篇文章主要介紹了
Yolo训练自己的数据集,将json格式转换成txt文件格式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、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 pddef 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 * dhx1 = 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_wy1 = float((i['points'][0][1])) / img_hx2 = float((i['points'][1][0])) / img_wy2 = float((i['points'][1][1])) / img_hn = 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 labelif __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
總結
以上是生活随笔為你收集整理的Yolo训练自己的数据集,将json格式转换成txt文件格式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为荣耀手机指令代码大全_华为手机测试指
- 下一篇: 万能音视频转换器:Permute 3 f