XML按照树型结构组织,
每个元素包含如下属性:
由于voc2007和2012的存储形式稍有不同,所以看其他的代码的时候有点方,自己更改了下。
在解析voc2007和2012的过程如下:
def parse_xml(xml_file): #解析xml文件
"""parse xml_file
Args:
xml_file: the input xml file path
Returns:
image_path: string
labels: list of [xmin, ymin, xmax, ymax, class]
"""
tree = ET.parse(xml_file)
root = tree.getroot()
image_path = ''
labels = []
for item in root:
if item.tag == 'filename':
image_path = os.path.join(DATA_PATH, 'VOC2012/JPEGImages', item.text)
elif item.tag == 'object':
for tmp in item:
if tmp.tag == 'name':
obj_name = tmp.text #返回中间的数
obj_num = classes_num[obj_name]
elif tmp.tag == 'bndbox':
xmin = int(tmp[0].text) #返回中间的数
ymin = int(tmp[1].text)
xmax = int(tmp[2].text)
ymax = int(tmp[3].text)
labels.append([xmin, ymin, xmax, ymax, obj_num])
return image_path, labels