CV计算机视觉的数据集分析python脚本:数据集中的类别数量和占比加进度条

在CV的目标检测中,我们经常需要对数据集进行数据分析,比如分析数据集中的类别的GT框的数量、图片的像素尺寸、GT框的尺寸和长宽比等。下面的代码就是用python脚本实现对类别的GT框的数量的分析。

这是我们常见是标签格式是yolo的数据集的样式,分析类别的GT框数量只需要使用待分析的lables的路径即可。

读取的数据集目标的格式:
目录:
dataset:绝对路径:"C:\Desktop\dataset"
--images:绝对路径:"C:\Desktop\dataset\images"
----.jpg
--labels:绝对路径:"C:\Desktop\dataset\labels"
.....txt

.txt文件的标签格式yolo格式(例子):
3 0.385417 0.498148 0.0625 0.033333

数据集是这样子的,同时给出了标签的格式。labels目录中的.txt中的数据是目标检测的标签数据,每一行数据分别对应一个GT框,每一行数据从左到右分别是:id, x,y,w,h。列1 - 目标类别id ,  列2 - 目标中心位置x, 列3 - 目标中心位置y, 列4 - 目标宽度w,列5 - 目标高度h。x,y,w,h是小于1的浮点数,因为是经过对图像进行了归一化处理得到的值,也就是目标的真实的x,w值除以图像的宽度,y,h除以图像的高度。


完整的python脚本如下:

import os
from collections import Counter
from tqdm import tqdm

def count_classes_in_labels(labels_directory):
    """
    统计给定目录(包括所有子目录)中所有.txt标签文件内各个类别的GT框数量,
    并按类别GT框数量占比从大到小排序输出。同时输出所有类别的GT框总数。

    参数:
    labels_directory (str): 存放.txt标签文件的根目录。

    返回:
    None: 结果直接打印到控制台。
    """
    # 创建一个Counter对象来存储每个类别的GT框计数
    category_counts = Counter()

    # 获取所有标签文件的完整路径
    label_files = [os.path.join(root, file)
                   for root, dirs, files in os.walk(labels_directory)
                   for file in files if file.endswith(".txt")]

    # 使用tqdm遍历所有标签文件
    for filepath in tqdm(label_files, desc="Processing label files", unit="file"):
        # 打开并读取文件
        with open(filepath, 'r') as file:
            for line in file:
                # 分割每行数据,获取类别ID
                try:
                    category_id = int(line.split()[0])
                    category_counts[category_id] += 1
                except (ValueError, IndexError):
                    print(f"Warning: Could not parse line in file {filepath}. Line: {line.strip()}")

    # 计算所有GT框的总数
    total_gt_boxes = sum(category_counts.values())

    # 创建一个列表,其中包含每个类别的GT框数量和占比
    results = []
    for category_id, count in category_counts.items():
        percentage = (count / total_gt_boxes) * 100
        results.append((category_id, count, percentage))

    # 按照占比从大到小排序
    sorted_results = sorted(results, key=lambda x: x[2], reverse=True)

    # 输出排序后的每个类别的GT框数量和占比
    for category_id, count, percentage in sorted_results:
        print(f"Category {category_id}: GT Boxes = {count}, Percentage = {percentage:.2f}%")

    # 输出所有类别的GT框总数
    print(f"Total GT boxes: {total_gt_boxes}")

# 调用函数
source_labels_dir =    #标签label目录路径
count_classes_in_labels(source_labels_dir)

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值