txt2COCO

import json
import os
from PIL import Image

class_list = ['plane', 'baseball-diamond', 'bridge', 'ground-track-field', 
'small-vehicle', 'large-vehicle', 'ship', 
'tennis-court', 'basketball-court',  
'storage-tank', 'soccer-ball-field', 
'roundabout', 'harbor', 
'swimming-pool', 'helicopter']

anno_dir = 'valsplit/labelTxt'
img_dir = 'valsplit/images'
json_save_dir = 'valsplit/labelcoco'
if not os.path.exists(json_save_dir):
    os.mkdir(json_save_dir)
json_save_path = os.path.join(json_save_dir,'val.json')

'''
{"type": 'instance',
 "annotations":[{"segmentation":[[]],"bbox":[],"category_id":int,"area":float,"image_id":int,"id":int,"iscrowd":0},...,{}],
 "images":[{"file_name":str,"height":600,"width":600,"id":int}],
 "categories":[{"id":int,"name":str}]
}
'''


def txt2coco(my_json):
    img_list = os.listdir(img_dir)
    img_list.sort()

    anno_list = os.listdir(anno_dir)
    anno_list.sort()
    my_json["type"] = 'instance'
    my_json["annotations"] = []
    my_json["images"] = []
    my_json["categories"] = []
    instance_id = 0
    for i, img in enumerate(img_list):
        img_file = os.path.join(img_dir,img)
        image_ = Image.open(img_file)
        image = {}
        image["file_name"] = img
        image["height"] = image_.height
        image["width"] = image_.width
        image["id"] = i
        my_json["images"].append(image)
        anno_path = os.path.join(anno_dir,anno_list[i])
        with open (anno_path,'r') as f:
            boxes = [line.strip().split(' ') for line in f.readlines()]
        f.close()
        for ann in boxes:
            annotation = {}
            annotation["segmentation"] = [[]]
            annotation["iscrowd"] = 0
            annotation["image_id"] = i
            annotation["id"] = instance_id
            box = [int(float(num)) for num in ann[:8]]
            ann[8] = class_list.index(ann[8])+1
            # print(ann)
            annotation["category_id"] = ann[8]
            annotation["bbox"] = [box[0],box[1],box[4]-box[0],box[5]-box[1]]
            annotation["area"] = float((box[4]-box[0])*(box[5]-box[1]))
            my_json["annotations"].append(annotation)
            instance_id+=1

    for i_cat, cat in enumerate(class_list):
        category = {}
        category["id"] = i_cat+1
        category["name"] = cat
        category["supercategory"] = cat
        my_json["categories"].append(category)

    with open(json_save_path,'w',encoding = 'utf-8') as f:
        json.dump(my_json,f)
        

    

if __name__ == '__main__':
    my_json = {}
    txt2coco(my_json)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值