前言

做深度学习,难免会遇到各种各样的训练数据,当然数据标签也是五花八门,我们需要写脚本来做各种数据格式转换,比如本文分享的时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,能提高工作效率!觉得还不错的感谢关注收藏,后续还会继续分享好用的数据处理脚本。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