因為YOLO訓(xùn)練的時候有自己的標注格式,,因此需要將labelme標注的json格式的數(shù)據(jù)轉(zhuǎn)成yolo需要的txt格式,。 json各部分的含義在上一篇中已經(jīng)詳細介紹,。 今天記錄的是如何將json轉(zhuǎn)換成txt,。 yolo需要的標注是五個值:類別 中心點x坐標 中心點y坐標 框的寬 框的高 因此我們需要將json中相應(yīng)的值進行轉(zhuǎn)換,,并寫入txt中,。 1,、將左上角右下角坐標注轉(zhuǎn)換為中心點坐標 注:在轉(zhuǎn)換時同時需要做歸一化,,歸一化的方法是除以圖片的寬或高,以得到0~1之間的值,。 代碼如下: #將json的坐標轉(zhuǎn)換為yolo的坐標轉(zhuǎn)換后x,y為中心點坐標,,w h為框的寬和高 def convert(img_size, box): # 坐標轉(zhuǎn)換 dw = 1. / (img_size[0]) dh = 1. / (img_size[1]) x = (box[0] + box[2]) / 2.0 * dw y = (box[1] + box[3]) / 2.0 * dh w = (box[2] - box[0]) * dw h = (box[3] - box[1]) *dh
return x, y, w, h #返回標準化后的值,即0-1之間的值 2,、將json文件轉(zhuǎn)換為txt文件,,路徑為json文件的路徑,名字與json的文件名相同,。 代碼如下: #僅對一個json文件轉(zhuǎn)換成txt文件 def json2txt(json_file): txt_name = json_file.split(".")[0] + ".txt" # 生成txt文件存放的路徑,,放在原文檔,僅將json轉(zhuǎn)換為txt # print(txt_name) txt_file = open(txt_name, 'w')
# json_path = os.path.join(json_floder_path, json_name) data = json.load(open(json_file, 'r', encoding='utf-8'))#打開json文件 # print(data) # print(data["imagePath"]) image_path = json_file.split("labels")[0] + "images\\" +data["imagePath"]# 圖片存放路徑,,要求圖片與標簽命名相同 # print(image_path) h = data['imageHeight']#獲取圖片寬高 w = data['imageWidth'] # print(h, w)
for item in data['shapes']: # print(item) classify = classify_map[item['label']]# 此處為框的類別 # print(classify) points = item['points'] # print(points) x1 = min(points[0][0], points[1][0]) y1 = min(points[0][1], points[1][1]) x2 = max(points[0][0], points[1][0]) y2 = max(points[0][1], points[1][1]) box = [float(x1), float(y1), float(x2), float(y2)]
bb = (x1, y1, x2, y2) bbox = convert((w, h), bb) txt_file.write(str(classify) + " " + " ".join([str(a) for a in bbox]) + '\n') # 此處將該目標類別記為“0” 3,、對一個文件夾中的所有json轉(zhuǎn)為txt文件。 代碼如下: #對一個文件夾中的所有json轉(zhuǎn)為txt文件 def json2txts(path): count = 0 files = os.listdir(path) for file in files: if file[-5:] == ".json": json_file = path + "\\" +file # print(json_file) json2txt(json_file) count = count + 1 print("共將", count, "個json文件轉(zhuǎn)成---->txt文件") 至此,,即可將文件夾中所有的json文件均轉(zhuǎn)為yolo訓(xùn)練時所需要的txt文件了,。
|