目录
简介
VOC(PASCAL Visual Object Classes)是一个经典的计算机视觉数据集,广泛用于物体检测任务。其标注文件通常采用 XML 格式,包含图像中的物体类别、边界框坐标等信息。本教程将通过一个示例代码,展示如何使用 Python 的 xml.dom.minidom 模块读取 VOC 数据集的 XML 文件,并提取所有唯一的标签类别。
效果展示
指定标注文件路径
annotation_path 是一个字符串,表示 VOC 数据集 XML 标注文件所在的文件夹路径。
annotation_path = r"E:\AIrailway\100_raind\voc_labels_enhance"
检查 XML 文件完整性
for names in annotation_names:
try:
xmldom.parse(names)
except Exception as e:
print(f"Error in {names}: {e}")
完整代码
import xml.dom.minidom as xmldom
import os
#voc数据集获取所有标签的所有类别数"
annotation_path=r"E:\AIrailway\100_raind\voc_labels_enhance"
annotation_names=[os.path.join(annotation_path,i) for i in os.listdir(annotation_path)]
for names in annotation_names:
try:
xmldom.parse(names)
except Exception as e:
print(f"Error in {names}: {e}")
labels = list()
for names in annotation_names:
xmlfilepath = names
domobj = xmldom.parse(xmlfilepath)
# 得到元素对象
elementobj = domobj.documentElement
#获得子标签
subElementObj = elementobj.getElementsByTagName("object")
for s in subElementObj:
label=s.getElementsByTagName("name")[0].firstChild.data
#print(label)
if label not in labels:
labels.append(label)
label_counts = {}
for names in annotation_names:
domobj = xmldom.parse(names)
elementobj = domobj.documentElement
subElementObj = elementobj.getElementsByTagName("object")
for s in subElementObj:
label = s.getElementsByTagName("name")[0].firstChild.data
label_counts[label] = label_counts.get(label, 0) + 1
print(label_counts)
print(labels)