【代码整理】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数据集):

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/641032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详细分析Java中的Date类以及格式转换

目录 前言1. 基本知识2. 格式化输出3. 格式转换 前言 记录这篇文章的缘由,主要是涉及一个格式转换,对此深挖了这个类 在Java中,Date类是用于表示日期和时间的类。 位于java.util包中,是Java平台中处理日期和时间的基本类之一。…

路由器结构

路由器是连接互联网的设备,本文主要描述路由器的结构组成。 如上所示,OSI(Open System Interconnect)开放系统互联参考模型是互联网架构的标准协议栈,由ISO标准组织制定。自底向上,互联网架构分为7层&#…

服务器与Ajax

1.初识Ajax Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 术语ajax最早产生于2005年,Ajax表示Asynchronous JavaScript and XML(异步JavaScript和XML),但是它不是像HTML、JavaScript或CSS这样的一种“正式的”技…

Docker镜像操作

镜像名称 镜名称一般分两部分组成:[repository]:[tag]。 在没有指定tag时,默认是latest,代表最新版本的镜像。 这里的mysql就是repository,5.7就是tag,合一起就是镜像名称,代表5.7版本的MySQL镜像。 镜像…

YOLOv8改进 | 损失函数篇 | QualityFocalLoss质量焦点损失(含代码 + 详细修改教程)

一、本文介绍 本文给大家带来的改进机制是QualityFocalLoss,其是一种CLS分类损失函数,它的主要创新是将目标的定位质量(如边界框与真实对象的重叠度量,例如IoU得分)直接融合到分类损失中,形成一个联合表示。这种方法能够解决传统目标检测中分类与定位任务之间存在的不一…

Sentinel限流规则支持流控效果

流控效果是指请求达到流控阈值时应该采取的措施,包括三种: 1.快速失败:达到阈值后,新的请求会被立即拒绝并抛出FlowException异常。是默认的处理方式。 2.warm up:预热模式,对超出阈值的请求同样是拒绝并抛…

风二西CTF流量题大集合-刷题笔记|NSSCTF流量题(1)

2.[鹤城杯 2021]流量分析 flag{w1reshARK_ez_1sntit} 3.[CISCN 2023 初赛]被加密的生产流量 c1f_fi1g_1000 4.[GKCTF 2021]签到 flag{Welc0me_GkC4F_m1siCCCCCC!} 5.[闽盾杯 2021]Modbus的秘密 flag{HeiDun_2021_JingSai} 6.[LitCTF 2023]easy_shark 7.[CISCN 2022 初赛]ez…

opencv#29 图像噪声的产生

在上一节的图像卷积我们了解到图像卷积可以用于去除图像中的噪声,那么对于现实生活中每一张采集到的图像都会包含噪声,也就是我们通过相机无法得到不包含噪声的图像,如果我想衡量噪声去除能力的强弱,就必须在一张不含噪声的图像中…

瑞_力扣LeetCode_104. 二叉树的最大深度

文章目录 题目 104. 二叉树的最大深度题解后序遍历 递归实现后序遍历 迭代实现层序遍历 🙊 前言:本文章为瑞_系列专栏之《刷题》的力扣LeetCode系列,主要以力扣LeetCode网的题进行解析与分享。本文仅供大家交流、学习及研究使用,禁…

Armv8-M的TrustZone技术之内存属性单元

如果处理器包含Armv8-M安全扩展,则内存区域的安全状态由内部安全属性单元(SAU,Secure Attribution Unit)或外部实现定义的属性单元(IDAU,Implementation Defined Attribution Unit)的组合控制。…

机器学习实验报告——APRIORI算法

目录 一、算法介绍 1.1算法背景 1.2算法引入 1.3算法假设 1.4算法基本概念介绍 1.4.1关联规则 1.4.2支持度 1.4.3置信度 1.4.4频繁项集 1.4.5项目 1.4.6提升度 二、算法原理 2.1算法思想 2.2Apriori算法产生频繁项集 2.3Apriori算法的基本步骤 2.4关联分析 三、算法实现 3.1 Ap…

深度学习(5)---自注意力机制

文章目录 1. 输入与输出2. Self-attention2.1 介绍2.2 运作过程2.3 矩阵相乘理解运作过程 3. 位置编码4. Truncated Self-attention4.1 概述4.2 和CNN对比4.3 和RNN对比 1. 输入与输出 1. 一般情况下在简单模型中我们输入一个向量,输出结果可能是一个数值或者一个类…

【一站解决您的问题】mac 利用命令升级nodejs、npm、安装Nodejs的多版本管理器n、nodejs下载地址

一:下载nodejs 官网地址,点击下载稳定版 https://nodejs.org/en 如果官网下载特别慢,可以点击这个地址下载 点击这里 https://nodejs.cn/download/current/ 安装完成后,就包含了nodejs 和 npm。此时您的版本就是下载安装的版本…

数字频率合成器dds的量化性能分析matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 DDS的基本原理 4.2 DDS的量化性能分析 5.完整工程文件 1.课题概述 数字频率合成器dds的量化性能分析matlab仿真,分别定义累加器位宽,截位位宽,模拟DAC位宽等&…

制冷系统吸排气管路的设计

吸气管路的设计 由于流动产生的阻力损失,导致压缩机吸气口处的压力低于蒸发器出口处的压力。当吸气压力降低时,回气比容增大,压缩机的排气量减少,机组制冷量将会有损失。同时吸气管中还要维持足够高的制冷剂流速以使冷冻油能顺利返回压缩机。…

走出大模型部署新手村!小明这样用魔搭×函数计算

作者:拓山 前文介绍了魔搭 ModelScope 社区模型服务 SwingDeploy 服务。开发者可以将模型从魔搭社区的模型库一键部署至阿里云函数计算,当选择模型并部署时,系统会选择对应的机器配置。按需使用可以在根据工作负载动态的减少资源&#xff0c…

如何在WordPress网站中添加多语言搜索(2种简单方法)

您想在WordPress网站中添加多语言搜索吗? 如果您有一个多语言 WordPress 网站,那么添加多语言搜索功能可以帮助用户通过使用自己的语言进行搜索来更快地找到信息。 在本文中,我们将向您展示如何在 WordPress 中轻松添加多语言搜索&#xff…

C#,入门教程(31)——预处理指令的基础知识与使用方法

上一篇: C#,入门教程(30)——扎好程序的笼子,错误处理 try catchhttps://blog.csdn.net/beijinghorn/article/details/124182386 Visual Studio、C#编译器以及C#语法所支持的预处理指令,绝对是天才设计。 编译程序的时候会发现&am…

EasyRecovery2024易恢复专业免费可靠的国产数据恢复软件

EasyRecovery TM (易恢复中国)是由全球著名数据厂商Ontrack 出品的一款数据文件恢复软件。支持恢复不同存储介质数据:硬盘、光盘、U盘/移动硬盘、数码相机、Raid文件恢复等,能恢复包括文档、表格、图片、音视频等各种文件。 Easy…

Docker Ipvlan l3s模式说明

看到Docker Ipvlan中有三种模式L2、L3、L3S模式,查阅了L3S,记录如下: 起因 Docker链接: IPvlan network driver 概念 注释说明(摘选自: ipvlan-l3s模式) L3S mode与L3 mode 的区别在于启用了iptables (conn-track…