https://blog.csdn.net/qq_33254870/article/details/88683032
https://blog.csdn.net/zym19941119/article/details/80241663
现就几个函数做一些说明:
getCatIds(catNms=[], supNms=[], catIds=[]) :通过输入类别的名字、大类的名字或是种类的id,来筛选得到图片所属类别的id。
getImgIds(imgIds=[], catIds=[]) :通过图片的id或所属种类的id得到图片的id。
loadImgs(ids=[]) :得到图片的id信息后,就可以用loadImgs得到图片的信息了 。
getAnnIds(imgIds=[], catIds=[], areaRng=[], iscrowd=None) :通过输入图片的id、类别的id、实例的面积、是否是人群来得到图片的注释id。再根据注释信息进行实例分割。
loadAnns(ids=[]) :通过注释的id,得到注释的信息。
showAnns(anns) :使用标注的信息画分割的结果。
COCO数据整理
import os
import numpy as np
import util as ut
# -------------------
try: # pycocotools 已经加入了全局环境变量中
from pycocotools.coco import COCO
except ModuleNotFoundError:
import sys
# 加载 COCO API 环境
sys.path.append('E:/pytorch/tools/cocoapi-master/PythonAPI')
from pycocotools.coco import COCO
root = 'E:/dataset/object_detect/coco2017' # 你下载的 COCO 数据集所在目录
# 查看 images 下的图片
root_img_path = root+ '/train2017'
print( os.listdir(root_img_path))
Z = os.listdir(root_img_path)
annFile = 'E:/dataset/object_detect/coco2017/annotations/instances_train2017.json'
coco = COCO(annFile)
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)))
#'person', 'car', 'bus', 'truck', 'bicycle', 'motorcycle'
# 0 1 2 3 4 5
need_nms = ['person', 'car', 'bus', 'truck', 'bicycle', 'motorcycle']
id = ["0", "1", "2", "3", "4", "5"]
out_text = "ann_train.txt"
labels = []
imgIds = []
for i in range(0, len(need_nms)):
catIds = coco.getCatIds(catNms=[need_nms[i]])
imgId = coco.getImgIds(catIds=catIds)
imgIds += imgId
print(" len imgIds :", len(imgIds))
imgIds = list(set(imgIds))
print("len :", len(imgIds))
for img_id in imgIds:
img_dic = coco.loadImgs(img_id)[0]
bboxs = ''
for i in range(0, len(need_nms)):
catIds = coco.getCatIds(catNms=[need_nms[i]])
annIds = coco.getAnnIds(imgIds=img_dic['id'], catIds=catIds, iscrowd=None)
anns = coco.loadAnns(annIds)
for ann in anns:
bboxs += " "
bboxs += str(ann['bbox'][0]) + ","
bboxs += str(ann['bbox'][1]) + ","
bboxs += str(ann['bbox'][0] + ann['bbox'][2]) + ","
bboxs += str(ann['bbox'][1] + ann['bbox'][3]) + ","
bboxs += id[i]
label = root_img_path + "/" + img_dic['file_name'] + bboxs + "\n"
labels.append(label)
ut.write_line(out_text, labels)