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

2024-01-23 08:28

本文主要是介绍【代码整理】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数据集下一张图像的所有GTBoxesArgs::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对应的颜色(区分不同的类别)polygons, colors = [], []for ann in anns:color = image2color[ann['category_id']]x, y, w, h = ann['bbox']# 采用多边形画法:poly = [[x, y], [x, y + h], [x + w, y + h], [x + w, y]]polygons.append(Polygon(np.array(poly).reshape((4,2))))colors.append(color)# 可视化每个bbox的类别的文本(ax.text的bbox参数用于调整文本框的样式):ax.text(x, y, f"{coco.loadCats(ann['category_id'])[0]['name']}", color='white', bbox=dict(facecolor=color))# PatchCollection批量绘制图形, 而不是单独绘制每一个(采用填充,透明度为alpha)p = PatchCollection(polygons, facecolor=colors, linewidths=0, alpha=0.4)ax.add_collection(p)# 批量可视化coco格式数据集的GTdef 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的所有idannIds = 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)

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

输出(VisDrone2019数据集):

在这里插入图片描述

这篇关于【代码整理】COCO格式数据集画框的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/635802

相关文章

Mysql如何将数据按照年月分组的统计

《Mysql如何将数据按照年月分组的统计》:本文主要介绍Mysql如何将数据按照年月分组的统计方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql将数据按照年月分组的统计要的效果方案总结Mysql将数据按照年月分组的统计要的效果方案① 使用 DA

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

jupyter代码块没有运行图标的解决方案

《jupyter代码块没有运行图标的解决方案》:本文主要介绍jupyter代码块没有运行图标的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录jupyter代码块没有运行图标的解决1.找到Jupyter notebook的系统配置文件2.这时候一般会搜索到

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放