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)
txt2COCO
最新推荐文章于 2024-06-07 10:49:04 发布