VOC格式标签文件转换成Dlib格式标签文件

#!/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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值