参考大佬的代码做了修改
原文链接https://blog.csdn.net/weixin_44574507/article/details/118106839
VOC2012数据集中的xml文件构造
参考原文的代码中使用类似列表的方式进行查询,有可能出现某一xml文件中object元素顺序不同而导致的报错或是读取信息不准确的问题。
采用find方法直接找到元素标签进行读取
import glob
import pandas as pd
import xml.etree.ElementTree as ET
path='F:/DeepLearning/Training/data/VOC2012/Annotations'#xml文件位置
save_path='F:/DeepLearning/Training/data/'#csv保存位置
def xml_to_csv(path):
xml_list=[]
for xml_file in glob.glob(path+'/*.xml'):
tree = ET.parse(xml_file)
root=tree.getroot()
#root为文件根标签
for member in root.findall('object'):
#member为某一object标签
value=(
root.find('filename').text,
int(root.find('size').find('width').text),
int(root.find('size').find('height').text),
member.find('name').text,
#以object内为基础获取bndbox大小
int(float(member.find('bndbox').find('xmin').text)),
int(float(member.find('bndbox').find('ymin').text)),
int(float(member.find('bndbox').find('xmax').text)),
int(float(member.find('bndbox').find('ymax').text))
)
xml_list.append(value)
conlumn_name=['img_name','width','height','class','xmin','ymin','xmax','ymax']
xml_df=pd.DataFrame(xml_list,columns=conlumn_name)
return xml_df
xml_df=xml_to_csv(path)
xml_df.to_csv(save_path+'prepare.csv',index=None)
print("success")
完成对所有xml文件中标注信息的整合