coco格式标注及读取

部署运行你感兴趣的模型镜像

coco 格式是一种最常见的数据标记格式,

其整体文件夹组织结构为:

coco/

  • annotations/

    • instances_train2017.json

    • instances_val2017.json

  • images/

    • datau8ahdbg_1.jpg

    • ...

    • asdh74ahafta_3.jpg

    • ...

    • train2017/

    • val2017

.json文件中的主要字典格式为: 

image{
    "id": int,
    "width": int,
    "height": int,
    "file_name": str,
    "license": int,
    "flickr_url": str,
    "coco_url": str,
    "date_captured": datetime,
}
annotation{
    "id": int,    
    "image_id": int,
    "category_id": int,
    "segmentation": RLE or [polygon],
    "area": float,
    "bbox": [x,y,width,height],
    "iscrowd": 0 or 1,
}

 在具体使用时,主要利用以下代码来解析(仅针对目标检测任务来说)

首先需要安装好coco库:

        pip install pycocotools

然后进行解析,获取图像文件以及其对应的bounding box值:

from pycocotools.coco import COCO
import numpy as np
import cv2
import os
 
source = 'D:/xx/val.json' #json文件的路径
folder = 'D:/img_all/' # 放图像的文件夹
coco = COCO(source)#实例化
records = coco.getImgIds() #获取所有图像的唯一id,结果是一个list格式

index = 5 #索引号,要小于len(records)
record = records[index] #获取其中一个记录即图像id
# 读取图像信息
img_dicc = coco.loadImgs([record]) #结果是一个list,其元素是字典:
'''
{
    'file_name': '59e2513a3c4fdb25ff.png',
    'height': 1024,
    'width': 1024,
    'id': 2021000001
}
'''
 
#--------------------------------打开图像----------------------------------
img_name = img_dicc[0]['file_name']
image_path = os.path.join(folder,img_name)
img = cv2.imread(image_path, cv2.IMREAD_COLOR)
 
 
#读取标签信息
annIds = coco.getAnnIds(imgIds= record) #获取图像 ID 对应的标注框id
anns_dicc = coco.loadAnns(annIds) # 标注框字典构成的list,每个list元素是一个字典:
'''
anns_dicc[0] ={
'area': 5776,
'bbox': [1, 0, 76, 76],
'category_id': 1,
'id': 1,
'ignore': 0,
'image_id': 2021000001,
'iscrowd': 0,
'segmentation': []
}
'''
 
def load_gt(dict_input, key_box):
    #获取gtboxes
    if len(dict_input) < 1:
        return np.empty([0, 5])
    else:
        assert key_box in dict_input[0]
    
    bboxes = np.array([i[key_box] for i in dict_input]).astype(np.int32)
    tag = np.array([i['category_id'] for i in dict_input]).reshape((-1,1)) 
    bboxes = np.hstack((bboxes, tag))  # [x,y,w,h,class]
    return bboxes
    
gtboxes = load_gt(anns_dicc, 'bbox')

# ------------进行可视化查看:标签叠加在图像上并保存---------------------------

#x1,y1,x2,y2 ==> x1,y1,w,h
gtboxes[:, 2:4] += gtboxes[:,:2]

width = img.shape[1]
height = img.shape[0]
for i in range(len(gtboxes)):
    one_box = gtboxes[i]
    one_box = np.array([max(one_box[0], 0), max(one_box[1], 0),
                min(one_box[2], width - 1), min(one_box[3], height - 1)])
    x1,y1,x2,y2 = np.array(one_box[:4]).astype(int)
    line_thick=1
    color = (0,0,255) #红色
    cv2.rectangle(img, (x1,y1), (x2,y2), color, line_thick)

#---------------------------保存可视化图像--------------------------------
out_file ='D:/visual.jpg'
cv2.imwrite(out_file, img, [int(cv2.IMWRITE_JPEG_QUALITY), 95])

最后进行可视化展示。

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值