赞
踩
将labelme标记的数据转为coco格式
这次转化主要是为了使用官方的mask_rcnn源码。
coco数据集主要是images,categories,annotations(数据格式都是list)
coco是把所有图片的信息都整合在一起了,成了一个dict
images:主要有height,width,id,file_name#id是图片id
categories:主要有supercategory,id,name#id是category的id
annotations:主要有segmentation,iscrowd,image_id,bbox,area,category_id,id
要注意在annotations里id之间的关系
coco的格式是
{
images:[{height,width,id,file_name}, {height,width,id,file_name}…]
categories:[{supercategory,id,name},{supercategory,id,name}…]
annotations:[{segmentation,iscrowd,image_id,bbox,area,category_id,id},{segmentation,iscrowd,image_id,bbox,area,category_id,id}]
转为coco格式
import numpy as np import json import glob class MyEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, np.integer): return int(obj) elif isinstance(obj, np.floating): return float(obj) elif isinstance(obj, np.ndarray): return obj.tolist() else: return super(MyEncoder, self).default(obj) class tococo(object): def __init__(self,jsonfile,save_path): self.images = [] self.categories = [] self.annotations = [] self.jsonfile = jsonfile self.save_path = save_path#保存json的路径 self.class_ids = {"BG":0} self.class_id = 0 self.coco = {} def labelme_to_coco(self): annid = 0 for num,json_file in enumerate(self.jsonfile): data = open(json_file,"r") data = json.load(data) self.images.append(self.get_images(data["imagePath"],data["imageHeight"],data["imageWidth"],num)) shapes = data["shapes"] for shape in shapes: if shape["label"] in self.class_ids: pass if shape["label"] not in self.class_ids and shape["label"] == "car": self.class_id = self.class_id +1 self.class_ids[shape["label"]] = self.class_id self.categories.append(self.get_categories(shape["label"],self.class_id)) self.annotations.append(self.get_annotations(shape["points"],num,annid,shape["label"])) annid = annid+1 self.coco["images"] = self.images self.coco["categories"] = self.categories self.coco["annotations"] = self.annotations def get_images(self,filename,height,width,image_id): image = {} image["height"] = height image['width'] = width image["id"] = image_id image["file_name"] = filename return image def get_categories(self,name,class_id): category = {} category["supercategory"] = "Cancer" category['id'] = class_id category['name'] = name return category def get_annotations(self,points,image_id,ann_id,calss_name): annotation = {} mins = np.amin(points,axis = 0) maxs = np.amax(points,axis = 0) wh = maxs -mins x = mins[0] y = mins[1] w = wh[0] h = wh[1] area = w*h annotation['segmentation'] = [list(np.asarray(points).flatten())] annotation['iscrowd'] = 0 annotation['image_id'] = image_id annotation['bbox'] = [x,y,w,h] annotation['area'] = area annotation['category_id'] = self.class_ids[calss_name] annotation['id'] = ann_id return annotation def save_json(self): self.labelme_to_coco() coco_data = self.coco # 保存json文件 json.dump(coco_data, open(self.save_path, 'w'), indent=4, cls=MyEncoder) # indent=4 更加美观显示 import glob labelme_json = glob.glob('G:/train/*.json') c = tococo(labelme_json, 'G:/data/parking/cars//annotations/train232.json') c.save_json()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。