数据标注中辅助查错的Python脚本

一,简介

它可以将标签框对应的图片扣下来并分类放入文件夹

二,代码

from PIL import Image
from tqdm import tqdm
import os
import json
import cv2


image_path = "/home/zzx/SpongeBob/images" #存放图片文件夹
json_path = "/home/zzx/SpongeBob/labels" #存放json的文件夹
label_class = "/home/zzx/SpongeBob/class/" #用于存放标签分类,注意字符串最后面的 ‘/’

#提取两文件夹内容至列表,使用特殊方式使两列表顺序相同
list1 = os.listdir(image_path)
for json_name in os.listdir(json_path):
    new_name = json_name.split(".")[0]
    os.rename(os.path.join(json_path, json_name), os.path.join(json_path, new_name + '.jpg'))#根据图片后缀更改,这里要注意所有图片都必须是同一种后缀

list2 = os.listdir(json_path)

for json_name in os.listdir(json_path):
    new_name = json_name.split(".")[0]
    os.rename(os.path.join(json_path, json_name), os.path.join(json_path, new_name + '.json'))

u=0

'''
  //循环变量简介
  im : 原始图像信息
  im1 : 截取后图像信息
  json_data : json文件信息
  o : 控制先创建x[],y[],然后依次写入值
  x[] : 存放多边形的所有x轴坐标
  y[] : 存放多边形的所有y轴坐标
  r : 控制在执行crop操作时才能进行保存
'''
a = len(list1)
pbar = tqdm(total = a ) #进度条
for image_name , json_name  in zip(list1,list2):#同时便利对应图片与json
    pbar.update(1)
    new_name = json_name.split(".")[0]
    json_name = new_name + '.json'
    im = Image.open(os.path.join(image_path,image_name))
    with open(os.path.join(json_path,json_name), 'r') as file:
        json_data = json.load(file)
    mus=len(json_data["shapes"])#判断"shapes"字段的长度(多少个标签框)
    u=u+mus
    for i in range(mus):#遍历每一个标签框
        o=0
        label=json_data["shapes"][i]["label"]#拷贝标签类并进行分类
        enl=len(json_data["shapes"][i]["points"]) #判断多少个坐标点
        for p in range(enl):
            if o==0:
                x = [json_data["shapes"][i]["points"][p][0]]*mus*enl
                y = [json_data["shapes"][i]["points"][p][1]]*mus*enl
            x[o]=json_data["shapes"][i]["points"][p][0]
            y[o]=json_data["shapes"][i]["points"][p][1]
            o=o+1
        #设置截取box框的面积范围
        if (max(x) - min(x)) * (max(y) - min(y))<= 9999999:
            im1 = im.crop((min(x), min(y), max(x), max(y)))
            r=0
        else:
            r=1

        if r==0:
            #分类保存
            if os.path.exists(label_class + label)==0:
                os.mkdir(label_class + label)
            im1.save(label_class + label + '/' + image_name.split(".")[0] + '_'+ str(i+1) + '.' + image_name.split(".")[1])

tqdm.write(str(u))#输出所有标签总数

'''
  //全局变量简介
  list1[] : 存放图片文件
  list2[] : 存放json文件
  u : 计算总标签数
  a : 进度条长度
'''

三,应用 

这是我的数据集中的其中一章

运行  (这里总共有24个标签,8个图片)

 结果

 

这样就可以看到哪些标签错啦,在某些场合下还是比较实用滴

命名结构分析:例1_5.jpg,其中的 '1' 表示所在的图片名,'_5'表示第5个标签(顺序是按json文件中来的) 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值