#!/usr/bin/python
# -*- coding: utf-8 -*-
import xml.etree.ElementTree as ET
import os
LBAEL_ROOT = "E:/Python_WORKSPACE/Other_Code/xml文件解析/"
def process_xml(src_path,dataset):
"""
加载xml文件
解析源文件,获取<filename></filename>图像名称,以及标注框的上<xmin></xmin>和左<ymin></ymin>的坐标,并将右下方的坐标转换成宽度和高度
将以上数据构建成<dataset><name></name><comment></comment><images><image file='*.jpg'><box top='' left='' width='' height=''><label></label></box></image></images></dataset>的结构
如此,将<image file='*.jpg'><box top='' left='' width='' height=''/></image>信息从每张图像的.XML文件中提取出来添加到一个.XML文件中,并写入磁盘即可
"""
# 读取源xml文件
et = ET.parse(src_path)
# 获取第一个标签为"filename"的“直接”subelement
filename = et.find("filename")
picname = filename.text
#****************************************************************************************
#dataset = ET.parse(dataset0)
images = dataset.find("images")
image = ET.Element("image", file=picname)
images.append(image)
#****************************************************************************************
# #获取所有标签为"object"的“直接” subelement
for e in et.findall("object"):
name01 = e.find("name")
bndbox = e.find("bndbox")
xmin = bndbox.find("xmin")
ymin = bndbox.find("ymin")
xmax = bndbox.find("xmax")
ymax = bndbox.find("ymax")
#下面五行测试用
#print("*****************************************")
#print("xmin:"+xmin.text)
#print("xmax:"+xmax.text)
#print("ymin:"+ymin.text)
#print("ymax:"+ymax.text)
width = str(int(xmax.text)-int(xmin.text))
height = str(int(ymax.text)-int(ymin.text))
#下面五行测试用
#print("*****************************************")
#print("top:"+ymin.text)
#print("left:"+xmin.text)
#print("width:"+width)
#print("height:"+height)
box = ET.Element("box",top=ymin.text,left=xmin.text,width=width,height=height)
#下面两学习和行测试用
print("**************显示box.items()语句的作用*******************")
print(box.items())
label = ET.SubElement(box, "label")
label.text = name01.text
image.append(box)
if __name__ == "__main__":
# 创建root element
dataset = ET.Element("dataset")
# 直接通过SubElement类为root element添加多个子元素
name = ET.SubElement(dataset,"name")
name.text = "imglabdataset"
images0= ET.SubElement(dataset, "images")
# 以指定的root element创建一个ElementTree实例
datasetTree= ET.ElementTree(element=dataset)
raw_path = LBAEL_ROOT +"mobilenetssdXML2dlibXML/"+ "OldAnnotations/"
dst_path = LBAEL_ROOT +"mobilenetssdXML2dlibXML/"+ "NewAnnotations/"
if not os.path.exists(dst_path):
print("Create a new dir: " + dst_path)
os.mkdir(dst_path)
for xml_filename in os.listdir(raw_path):
process_xml(raw_path + xml_filename,datasetTree)
#以指定的root element创建一个ElementTree实例
#tree = ET.ElementTree(element=datasetTree)
for e in datasetTree.iter():
#下面两行学习和测试用
print("**************显示ET.tostring()语句的作用*******************")
print(ET.tostring(e))
datasetTree.write(dst_path+"Test_picture.xml",encoding="utf-8",xml_declaration=True)
VOC格式标签文件转换成Dlib格式标签文件
最新推荐文章于 2022-05-11 11:09:44 发布