0. coco数据集格式了解:分析数据存储格式
1. coco Python API-使用:coco API 使用
2. coco Python API-源码分析:coco API 源码分析
3. coco Pythonn API-数据集类数据分布:coco 数据类别数量分布
下面举一个例子,将一个大的标注文件(json)转化为每张图对应的(小josn文件),利用小json文件可以方便的与其他数据格式进行转换。
1. 首先看看目录
.
├── 517
│ ├── imageset
│ └── instances_default.json
├── get_img_info.py
└── utils.py
注:imageset里面存放的是图片。
instances_default.json是标准的coco数据集标注格式。
2. 看代码
import os
import cv2
import shutil
import json
from tqdm import tqdm
from PIL import Image
from pycocotools.coco import COCO
def json_dump(data, json_out):
json.dump(data, open(json_out, "w"), indent=2, ensure_ascii=False)
def cati2name(coco):
classes = dict()
for cat in coco.dataset['categories']:
classes[cat['id']] = cat['name']
return classes
def get_img_info(img, coco, classes, img_dir):
file_name = img['file_name']
file_path = os.path.join(img_dir, file_name)
I = cv2.imread(file_path)
ann_ids = coco.getAnnIds(imgIds=img['id'], iscrowd=None)
anns = coco.loadAnns(ann_ids)
json_path = file_path.replace(".jpg", ".json")
img_info = {}
img_info['img'] = file_name
anns_new = []
for ann in anns:
ann['name'] = classes[ann['category_id']]
img_info['anns'] = anns
json_dump(img_info, json_path)
def main(ann_path):
img_dir = os.path.join(ann_path.split("/")[0], 'imageset')
coco = COCO(ann_path)
classes = cati2name(coco)
img_ids = coco.getImgIds()
for img_id in tqdm(img_ids):
img = coco.loadImgs(img_id)[0]
get_img_info(img, coco, classes, img_dir)
if __name__ == "__main__":
ann_path = "517/instances_default.json"
main(ann_path)