【代码整理】COCO格式数据集画框

可以用于排查数据集转化后可能出现的坐标错误,类别不对齐等需要可视化才能发现的问题

import部分

from pycocotools.coco import COCO
import numpy as np
import os
from PIL import Image
from matplotlib.collections import PatchCollection
from matplotlib.patches import Polygon
import matplotlib.pyplot as plt

VisCOCOBox

class VisCOCOBox:

    def visCOCOGTBoxPerImg(self, coco, image2color, anns):
        '''可视化COCO数据集下一张图像的所有GTBoxes
            Args:
                :param coco:        COCO数据集实例
                :param image2color: 每个类别的颜色
                :param anns:        当前图像对应的GTBoxes信息

            Retuens:
                None
        '''
        # 获取当前正在使用的坐标轴对象"get current axis"(这里就是图像的坐标轴)
        ax = plt.gca()
        # 关闭plt的坐标轴自动缩放功能:
        # ax.set_autoscale_on(False)
        # polygons存储plt的多边形实例(即bbox), colors存储每个bbox对应的颜色(区分不同的类别)
        for ann in anns:
            color = image2color[ann['category_id']]
            x, y, w, h = ann['bbox']
            # 多边形填充+矩形边界:
            ax.add_patch(Polygon(xy=[[x, y], [x, y+h], [x+w, y+h], [x+w, y]], color=color, alpha=0.3))
            ax.add_patch(Rectangle(xy=(x, y), width=w, height=h, fill=False, color=color, alpha=1))
            # 可视化每个bbox的类别的文本(ax.text的bbox参数用于调整文本框的样式):
            ax.text(x, y, f"{coco.loadCats(ann['category_id'])[0]['name']}", color='white', bbox=dict(facecolor=color, alpha=0.5))



    # 批量可视化coco格式数据集的GT
    def visCOCOGTBoxes(self, jsonPath, imgDir, visNum, saveVisDir):
        '''批量可视化数据集GTBoxes(可以用于排查画框等错误)
            Args:
                :param jsonPath:    COCO格式Json文件路径
                :param imgDir:      图像根目录
                :param visNum:      可视化几张图像
                :param saveVisDir:  可视化图像保存目录

            Retuens:
                None
        '''
        if not os.path.isdir(saveVisDir):os.makedirs(saveVisDir)
        # 创建COCO数据集读取实例:
        coco = COCO(jsonPath)
        # 每个类别都获得一个随机颜色:
        image2color = dict()
        for cat in coco.getCatIds():
            image2color[cat] = (np.random.random((1, 3)) * 0.7 + 0.3).tolist()[0]
        # 获取数据集中所有图像对应的imgId:
        imgId = coco.getImgIds()
        # 打乱数据集图像读取顺序:
        np.random.shuffle(imgId)

        for i in range(visNum):
            plt.figure(figsize=(20, 13))
            # 获取图像信息(json文件 "images" 字段)
            imgInfo = coco.loadImgs(imgId[i])[0]
            imgPath = os.path.normpath(os.path.join(imgDir, imgInfo['file_name']))
            # 这里win和linux或许不一样:
            imgName = imgPath.split('\\')[-1]
            # 得到当前图像里包含的BBox的所有id
            annIds = coco.getAnnIds(imgIds=imgInfo['id'])
            # anns (json文件 "annotations" 字段)
            anns = coco.loadAnns(annIds)
            # 读取图像
            image = Image.open(imgPath).convert('RGB')

            plt.imshow(image)
            # 画框:
            self.visCOCOGTBoxPerImg(coco, image2color, anns)
            # 样式:
            plt.xticks([])
            plt.yticks([])
            plt.tight_layout()
            # 保存可视化结果
            plt.savefig(os.path.join(saveVisDir, f'vis_{imgName}'), bbox_inches='tight', pad_inches=0.0, dpi=150)

example

if __name__ == '__main__':
    jsonPath = 'E:/datasets/RemoteSensing/visdrone2019/annotations/train.json'
    imgDir = 'E:/datasets/RemoteSensing/visdrone2019/images/train/images'
    saveVisDir = './vis1'
    COCOVis = VisCOCOBox()
    COCOVis.visCOCOGTBoxes(jsonPath, imgDir, 4, saveVisDir)

输出(VisDrone2019数据集train):
在这里插入图片描述

输出(COCO2017数据集):
在这里插入图片描述

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于制作COCO格式数据集,你需要按照以下步骤进行操作: 1. 数据收集:收集与你任务相关的图像和标注信息。确保图像和标注信息是一一对应的,即每张图像都有相应的标注。 2. 安装COCO API:COCO API是一个用于处理COCO数据集Python库,你需要先安装它。可以在GitHub上找到COCO API的源代码并按照说明进行安装。 3. 创建JSON文件:使用COCO API提供的函数,创建一个JSON文件来存储数据集的信息。JSON文件包含了图像的路径、尺寸、类别标签等信息。 4. 标注图像:使用标注工具(例如LabelImg、RectLabel等)来为每张图像创建标注。标注通常以矩形框的形式表示,可以包括物体的类别、边界框的坐标等。 5. 将标注信息添加到JSON文件:将每张图像的标注信息添加到之前创建的JSON文件中。确保每个标注都与相应的图像路径对应。 6. 数据集划分:根据需要,可以将数据集划分为训练集、验证集和测试集。可以按照比例划分,也可以手动选择特定的图像作为验证集和测试集。 7. 完善JSON文件:更新JSON文件中的其他信息,例如数据集名称、类别标签等。 8. 数据集检查:使用COCO API提供的函数,检查数据集的完整性和正确性。确保图像和标注信息没有错误或缺失。 9. 数据集使用:将制作好的COCO格式数据集用于训练模型或其他相关任务。 以上是制作COCO格式数据集的基本步骤,你可以根据具体需求和任务进行适当调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值