统计labelme标注的json文件中各类别的标注数量

import os
import json
from collections import defaultdict


def count_bboxes_by_class(folder_path):
    """
    统计文件夹中所有JSON文件中各类别对应的框数量

    参数:
        folder_path: 包含JSON文件的文件夹路径

    返回:
        字典,键为类别标签,值为对应的框数量
    """
    # 初始化计数器
    class_bbox_count = defaultdict(int)

    # 检查文件夹是否存在
    if not os.path.exists(folder_path):
        print(f"错误:文件夹 {folder_path} 不存在")
        return class_bbox_count

    # 遍历文件夹中的所有文件
    for filename in os.listdir(folder_path):
        if filename.endswith('.json'):
            file_path = os.path.join(folder_path, filename)

            try:
                # 读取JSON文件
                with open(file_path, 'r', encoding='utf-8') as f:
                    data = json.load(f)

                # 检查文件中是否包含shapes字段
                if 'shapes' in data:
                    # 统计每个类别的框数量
                    for shape in data['shapes']:
                        class_label = shape['label']
                        class_bbox_count[class_label] += 1

                print(f"已处理文件: {filename}")

            except json.JSONDecodeError:
                print(f"警告:无法解析JSON文件 {filename}")
            except Exception as e:
                print(f"处理文件 {filename} 时发生错误: {str(e)}")

    return class_bbox_count


def print_statistics(class_bbox_count):
    """打印统计结果"""
    if not class_bbox_count:
        print("未找到任何类别框统计信息")
        return

    print("\n类别框数量统计结果:")
    print("=" * 40)
    print(f"{'类别标签':<15}{'框数量':<15}")
    print("-" * 40)

    for class_label, count in class_bbox_count.items():
        print(f"{class_label:<15}{count:<15}")

    total = sum(class_bbox_count.values())
    print("-" * 40)
    print(f"{'总计':<15}{total:<15}")


if __name__ == "__main__":
    folder_path = "path/to/jsonFolder"
    # 统计类别框数量
    class_bbox_count = count_bboxes_by_class(folder_path)

    # 打印统计结果
    print_statistics(class_bbox_count)

其中folder_path是集中存放json的文件夹目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Env1sage

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值