pycocotools使用说明

整体说明

来自pycocotools的函数注释

#定义了以下API函数:
COCO—加载COCO注释文件并准备数据结构的COCO api类。
decodeMask:解码通过游程长度编码编码的二进制掩码M。
encodeMask:使用游程编码对二进制掩码M进行编码。
getAnnIds:获取满足给定筛选条件的ann ID。
getCatIds:获取满足给定筛选条件的cat ID。
getImgIds:获取满足给定筛选条件的img ID。
loadAnns:加载具有指定ID的ANN。
loadCats:使用指定ID加载CAT。
loadImgs:使用指定的ID加载imgs。
annToMask:将注释中的分段转换为二进制掩码。
showAnns:显示指定的注释。
loadRes:加载算法结果并创建用于访问它们的API。
download:从mscoco下载COCO图像。组织服务器。
在整个API中,“ann”=注释,“cat”=类别,“img”=图像。
有关每个功能的帮助可通过以下方式访问:“Help COCO>function”

详细示例

以instances_val2017.json为例,调用pycocotools,读取COCO类

from pycocotools.coco import COCO
json_file = r'instances_val2017.json'
coco = COCO(json_file)

打印关键字

print(coco.dataset.keys())

输出结果

dict_keys(['info', 'licenses', 'images', 'annotations', 'categories'])

函数说明

有的博客说还有一个关键索引type,但是我没找到

decodeMask

encodeMask

getAnnIds

img_id = img_id_list[2]
ann_ids = coco.getAnnIds(imgIds=[img_id])
print(ann_ids)

输出结果

[481918, 489768, 495624, 1424143, 1437313, 1507017, 1804847]

函数说明

getAnnIds函数有四个参数,imgIds=[]、catIds=[]、areaRng=[]、iscrowd=None,areaRng是图像区域,iscrowd是标注信息中的一个属性,输出的是满足条件的标注信息ID

loadAnns

anns = coco.loadAnns(ids=ann_ids)
print(anns)

输出结果

[{"segmentation": [[510.66,423.01,511.72,420.03,510.45......]],"area": 702.1057499999998,"iscrowd": 0,"image_id": 289343,"bbox": [473.07,395.93,38.65,28.67],"category_id": 18,"id": 1768},......]

函数说明

loadAnns函数只有一个参数ids,代表输入的标注ID列表,输出对应ID的详细标注信息

getCatIds

catidlist = coco.getCatIds()
print(catidlist)

输出结果

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40......]

函数说明

getCatIds函数三个参数,分别是catNms=[], supNms=[], catIds,catNms输入的是类别名,supNms输入的是父类名,catIds输入的是想要类别的id,返回的是满足条件的全部id

coco数据集中类别id是不连号的,原因不知道

loadCats

catcls = coco.loadCats()
print(catcls)

输出结果

[{'supercategory': 'outdoor', 'id': 13, 'name': 'stop sign'}]

函数说明

loadCats函数只有一个参数ids,输入的是类别的id,得到的是类别id的详细信息

getImgIds

img_id_list = coco.getImgIds()
print(img_id_list)
print(len(img_id_list))

输出结果

[397133, 37777.....]

5000

函数说明

getImgIds有两个参数imgIds=[], catIds=[],imgIds指定图像ID范围,catIds指定类别范围,函数会返回同时满足两者条件的图像ID

loadImgs

img_id = img_id_list[2]
img_info = coco.loadImgs(ids=[img_id])
print(img_info)

输出结果

[{'license': 4, 'file_name': '000000252219.jpg', 'coco_url': 'http://images.cocodataset.org/val2017/000000252219.jpg', 'height': 428, 'width': 640, 'date_captured': '2013-11-14 22:32:02', 'flickr_url': 'http://farm4.staticflickr.com/3446/3232237447_13d84bd0a1_z.jpg', 'id': 252219}]

函数说明

loadImgs只有一个参数ids,输入的是个图像id的列表,如果是一个图像直接输入id也可以。

输出的是json文档中对应的图像信息,输入的img_id同输出中的'id': 252219

之后就可以读取图像信息了,如图像名,图像宽、高

annToMask

showAnns

import skimage.io as io
import matplotlib.pyplot as plt
catIds = coco.getCatIds(catNms=['person', 'dog'])
imgIds = coco.getImgIds(catIds=catIds)
index = 11
img = coco.loadImgs(imgIds[index])[0]
print(img['coco_url'])
i = io.imread(img['coco_url'])
#i = cv2.imread(os.path.join(r'E:\datasets\coco\val2017', img['file_name']))
plt.imshow(i)
plt.axis('off')
annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None)
anns = coco.loadAnns(annIds)
coco.showAnns(anns)
plt.savefig('testblueline.jpg')
plt.show()

输出结果

pycocotools使用说明_第1张图片

函数说明

showAnns函数有两个参数anns, draw_bbox,anns输入的是图像的标注信息,draw_bbox是是否在结果中画框、默认为False

showAnns函数中图像绘制语句是用matplotlib.pyplot写的,因此只能用plt绘制结果

可以使用io.imread(img['coco_url'])读取网络图像,也可以使用i = cv2.imread(os.path.join(r'E:\datasets\coco\val2017', img['file_name']))读取本地图像

plt.imshow(i)绘制图像i,plt.show()显示绘制结果,这两个语句完全不同,没有语句plt.show(),无法显示绘制结果

COCO数据集的标注文档中,还有关键点的标注文件person_keypoints_val2017.json,也可以使用此语句进行绘制

loadRes

download

完整代码

from pycocotools.coco import COCO
import skimage.io as io
import matplotlib.pyplot as plt
import cv2
​
if __name__ == '__main__':
    json_file = r'instances_val2017.json'
    coco = COCO(json_file)
    print(coco.dataset.keys())
    #类别信息
    catIds = coco.getCatIds(catNms=['dog'])
    catInfo = coco.loadCats(catIds)
    print(f"catIds:{catIds}")
    print(f"catcls:{catInfo}")
​
    #图像信息
    imgIds = coco.getImgIds(catIds=catIds)
    index = 5      #随便选择一张图
    imgInfo = coco.loadImgs(imgIds[index])[0]
    print(f"imgIds:{imgIds}")
    print(f"img:{imgInfo}")
​
    #标注信息
    annIds = coco.getAnnIds(imgIds=imgInfo['id'], catIds=catIds, iscrowd=None)
    annsInfo = coco.loadAnns(annIds)
    print(f"annIds:{annIds}")
    print(f"annsInfo:{annsInfo}")
​
    #显示图像
    i = io.imread(imgInfo['coco_url'])
    #i = cv2.imread(os.path.join(r'E:\datasets\coco\val2017', img['file_name']))
    plt.imshow(i)
    plt.axis('off')
    coco.showAnns(annsInfo, True)
    #plt.savefig('testbluelinew.jpg')
    plt.show()

推荐博客

pycocotools库的安装和使用方法_ayiya_Oese的博客-CSDN博客_pycocotools使用

【笔记】JSON :COCO API 读取 COCO数据集_程序猿的探索之路的博客-CSDN博客_coco数据集读取

pycocotools使用教程,基础版_持久决心的博客-CSDN博客_pycocotools

你可能感兴趣的:(深度学习,笔记,深度学习,人工智能)