大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
COCO数据集格式
COCO的全称是Common Objects in COntext,是微软团队提供的一个可以用来进行图像识别的数据集,用于进行物体检测、分割、关键点检测、添加字幕等。
JSON文件的基本格式,以实例分割为例,主要有五个部分:info、licenses、images、annotations、categories
{
"info": info,
"licenses": [license],
"images": [image],
"annotations": [annotation],
"categories": [category]
}
1.info是关于数据集的一些基本信息
"info":{
"description":"This is stable 1.0 version of the 2014 MS COCO dataset.",
"url":"http:\/\/mscoco.org",
"version":"1.0","year":2014,
"contributor":"Microsoft COCO group",
"date_created":"2015-01-27 09:11:52.357475"
}
2.licenses是数据集遵循的一些许可
{
"url":"http:\/\/creativecommons.org\/licenses\/by-nc-sa\/2.0\/",
"id":1,
"name":"Attribution-NonCommercial-ShareAlike License"
}
3.images是数据集中包含的图像,长度等于图像的数量
{
"coco_url": "",
"date_captured": "",
"file_name": "000001.jpg",
"flickr_url": "",
"id": 1,
"license": 0,
"width": 416,
"height": 416
}
4.annotations是数据集中包含的实例掩膜,数量等于bounding box的数量。segmentation格式取决于这个实例是一个单个的对象(即iscrowd=0,将使用polygons格式,以多边形顶点表示)还是一组对象(即iscrowd=1,将使用RLE格式,mask编码)
{
"id": int,
"image_id": int,
"category_id": int,
"segmentation": RLE or [polygon],
"area": float,
"bbox": [x,y,width,height],
"iscrowd": 0 or 1
}
以多边形顶点形式表示的实例:
{
"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
}
5.categories是数据集中的类别数量
{
"id": int,
"name": str,
"supercategory": str,
}
pycocotools解析COCO数据集
COCO数据集中包含三种id:图像id、标注id、类别id,解析COCO数据的关键就是可以通过一种id,找到和该id相关的其他数据
加载json数据
from pycocotools.coco import COCO
import numpy as np
from matplotlib import pyplot as plt
import cv2 as cv
%matplotlib inline
# 加载COCO格式的标注文件
coco=COCO('./mnist.json')
获取数据的image_id,annotation_id和categorie_id
imgIds = coco.getImgIds() # 获取所有的image id,可以选择参数 coco.getImgIds(imgIds=[], catIds=[])
imgIds = coco.getImgIds(imgIds=[0, 1, 2]) # 获得image id 为 0,1,2的图像的id
imgIds = coco.getImgIds(catIds=[0, 1, 2]) # 获得包含类别 id 为0,1,2的图像
annIds = coco.getAnnIds(catIds=[0, 1, 2]) # 获得类别id为0,1,2的标签
annIds = coco.getAnnIds(imgIds=imgIds[0]) # 获得和image id对应的标签
catIds = coco.getCatIds(catNms=['0']) # 通过类别名筛选
catIds = coco.getCatIds(catIds=[0, 1, 2]) # 通过id筛选
catIds = coco.getCatIds(supNms=[]) # 通过父类的名筛选
通过id加载对应数据
print('类别信息')
cats_name = coco.loadCats(ids=catIds)
print(cats_name)
print('\n标签信息:')
anns = coco.loadAnns(annIds)
bboxes = np.array([i['bbox'] for i in anns]).astype(np.int32)
cats = np.array([i['category_id'] for i in anns])
print(anns)
print('\n从标签中提取的Bounding box:')
print(bboxes)
print('图像')
imgIdx = imgIds[0]
img = coco.loadImgs([imgIdx]) # 读取图片信息
img = cv.imread('./train/' + img[0]['file_name'])
# 绘制bounding box
for i in range(len(bboxes)):
p1 = bboxes[i][0:2]
p2 = bboxes[i][0:2] + bboxes[i][2:4]
cv.rectangle(img, (p1[0], p1[1]), (p2[0], p2[1]), (255, 0, 0))
plt.figure(figsize=(8, 8))
plt.imshow(img)
plt.show()
参考:
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/172449.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...