目录
一,介绍
在整理数据时,我的每一张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