很多时候我们需要将voc标准的格式转为我们自己代码用的格式,所以如何转换呢,我们知道原始的voc数据label都是xml格式的,这就需要我们需要解析xml,解析后再整理成我们需要的格式就好了
#!/usr/bin/python
# -*- coding: UTF-8 -*-
try:
    import xml.etree.cElementTree as ET  #解析xml的c语言版的模块
except ImportError:
    import xml.etree.ElementTree as ET
##get object annotation bndbox loc start 
def parse(annotation_path):#AnotPath VOC标注文件路径
    tree = ET.ElementTree(file=annotation_path)  #打开文件,解析成一棵树型结构
    root = tree.getroot()#获取树型结构的根
    obj_set=root.findall('object')#找到文件中所有含有object关键字的地方,这些地方含有标注目标
    obj_bndbox_set={} #以目标类别为关键字,目标框为值组成的字典结构
    for obj in obj_set:
        obj_name=obj.find('name').text
        bndbox=obj.find('bndbox')
        x1 = int(bndbox.find('xmin').text)#-1 #-1是因为程序是按0作为起始位置的
        y1 = int(bndbox.find('ymin').text)#-1
        x2 = int(bndbox.find('xmax').text)#-1
        y2 = int(bndbox.find('ymax').text)#-1
        bndbox_loc=[x1,y1,x2,y2]
        if obj_name in obj_bndbox_set:
            obj_bndbox_set[obj_name].append(bndbox_loc)#如果字典结构中含有这个类别了,那么这个目标框要追加到其值的末尾
        else:
            obj_bndbox_set[obj_name]=[bndbox_loc]#如果字典结构中没有这个类别,那么这个目标框就直接赋值给其值吧
    return obj_bndbox_set