python实现批量json标签文件转yolo格式标签

本文提供了一个高效的Python脚本,用于将JSON格式的目标检测标签转换为YOLO格式,适用于深度学习模型训练。通过简单的代码实现,大大提升了数据预处理的效率。
该文章已生成可运行项目,


前言

做深度学习,难免会遇到各种各样的训练数据,当然数据标签也是五花八门,我们需要写脚本来做各种数据格式转换,比如本文分享的时json格式标签批量转化为yolo格式标签。话不多说,直接上完整代码,需要的朋友,慢慢享用,感谢给个三连,后续继续分享好用的脚本工具!

一、json转yolo格式

#批量json转yolo
import json
import os

def convert(img_size, box):
    x1_center = box[0] + (box[2]-box[0]) / 2.0
    y1_center = box[1] + (box[3]-box[1]) / 2.0
    
    w_1 = box[2] - box[0]
    h_1 = box[3] - box[1]
    
    x1_normal = x1_center / img_size[0]
    y1_normal = y1_center / img_size[1]
    
    w_1_normal = w_1 / img_size[0]
    y_1_normal = h_1 / img_size[1]
    
    return (x1_normal, y1_normal, w_1_normal, y_1_normal)


def decode_json(json_floder_path, json_name):
    txt_name = 'F:/DL_xian_data/A_yolo/' + json_name[0:-5] + '.txt'
    txt_file = open(txt_name, 'w')

    json_path = os.path.join(json_floder_path, json_name)
    data = json.load(open(json_path, 'r', encoding='utf-8'))

    img_w = data['imageWidth']
    img_h = data['imageHeight']

    for i in data['shapes']:

        if (i['shape_type'] == 'rectangle' and i['label'] == '1'):
            x1 = float(i['points'][0][0])
            y1 = float(i['points'][0][1])
            x2 = float(i['points'][1][0])
            y2 = float(i['points'][1][1])
            print(x1)
            print(y1)
            print(x2)
            print(y2)
            print(img_w)
            print(img_h)

            bb = (x1, y1, x2, y2)
            bbox = convert((img_w, img_h), bb)
            txt_file.write( '0' + " " + " ".join([str(i) for i in bbox]) + '\n')


if __name__ == "__main__":

    json_floder_path = 'F:/DL_xian_data/A_json'  #改成自己的json文件存储路径
    json_names = os.listdir(json_floder_path)
    for json_name in json_names:
        decode_json(json_floder_path, json_name)


二、总结

超级好用,效率超级高,学好python,能提高工作效率!觉得还不错的感谢关注收藏,后续还会继续分享好用的数据处理脚本。

本文章已经生成可运行项目
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

onnx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值