目标检测数据集转换 json文件转换为txt文件格式

Posted 海边种SHU

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了目标检测数据集转换 json文件转换为txt文件格式相关的知识,希望对你有一定的参考价值。

目标检测任务中,制作数据集或寻找合适的数据集是极为重要的一项工作。我们需要就数据集标签格式调整模型代码,亦或是改动数据集标签的格式以满足模型需求。

本帖子所述的方法是:使用数据集制作工具labelme初步制定数据集生成的.json文件按照需求,转换为.txt文件,在此过程中删除冗余信息,以保留关键信息,节省存储空间。

import os
import json

train_path = 'F:\\\\train - 附件'
text_filepath = train_path+'\\\\train.txt'

text = open(text_filepath, 'w') # 以新建文本文件形式打开text_filepath

json_num = 0
# 使用os.walk遍历所有目录和文件
for root, dirs, files in os.walk(train_path):
    for file in files:
        if '.json' in file:
            file_ = file
            file_ = file_.replace('.json', '.jpg')
            text.write(file_ + '\\t\\t')
            with open(os.path.join(root, file), 'r', encoding='utf8') as fp:
                json_data = json.load(fp)  # 读取json文件
                i = 0
                for each in json_data['shapes']:
                    print('写入', file, '标签信息:')
                    del each['group_id']
                    del each['shape_type']
                    del each['flags']
                    each = str(each)
                    try:
                        text.write(each)
                        print(each, '写入成功')
                    except Exception as e:
                        print('错误:', e)
                    if i < len(json_data['shapes']):
                        text.write('\\t')
                fp.close()
            text.write('\\n')
            json_num += 1
print('图片总数:', json_num)
text.close()
def custom_reader(data_dir, mode):
    def reader():
        file_list = open(data_dir)
        label_dict = 
        for line in file_list:	#一个line就是train.txt的一行数据
            parts = line.split('\\t')
            img_path = parts[0]     # 获取到图片路径
            batch_out = []
            if mode == 'train' or mode == 'eval':
                ######################  以下可能是需要自定义修改的部分   ############################
                img_id = [parts[0].split('/')[-1][:-4]] 
                is_crowd = [0]

                # 读取图片,确定图片像素
                img = Image.open(img_path)
                if img.mode != 'RGB':
                    img = img.convert('RGB')
                im_width, im_height = img.size

                gt_cls = []
                gt_box = []
                crowd = []  #目标是否密集,一般为0

                for object_str in parts[1:]:
                    if len(object_str) <= 1:
                        continue

                    object = json.loads(object_str)
                    gt_cls.append(float(label_dict[object['label']])) #类别
                    bbox = object['points']		#坐标x1,y1,x2,y2
                    box = [float(bbox[0][0]), float(bbox[0][1]), float(bbox[1][0]), float(bbox[1][1])]
                    gt_box.append(box)
                    crowd.append(0)
                ######################  可能需要自定义修改部分结束   ############################
                img, im_scales = data_Utilss.get_image_blob(img_path, mode) #对图片做预处理
                c, h, w=img.shape
                img_info=[h, w, im_scales] #im_scales为图片伸缩尺寸
                outs=(np.array(img), np.array(gt_box, dtype = 'float32'), np.array(gt_cls, dtype = 'int32'), np.array(crowd, dtype = 'int32'), np.array(img_info, dtype = 'float32'), np.array(img_id, dtype = 'int64'))
                batch_out.append(outs)
                yield batch_out
            
    return reader

说明:所获得的txt形式的数据集没有包含图片路径,在使用前尚需要在txt数据集图片名之前添加路径!另附录已经附有测试的文件,谢谢使用!!!

链接:https://pan.baidu.com/s/17Ekg-vlP2g53ZUD0LywRWg?pwd=cub3 
提取码:cub3

以上是关于目标检测数据集转换 json文件转换为txt文件格式的主要内容,如果未能解决你的问题,请参考以下文章

目标检测---数据集格式转化及训练集和验证集划分

笔记2:yolov5训练自己的目标检测模型_创建并划分数据集

目标检测:把标注文件txt格式转换为xml格式

如何将txt文件数据转换为json?

目标检测 数据集转换: csv转xml格式

目标检测算法——将xml格式转换为YOLOv5格式txt