cityscapes数据集json转txt,用于yolov5和yolov8目标检测

cityscapes数据集json转txt,用于yolov5和yolov8目标检测

最近在用cityscapes的目标检测数据集测试自己训练的模型,但是cityscapes中有些类别与我的不一样,我有的他没有,他有的我不需要,为了统一标签序号,仅保留cityscapes中我需要的类别,将 json转成txt格式,设置了如下代码,需要的朋友看懂代码后自行修改使用。

import json
import os
import glob
import os.path as osp

def cityscapes_json_txt(jsonfilePath="", resultDirPath="", classList=["road", "others"]):
    # 0.创建保存转换结果的文件夹
    if(not os.path.exists(resultDirPath)):
        os.mkdir(resultDirPath)

    # 1.获取目录下所有的labelme标注好的Json文件,存入列表中
    jsonfileList = glob.glob(osp.join(jsonfilePath, "*.json"))
    # print(jsonfileList)  # 打印文件夹下的文件名称

    # 2.遍历json文件,进行转换
    for jsonfile in jsonfileList:
        # 3. 打开json文件
        with open(jsonfile, "r") as f:
            file_in = json.load(f)
            # 4. 读取文件中记录的所有标注目标
            imgHeight = file_in["imgHeight"]
            imgWidth = file_in["imgWidth"]
            objects = file_in["objects"]
            dw = 1.0 / imgWidth
            dh = 1.0 / imgHeight

            # 5. 使用图像名称创建一个txt文件,用来保存数据
            txt_path = resultDirPath + jsonfile.split("\\")[-1][:-20] + 'leftImg8bit.txt'
            # 6. 遍历shapes中的每个目标的轮廓
            strs = ""
            for shape in objects:
                # 7.根据json中目标的类别标签,从classList中寻找类别的ID,然后写入txt文件中
                if shape["label"] in classList:
                    # 8. 遍历shape轮廓中的每个点,每个点要进行图像尺寸的缩放,即x/width, y/height
                    x_list = []
                    y_list = []
                    for point in shape['polygon']:
                        x_list.append(point[0])
                        y_list.append(point[1])
                    x_max = max(x_list)
                    x_min = min(x_list)
                    y_max = max(y_list)
                    y_min = min(y_list)
                    strs += str(classList.index(shape['label']))
                    strs += " "
                    strs += str(((x_min + x_max) / 2.0) * dw)[0:8]
                    strs += " "
                    strs += str(((y_min + y_max) / 2.0) * dh)[0:8]
                    strs += " "
                    strs += str(((x_max - x_min)) * dw)[0:8]
                    strs += " "
                    strs += str(((y_max - y_min)) * dh)[0:8]
                    strs += "\n"
            #9.判断该文件是否有标签,是否保存
            # if strs != "":
            write = open(txt_path, 'w')
            write.writelines(strs)
            write.close()
            # else:
            #     print("%s has been dealt!" % txt_path)
        # 10.所有物体都遍历完,需要关闭文件
        f.close()

if __name__ == "__main__":
	#我将cityscapes中的json文件放到一个文件夹下
    jsonfilePath = r"D:\yolo\yolov8\data\citys\json\train/"  # 要转换的json文件所在目录
    resultDirPath = r"D:\yolo\yolov8\data\citys\labels\train/"  # 要生成的txt文件夹
    classList = ['traffic light', 'traffic sign', 'car', 'person', 'bus', 'truck', 'riderss',
                 'bike', 'motor', 'cone', 'barrier', 'opendoor', 'wheel', 'tail']
    cityscapes_json_txt(jsonfilePath=jsonfilePath, resultDirPath=resultDirPath, classList=classList)

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值