【数据分析】coco格式数据生成yolo数据可视化

devtools/2025/1/18 8:01:21/

yolo的数据可视化很详细,coco格式没有。所以写了一个接口。
输入:coco格式的instances.json
输出:生成像yolo那样的标注文件统计并可视化

import os
import random
import numpy as np
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sn
from glob import glob
from PIL import Image, ImageDraw
import json
"""功能:读取instances.json生成像yolo那样的标注文件统计并可视化"""def convert(size, box): # size(img_width, img_height)# box=[x_min, y_min, width, height]# coco转yolo   dw = 1. / (size[0])dh = 1. / (size[1])x = box[0] + box[2] / 2.0y = box[1] + box[3] / 2.0w = box[2]h = box[3]#round函数确定(xmin, ymin, xmax, ymax)的小数位数x = round(x * dw, 6)w = round(w * dw, 6)y = round(y * dh, 6)h = round(h * dh, 6)return (x, y, w, h)def plot_labels(labels, names=(), save_dir='',colors=[0,0,255]):# plot dataset labelsprint('Plotting labels... ')c, b = labels[:, 0], labels[:, 1:].transpose()  # classes, boxesnc = int(c.max() + 1)  # number of classesx = pd.DataFrame(b.transpose(), columns=['x', 'y', 'width', 'height'])# seaborn correlogramsn.pairplot(x, corner=True, diag_kind='auto', kind='hist', diag_kws=dict(bins=50), plot_kws=dict(pmax=0.9))plt.savefig(os.path.join(save_dir, 'labels_correlogram.jpg'), dpi=200)plt.close()# matplotlib labelsmatplotlib.use('svg')  # fasterax = plt.subplots(2, 2, figsize=(8, 8), tight_layout=True)[1].ravel()y = ax[0].hist(c, bins=np.linspace(0, nc, nc + 1) - 0.5, rwidth=0.8)# [y[2].patches[i].set_color([x / 255 for x in colors(i)]) for i in range(nc)]  # update colors bug #3195ax[0].set_ylabel('instances')if 0 < len(names) < 30:ax[0].set_xticks(range(len(names)))ax[0].set_xticklabels(names, rotation=90, fontsize=10)else:ax[0].set_xlabel('classes')sn.histplot(x, x='x', y='y', ax=ax[2], bins=50, pmax=0.9)sn.histplot(x, x='width', y='height', ax=ax[3], bins=50, pmax=0.9)# rectangleslabels[:, 1:3] = 0.5  # centerlabels[:, 1:] = xywh2xyxy(labels[:, 1:]) * 2000img = Image.fromarray(np.ones((2000, 2000, 3), dtype=np.uint8) * 255)for cls, *box in labels[:1000]:ImageDraw.Draw(img).rectangle(box, width=1, outline=colors[int(cls)-1])  # plotax[1].imshow(img)ax[1].axis('off')for a in [0, 1, 2, 3]:for s in ['top', 'right', 'left', 'bottom']:ax[a].spines[s].set_visible(False)plt.savefig(os.path.join(save_dir, 'labels.jpg'), dpi=200)matplotlib.use('Agg')plt.close()def xywh2xyxy(x):# Convert nx4 boxes from [x, y, w, h] to [x1, y1, x2, y2] where xy1=top-left, xy2=bottom-righty = np.copy(x)y[:, 0] = x[:, 0] - x[:, 2] / 2  # top left xy[:, 1] = x[:, 1] - x[:, 3] / 2  # top left yy[:, 2] = x[:, 0] + x[:, 2] / 2  # bottom right xy[:, 3] = x[:, 1] + x[:, 3] / 2  # bottom right yreturn ydef main(json_name,save_root,data_name):# 获取当前数据集中所有json文件with open(json_name, 'r', encoding='utf-8') as file:result = json.load(file)# 每个类别一个颜色category=[]for i in result['categories']:category.append(i['name'])# 类别num_classes = len(category)  # 类别数colors = [(random.randint(0,255),random.randint(0,255),random.randint(0,255)) for _ in range(num_classes)]  # 每个类别生成一个随机颜色# 统计标注信息shapes = []  # 标注框ids = []  # 类别名的索引for i in result['annotations']:img_height=result['images'][i['image_id']-1]['height']img_width=result['images'][i['image_id']-1]['width']label_id=i['category_id']ids.append([label_id])(x, y, w, h)=convert([img_width, img_height], i['bbox']) shapes.append([x, y, w, h])shapes = np.array(shapes)ids = np.array(ids)lbs = np.hstack((ids, shapes))plot_labels(labels=lbs, names=np.array(category),save_dir=os.path.join(save_root,data_name),colors=colors)print("可视化已保存:", os.path.join(save_root,data_name, "label.jpg"))if __name__ == "__main__":json_name = os.path.join(path,data_name,'annotations','instances.json')save_root='保存路径'data_name='数据集的名称'main(json_name,save_root,data_name)

