检查XML文件内(有几个label)的数量
对于手工标注的数据集,在标注完成后需检查图片里object的数量,可能出现漏标(每张图片的label有3个,而有的标签文件里object只有1或2个),空标(自创的词哈哈,XML文件里一个object都没有,标完图片后觉得图片太模糊或其他原因将框框删除,但已经生成了XML文件),检查object有利于判断数据标注的情况,进而采取下一步措施。
将SrcDir修改为XML文件所在路径并运行即可,具体代码如下:
import os
import xml.dom.minidom
def ReadXml(FilePath):
if os.path.exists(FilePath) is False:
return None
dom = xml.dom.minidom.parse(FilePath)
root_ = dom.documentElement
object_ = root_.getElementsByTagName('object')
info = []
for object_1 in object_:
name = object_1.getElementsByTagName("name")[0].firstChild.data
bndbox = object_1.getElementsByTagName("bndbox")[0]
xmin = int(bndbox.getElementsByTagName("xmin")[0].firstChild.data)
ymin = int(bndbox.getElementsByTagName("ymin")[0].firstChild.data)
xmax = int(bndbox.getElementsByTagName("xmax")[0].firstChild.data)
ymax = int(bndbox.getElementsByTagName("ymax")[0].firstChild.data)
info.append([xmin, ymin, xmax, ymax, name])
return info
SrcDir = r"I:\ImgOutput\BackUp\AmericaRect\SmallLabel"
LabelNum = {}
LabelNumLists = []
for root, dirs, files in os.walk(SrcDir):
for file in files:
if file[-1] == 'l':
locations = ReadXml(root + "\\" + file)
if len(locations) not in LabelNum:
LabelNum[len(locations)] = 1
LabelNumList = [file]
LabelNumLists.append(LabelNumList)
else:
LabelNum[len(locations)] += 1
LabelNumLists[list(LabelNum).index(len(locations))].append(file)
for i, key in enumerate(LabelNum.keys()):
print("----------------------------%d----------------------------" % key)
print(LabelNumLists[i])
print(LabelNum)
运行结果如下:
可以看到含有1个obje的XML文件有5980个,4个obje的XML文件有1个。