Yolo-将coco数据集中的json文件转为txt且解决类别不连续问题

解决问题

1.将coco数据集中,annotations的json文件,读取,进行转为ID保持一致的txt文件。
2.解决COCO数据集中,类别不连续的问题

方法

from __future__ import print_function
import os, sys, zipfile
import json
 
class_num = 0
def convert(size, box):
    dw = 1. / (size[0])
    dh = 1. / (size[1])
    x = box[0] + box[2] / 2.0
    y = box[1] + box[3] / 2.0
    w = box[2]
    h = box[3]
 
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)
 
 
json_file = '/Data/coco/annotations/instances_val2017.json'  # # Object Instance 类型的标注
 
data = json.load(open(json_file, 'r'))
ana_txt_save_path = "/Data/coco/test2017"  # 保存的路径
if not os.path.exists(ana_txt_save_path):
    os.makedirs(ana_txt_save_path)

index = 0
cat_id_map = {}
for img in data['images']:
    filename = img["file_name"]
    img_width = img["width"]
    img_height = img["height"]
    img_id = img["id"]
    ana_txt_name = filename.split(".")[0] + ".txt"  # 对应的txt名字,与jpg一致
    index +=1
    print(str(index) +'   '+str(ana_txt_name))
    f_txt = open(os.path.join(ana_txt_save_path, ana_txt_name), 'w')# 保存的文件



    for ann in data['annotations']:
        if ann['image_id'] == img_id:
            if ann['category_id'] not in cat_id_map:
                cat_id_map[ann['category_id']] = class_num
                class_num += 1
            box = convert((img_width, img_height), ann["bbox"])
            f_txt.write("%s %s %s %s %s\n" % (cat_id_map[ann['category_id']], box[0], box[1], box[2], box[3]))
        
    f_txt.close()
fileObject = open('/Data/coco/val_cat_id_map.txt', 'w') # 类别进行重新映射
for cat_id in cat_id_map:  
    fileObject.write(str(cat_id))
    fileObject.write('\n')
fileObject.close()
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值