labels.jpg
在这里插入图片描述
labels_correlogram.jpg
在这里插入图片描述


http://www.ppmy.cn/devtools/151505.html

相关文章

几个Linux系统安装体验(续): 中标麒麟服务器系统

本文介绍中标麒麟服务器系统&#xff08;NeoKylin&#xff09;的安装。 下载 下载地址&#xff1a; https://product.kylinos.cn/productCase/42/25 下载文件&#xff1a;本文下载文件名称为NeoKylin-Server7.0-Release-Build09.06-20220311-X86_64.iso。 下载注意事项&…

剑指Offer|LCR 031. LRU 缓存

LCR 031. LRU 缓存 运用所掌握的数据结构&#xff0c;设计和实现一个 LRU (Least Recently Used&#xff0c;最近最少使用) 缓存机制 。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存…

Python贪心

贪心 贪心&#xff1a;把整体问题分解成多个步骤&#xff0c;在每个步骤都选取当前步骤的最优方案&#xff0c;直至所有步骤结束&#xff1b;每个步骤不会影响后续步骤核心性质&#xff1a;每次采用局部最优&#xff0c;最终结果就是全局最优如果题目满足上述核心性质&#xf…

【算法学习笔记】32:筛法求解欧拉函数

上节学习的是求一个数 n n n的欧拉函数&#xff0c;因为用的试除法&#xff0c;所以时间复杂度是 O ( n ) O(\sqrt{n}) O(n ​)&#xff0c;如果要求 m m m个数的欧拉函数&#xff0c;那么就会花 O ( m n ) O(m \sqrt{n}) O(mn ​)的时间。如果是求连续一批数的欧拉函数&#x…

DNS服务学习

DNS服务 一、什么是DNS服务二、概念三、疑问四、内容五、应用实践 一、什么是DNS服务 二、概念 三、疑问 四、内容 五、应用实践 windows server 2019 搭建dns服务器

浅谈云计算20 | OpenStack管理模块(下)

OpenStack管理模块&#xff08;下&#xff09; 五、存储管理5.1 存储管理概述 5.2 架构设计5.2.1 Cinder块存储架构5.2.2 Swift对象存储架构 六、网络管理6.1 网络管理概述6.2 架构解析6.2.1 Neutron网络服务架构6.2.2 网络拓扑架构 6.3 原理与流程6.3.1 网络创建原理6.3.2 网络…

如何在vue中渲染markdown内容?

文章目录 引言什么是 markdown-it&#xff1f;安装 markdown-it基本用法样式失效&#xff1f;解决方法 高级配置语法高亮 效果展示 引言 在现代 Web 开发中&#xff0c;Markdown 作为一种轻量级的标记语言&#xff0c;广泛用于文档编写、内容管理以及富文本编辑器中。markdown…

Spring Boot环境配置

一、Java开发环境 确保你的计算机已经安装了Java Development Kit&#xff08;JDK&#xff09;。建议使用JDK 17&#xff0c;可以从Oracle官方网站上下载并安装。 1.下载及配置环境变量 &#xff08;1&#xff09;下载JDK&#xff1a;官网下载 &#xff08;2&#xff09;运…