COCO 数据集分析和coco API使用

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)

利用该代码,就将整个标注文件拆解为多个标注文件,每张图对应一个标注文件。
 

你可能感兴趣的:(数据集,数据分析)