检查json文件是否符合要求,将不符合要求的json文件以及所对应的bmp图片移动到另一个文件夹中

目录

一,介绍

判断标准:

二,数据

 三,代码

 四,运行结果

1,有用的数据

 2,无用的数据


一,介绍


        在整理数据时,我的每一张bmp图片标注后都对应的生成了一个json文件,下面我需要根据json文件中的内容来判断,该bmp图片以及对应的json文件对后续的研究是否有用,有用则留下,无用则移动到对应错误的文件夹中。

判断标准:

        在这里我只关注json文件中shapes 里面的内容(判断条件):

        (1)shapes:不能为空,否则数据将没有意义。

        (2)shapes 中的 label:目标类别名称,不能为空。

        (3)shapes 中的 points:一个 shape 有多个点组成, 里面记录了每一个点的坐标,俩个点无法形成一个坐标,所以点数不能小于等于2。

        (4)下面是有用的json文件

 "shapes": [
    {
      "label": "炎症标0-10",
      "points": [
        [
          611.0943396226414,
          476.60377358490564
        ],
        [
          631.8490566037735,
          435.0943396226414
        ],
        [
          663.9245283018868,
          429.4339622641509
        ],
        [
          712.9811320754717,
          433.2075471698113
        ]
      ],

 注:当一张图片中被标记了多个区域,有一个区域不符合标准,则示做数据不合格

二,数据


1,文件路径:F:\代码测试\数据集

        无用数据路径:F:\代码测试\多余数据文件夹

 

 

 三,代码


import os
import json
import shutil


def move_to_error_folder(json_filepath, bmp_filepath, error_type, output_folder):
    error_folder = os.path.join(output_folder, error_type)
    os.makedirs(error_folder, exist_ok=True)
    target_path = os.path.join(error_folder, os.path.basename(json_filepath))
    shutil.move(json_filepath, target_path)
    if os.path.exists(bmp_filepath):
        shutil.move(bmp_filepath, os.path.join(error_folder, os.path.basename(bmp_filepath)))


def check_and_move_files(input_folder, output_folder):
    for root, dirs, files in os.walk(input_folder):
        for file in files:
            if file.endswith(".json"):
                json_filepath = os.path.join(root, file)
                bmp_filename = file.replace(".json", ".bmp")
                bmp_filepath = os.path.join(root, bmp_filename)

                with open(json_filepath, 'r', encoding='utf-8') as json_file:
                    data = json.load(json_file)
                    # shapes = data.get('shapes', [])
                    shapes = data['shapes']
                    if len(shapes) == 0:
                        json_file.close()
                        print(f"No detection regions in {json_filepath}")
                        move_to_error_folder(json_filepath, bmp_filepath, '没有检测区域', output_folder)
                        print("没有检测区域")

                    else:
                        for shape in shapes:
                            if isinstance(shape, dict):
                                label = shape.get('label')
                                points = shape.get('points')
                                if label is not None and len(points) <= 2:
                                    print(f"Invalid points in {json_filepath}")
                                    json_file.close()
                                    move_to_error_folder(json_filepath, bmp_filepath, 'points不正常', output_folder)
                                    print("points不正常")

                                elif not label:
                                    print(f"Invalid label in {json_filepath}")
                                    json_file.close()
                                    move_to_error_folder(json_filepath, bmp_filepath, 'label不正常', output_folder)
                                    print("label不正常")

                            else:
                                print("shape is null")
    print("完成")


# 设置输入文件夹路径和输出文件夹路径
input_folder = 'F:\代码测试\数据集'  # 替换为您的输入文件夹路径
output_folder = 'F:\代码测试\多余数据文件夹'  # 替换为您的输出文件夹路径

# 调用检查和移动函数
check_and_move_files(input_folder, output_folder)

 

 四,运行结果


1,有用的数据

        (1)从运行结果中我们可以看到,不符合要求的json文件有哪些,分别是什么类型的问题

图1

         (2)不符合要求的json文件以及对应的bmp图片已经移出了源文件夹

图2 

         (3)正确的json文件

图3

 2,无用的数据

        (1)在对于数据文件夹中已经自动生成了三个文件夹,用来放不同错误类型的数据

图4

        (2)没有检测区域:我们可以从json中看到 shapes 为空

 

 图5

 

 图6

        (3)points 不正常: 我们可以从json中看到 points 只有俩个点,无法组成一个区域

 图7

t

 图8 

    (3)label 不正常: 我们可以从json中看到 label 为空 

 图9

 图10

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值