COCO数据集格式(详解)及COCO标注可视化。json转COCO等代码

您所在的位置:网站首页 coco的logo是什么 COCO数据集格式(详解)及COCO标注可视化。json转COCO等代码

COCO数据集格式(详解)及COCO标注可视化。json转COCO等代码

2024-06-16 21:07| 来源: 网络整理| 查看: 265

coco数据集JSON文件格式分为一下几个字段。

{ "info": info, # dict "licenses": [license], # list ,内部是dict "images": [image], # list ,内部是dict "annotations": [annotation], # list ,内部是dict "categories": # list ,内部是dict }

注意 :对于深度学习训练,实际有用的字段,只有以下三个字段。

"images": [image], # list ,内部是dict "annotations": [annotation], # list ,内部是dict "categories": # list ,内部是dict

info字段内的内容

"info":{#数据信息描述 "description":"COCO 2017 Dataset",# 数据描述 "url":"http://*****.org",#下载地址 "version":"1.0",#版本 "year":"2017",#年份 "contributor":"COCO Consortium",#提供者 "data_created":"2017/09/01",#创建日期}

这个字段可以忽略,可以为空。

licenses字段

"licenses":[ { 'url': 'http://creativecommons.org/licenses/by-nc-sa/2.0/', 'id': 1, 'name': 'Attribution-NonCommercial-ShareAlike License' } .... .... ]

这个字段可以忽略,可以为空。

images

"images": [ { "license":4 #可以忽略 "file_name":000.jpg #可以忽略 "coco_url":"http://****" #可以忽略 "id": 1, "file_name": "000.tif", "width": 48.0, "height": 112.0 "date_captured":"2022-02-02 17:02:02" #可以忽略 "flickl_url":"http://****" #可以忽略 } ... ... ]

annotations

这个字段里面都是有用信息

categories

这个里面也是有用的信息

 将一个大的json文件生成只有一张图片的json:

from __future__ import print_function from pycocotools.coco import COCO import os, sys, zipfile import urllib.request import shutil import numpy as np import skimage.io as io import matplotlib.pyplot as plt import pylab import json json_file='/media/fire/d/share_data/datasets/coco/annotations/person_keypoints_val2017.json' # # Object Instance 类型的标注 # person_keypoints_val2017.json # Object Keypoint 类型的标注格式 # captions_val2017.json # Image Caption的标注格式 data=json.load(open(json_file,'r')) data_2={} data_2['info']=data['info'] data_2['licenses']=data['licenses'] data_2['images']=[data['images'][0]] # 只提取第一张图片 data_2['categories']=data['categories'] annotation=[] # 通过imgID 找到其所有对象 imgID=data_2['images'][0]['id'] for ann in data['annotations']: if ann['image_id']==imgID: annotation.append(ann) data_2['annotations']=annotation # 保存到新的JSON文件,便于查看数据特点 json.dump(data_2,open('/media/fire/d/share_data/datasets/coco/annotations/test_person_keypoints_val2017.json','w'),indent=4) # indent=4 更加美观显示

二、COCO数据集可视化

from __future__ import print_function from pycocotools.coco import COCO import os, sys, zipfile import urllib.request import shutil import numpy as np import skimage.io as io import matplotlib.pyplot as plt import pylab pylab.rcParams['figure.figsize'] = (8.0, 10.0) annFile='/media/fire/d/share_data/datasets/coco/annotations/person_keypoints_val2017.json' coco=COCO(annFile) # display COCO categories and supercategories cats = coco.loadCats(coco.getCatIds()) nms=[cat['name'] for cat in cats] print('COCO categories: \n{}\n'.format(' '.join(nms))) nms = set([cat['supercategory'] for cat in cats]) print('COCO supercategories: \n{}'.format(' '.join(nms))) # imgIds = coco.getImgIds(imgIds = [324158]) imgIds = coco.getImgIds() img = coco.loadImgs(imgIds[0])[0] dataDir = '/media/fire/d/share_data/datasets/coco' dataType = 'val2017' I = io.imread('%s/%s/%s'%(dataDir,dataType,img['file_name'])) #plt.axis('off') plt.imshow(I) plt.show()

显示图片

 加载肢体关键点:

catIds=[] for ann in coco.dataset['annotations']: if ann['image_id']==imgIds[0]: catIds.append(ann['category_id']) plt.imshow(I); plt.axis('off') annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None) anns = coco.loadAnns(annIds) print(anns) coco.showAnns(anns) plt.imshow(I); plt.axis('off'); plt.show() 加载instances mask: coco = COCO("/media/fire/d/share_data/datasets/coco/annotations/instances_val2017.json") img_ids = coco.getImgIds() print(len(img_ids)) cat_ids = [] for ann in coco.dataset["annotations"]: if ann["image_id"] == img_ids[0]: cat_ids.append(ann["category_id"]) ann_ids = coco.getAnnIds(imgIds=img_ids[0], catIds = cat_ids) ann_ids2 = coco.getAnnIds(imgIds=img_ids[0], catIds = cat_ids) plt.imshow(I) print(ann_ids) print(ann_ids2) anns = coco.loadAnns(ann_ids) coco.showAnns(anns) plt.imshow(I) plt.show()

图像效果

三、不同标注数据转换到COCO格式

下面为labelme json格式转到COCO格式。 def image(self,data,num): image={} img = utils.img_b64_to_array(data['imageData']) # 解析原图片数据 # img=io.imread(data['imagePath']) # 通过图片路径打开图片 # img = cv2.imread(data['imagePath'], 0) height, width = img.shape[:2] img = None image['height']=height image['width'] = width image['id']=num+1 image['file_name'] = data['imagePath'].split('/')[-1] self.height=height self.width=width return image def categorie(self,label): categorie={} categorie['supercategory'] = label[0] categorie['id']=len(self.label)+1 # 0 默认为背景 categorie['name'] = label[1] return categorie def annotation(self,points,label,num): annotation={} annotation['segmentation']=[list(np.asarray(points).flatten())] annotation['iscrowd'] = 0 annotation['image_id'] = num+1 # annotation['bbox'] = str(self.getbbox(points)) # 使用list保存json文件时报错(不知道为什么) # list(map(int,a[1:-1].split(','))) a=annotation['bbox'] 使用该方式转成list annotation['bbox'] = list(map(float,self.getbbox(points))) annotation['category_id'] = self.getcatid(label) annotation['id'] = self.annID return annotation



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3