JSON格式数据集标签转为TXT格式

在使用eiseg标注数据集的时候,生成的为json文件,但是如果使用yolov5进行训练的时候,需要的标签格式为txt格式。在上网找了一些代码后,总是报错,所以自己写了一个代码来进行转换。

我的json文件格式如下:

[{"name": "", "labelIdx": 1, "color": [244, 108, 59], "points": [[278.0, 64.0], [263.0, 77.0], [260.0, 82.0], [259.0, 86.0], [256.0, 90.0], [251.0, 102.0], [250.0, 108.0], [245.0, 118.0], [240.0, 131.0], [240.0, 135.0], [230.0, 162.0], [227.0, 177.0], [227.0, 183.0], [225.0, 188.0], [223.0, 207.0], [223.0, 222.0], [228.0, 238.0], [238.0, 256.0], [244.0, 270.0], [252.0, 278.0], [262.0, 285.0], [270.0, 289.0], [278.0, 294.0], [290.0, 305.0], [298.0, 310.0], [337.0, 339.0], [351.0, 346.0], [367.0, 349.0], [380.0, 349.0], [401.0, 347.0], [427.0, 347.0], [444.0, 345.0], [479.0, 335.0], [498.0, 324.0], [530.0, 298.0], [549.0, 265.0], [555.0, 252.0], [559.0, 236.0], [559.0, 229.0], [562.0, 218.0], [561.0, 199.0], [554.0, 166.0], [548.0, 151.0], [543.0, 115.0], [541.0, 111.0], [533.0, 79.0], [529.0, 69.0], [520.0, 58.0], [503.0, 48.0], [485.0, 45.0], [478.0, 47.0], [431.0, 49.0], [412.0, 48.0], [407.0, 46.0], [396.0, 45.0], [383.0, 41.0], [371.0, 39.0], [357.0, 39.0], [328.0, 42.0], [318.0, 45.0], [308.0, 45.0], [304.0, 47.0], [298.0, 56.0]]}]

可以看到,里面有4个类别,分别是"name","labelIndx","color","points"

先展示代码

import json
import cv2
import glob

json_list = glob.glob("E:/json/*.json")

for file in json_list:
    basename = file.split("\\")[-1].split(".")[0]
    # 读取图片
    img = cv2.imread("E:/img/"+basename+".bmp")
    if img is None:
        continue
    #接收原图大小以进行归一化
    height,width = img.shape[0],img.shape[1]

    with open(file, 'r', encoding='utf-8') as f:
        #读取Json文件的内容
        lj = json.load(f)
        label=lj[0]['labelIdx']
        #保存文件路径
        out_txt_file = "E:/txt/" + basename + ".txt"
        #在保存的文件中输出
        with open(out_txt_file, 'a') as save:
            save.write("%s "%label)
        #进行输出,同时归一化
        for i in lj[0]['points']:
            with open(out_txt_file, 'a') as save:
                save.write("%s %s "%(i[0]/width, i[1]/height))


首先可以利用json.load函数,读取json文件的内容,读取我的文件后为列表,我们用lj来接收,因为lj为一个列表,lj[0]为字典。

字典的‘labelIdx’为标签的类别,因为eiseg的标签从1开始,yolo的标签从0开始,我们还需要-1,然后将类别信息输出到保存的文件中。

我们再接收点的信息并将每一个都归一化,让他们的范围变成0-1之间,并输出到文件中。

如果Json文件内的类别和我的不一样,可以根据我的代码做一些修改,路径和图片格式等也要修改。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值