import os
import json
class Bdd2yolo:
def __init__(self):
self.bdd_lab = "D:/PycharmProjects/yolov5-master/BDDnight/labelval"
self.yolo_lab = "D:/PycharmProjects/yolov5-master/BDDnight/labels/val"
os.makedirs(self.bdd_lab, exist_ok=True)
os.makedirs(self.yolo_lab, exist_ok=True)
self.used_names = ['car', 'bus', 'person', 'bike', 'truck', 'motor', 'train', 'rider', 'traffic sign', 'traffic light']
@property
def all_names(self):
return ['car', 'bus', 'person', 'bike', 'truck', 'motor', 'train', 'rider', 'traffic sign', 'traffic light'
]
def bdd2yolo5(self, categorys, file):
strs = ""
name = file.replace(".json", "")
readpath = f"{self.bdd_lab}/{file}"
writepath = f"{self.yolo_lab}/{name}.txt"
print(readpath, writepath)
f = open(readpath)
info = json.load(f)
# print(len(info))
# print(info["name"])
write = open(writepath, 'w')
for obj in info["frames"]:
# print(obj["objects"])
for objects in obj["objects"]:
# print(objects)
if objects["category"] in categorys:
dw = 1.0 / 1280
dh = 1.0 / 720
strs += str(categorys.index(objects["category"]))
strs += " "
strs += str(((objects["box2d"]["x1"] + objects["box2d"]["x2"]) / 2.0) * dw)[0:8]
strs += " "
strs += str(((objects["box2d"]["y1"] + objects["box2d"]["y2"]) / 2.0) * dh)[0:8]
strs += " "
strs += str(((objects["box2d"]["x2"] - objects["box2d"]["x1"])) * dw)[0:8]
strs += " "
strs += str(((objects["box2d"]["y2"] - objects["box2d"]["y1"])) * dh)[0:8]
strs += "\n"
write.writelines(strs)
write.close()
print("%s has been dealt!" % info["name"])
if __name__ == "__main__":
b = Bdd2yolo()
fileList = os.listdir(b.bdd_lab)
for file in fileList:
# 自己需要从BDD数据集里提取的目标类别
b.bdd2yolo5(b.used_names, file)
忘了从哪位好汉那儿复制,侵删