查找数据标注中重合box标签框的Python脚本

本文介绍了一个Python脚本,用于检测图像中的重合框,特别关注100%重合和部分重合情况,存在误判问题,适用于大小相近的数据集。脚本通过遍历JSON文件中的box坐标进行比较,但对box大小和点顺序敏感。
摘要由CSDN通过智能技术生成

一.简介

** 这片文章是使用数值查重误判率较高,而另一篇文章使用比例查重规避了很多缺点。

背景:

        算法自动标注后的人为修改标签框;

        数据标完后の突发奇想,写完试了一下还真的查出了10-30章重合比较严重的框(总章数为3千);

        离谱的是真有百分百重合的box出现;

作用: 以json文件为引查找重合box并输出json文件名,几对重合则输出几遍文件名.

要点: 可以查找那种人们疏忽或难以发现的重合(例如100%重合并且正确的标签框在上层时);

           ps:当然也可以查找50%重合率的,这要看你设置的查找范围.

缺点:

           1.查找误判率较高;

           2.适用于图像大小相近的数据集;

           3.标框时点的顺序要对应,就比如说所有矩形的左上角是你点的第一个点,右下角是第二个;

           4.box超小时,误判率较大(详细请看实例4);

二.代码

import os
import json


#查找重合box///
folder_path = "/home/Spongebob/Documents/labels"  #指定json文件夹路径
size = 3  #设置查找范围 单位:像素
          #我也不知道这个值代表啥,反正每对框都以下面这种形式计算
          #注意不是两个框中心点的距离哦

#对数据集进行正向排序
list1 = os.listdir(folder_path)
list1.sort(key= lambda x:int(x[:-5])) #左闭右开的取值规则,将除了后缀'.json'的其他字符按数字正向排序

#遍历文件夹中的所有文件
for file_name in list1:
    if file_name.endswith('.json'):  #确保文件是JSON文件
        json_file_path = os.path.join(folder_path, file_name)

        #读取json文件
        with open(json_file_path, 'r') as file:
            label_data = json.load(file)
        k=[None]*500 #设置存储空间
        mus=len(label_data['shapes']) #判断"shapes"字段的长度,即一个json文件中box的数量
        for i in range(mus-1):
            for j in range (i+1,mus): 
                o=0 #存放差值的控制变量,就是作为存放差值的数组的下标使用
                zhi=0 #用于存放最终范围值
                enl=len(label_data["shapes"][j]["points"])
                if (len(label_data["shapes"][i]["points"])<=enl): #用于多边形,防止报错
                    enl=len(label_data["shapes"][i]["points"])
                
                for p in range(enl): #遍历一个box中的所有点
                    for q in range(2): #每个点有两个坐标
                        k[o]=label_data["shapes"][i]["points"][p][q]-label_data["shapes"][j]["points"][p][q]
                        o=o+1
                #以下为了缩小值,以便设置取值范围
                for q in range(enl):
                    zhi+=abs(k[q]) #坐标轴的距离差所以这里要取绝对值,因此查找范围size不能是负数
                
                if((zhi/enl)<size):
                    print(file_name)


三.应用

1.百分百重合:

2.包含试重合(这时我将查找范围调为30):

    查找范围与图像的大小有关

 

 3.多个重合输出多次(查找范围依然是30):

4.超小box(此时我将范围调至5)

放大后(可以注意到并没有重合):

但依旧被查了出来(2.json没了,这是因为超出了所给的范围值)

5.CV式语义分割类标签框

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值