txt 转 xml 【无标题】

from xml.dom.minidom import Document
import os
import cv2
def makexml(txtPath, xmlPath, picPath): # txt所在文件夹路径,xml文件保存路径,图片所在文件夹路径
“”"此函数用于将yolo格式txt标注文件转换为voc格式xml标注文件

在自己的标注图片文件夹下建三个子文件夹,分别命名为picture、txt、xml
"""
# 本例中的标签有5个类,按照自己的类别进行更改
dic = {'0': "dog",  # 创建字典用来对类型进行转换
       '1': "person",  # 此处的字典要与自己的classes.txt文件中的类对应,且顺序要一致
       '2': "car",
       '3': "bus",
       '4': "bicycle"
       }
files = os.listdir(txtPath)
for i, name in enumerate(files):
    xmlBuilder = Document()
    annotation = xmlBuilder.createElement("annotation")  # 创建annotation标签
    xmlBuilder.appendChild(annotation)
    txtFile = open(txtPath + name)
    txtList = txtFile.readlines()
    img = cv2.imread(picPath + name[0:-4] + ".jpg")
    Pheight, Pwidth, Pdepth = img.shape

    folder = xmlBuilder.createElement("folder")  # folder标签
    foldercontent = xmlBuilder.createTextNode("my_person")
    folder.appendChild(foldercontent)
    annotation.appendChild(folder)  # folder标签结束

    filename = xmlBuilder.createElement("filename")  # filename标签
    filenamecontent = xmlBuilder.createTextNode(name[0:-4] + ".jpg")
    filename.appendChild(filenamecontent)
    annotation.appendChild(filename)  # filename标签结束

    path = xmlBuilder.createElement("path")  # path标签
    pathcontent = xmlBuilder.createTextNode("G:\darknet\My_Persons\my_person\\"+name[0:-4] + ".jpg")
    path.appendChild(pathcontent)
    annotation.appendChild(path)  # path标签结束

    source = xmlBuilder.createElement("source")  # source标签
    database = xmlBuilder.createElement("database")  # source子标签database
    databasecontent = xmlBuilder.createTextNode("Unknown")
    database.appendChild(databasecontent)
    source.appendChild(database)  # source子标签database结束
    annotation.appendChild(source)  # source标签结束

    size = xmlBuilder.createElement("size")  # size标签
    width = xmlBuilder.createElement("width")  # size子标签width
    widthcontent = xmlBuilder.createTextNode(str(Pwidth))
    width.appendChild(widthcontent)
    size.appendChild(width)  # size子标签width结束

    height = xmlBuilder.createElement("height")  # size子标签height
    heightcontent = xmlBuilder.createTextNode(str(Pheight))
    height.appendChild(heightcontent)
    size.appendChild(height)  # size子标签height结束

    depth = xmlBuilder.createElement("depth")  # size子标签depth
    depthcontent = xmlBuilder.createTextNode(str(Pdepth))
    depth.appendChild(depthcontent)
    size.appendChild(depth)  # size子标签depth结束

    annotation.appendChild(size)  # size标签结束

    for j in txtList:
        oneline = j.strip().split(" ")
        object = xmlBuilder.createElement("object")  # object 标签
        picname = xmlBuilder.createElement("name")  # name标签
        namecontent = xmlBuilder.createTextNode(dic[oneline[0]])
        picname.appendChild(namecontent)
        object.appendChild(picname)  # name标签结束

        pose = xmlBuilder.createElement("pose")  # pose标签
        posecontent = xmlBuilder.createTextNode("Unspecified")
        pose.appendChild(posecontent)
        object.appendChild(pose)  # pose标签结束

        truncated = xmlBuilder.createElement("truncated")  # truncated标签
        truncatedContent = xmlBuilder.createTextNode("0")
        truncated.appendChild(truncatedContent)
        object.appendChild(truncated)  # truncated标签结束

        difficult = xmlBuilder.createElement("difficult")  # difficult标签
        difficultcontent = xmlBuilder.createTextNode("0")
        difficult.appendChild(difficultcontent)
        object.appendChild(difficult)  # difficult标签结束

        bndbox = xmlBuilder.createElement("bndbox")  # bndbox标签
        xmin = xmlBuilder.createElement("xmin")  # xmin标签
        mathData = int(((float(oneline[1])) * Pwidth ) - (float(oneline[3])) * 0.5 * Pwidth)
        xminContent = xmlBuilder.createTextNode(str(mathData))
        xmin.appendChild(xminContent)
        bndbox.appendChild(xmin)  # xmin标签结束

        ymin = xmlBuilder.createElement("ymin")  # ymin标签
        mathData = int(((float(oneline[2])) * Pheight) - (float(oneline[4])) * 0.5 * Pheight)
        yminContent = xmlBuilder.createTextNode(str(mathData))
        ymin.appendChild(yminContent)
        bndbox.appendChild(ymin)  # ymin标签结束

        xmax = xmlBuilder.createElement("xmax")  # xmax标签
        mathData = int(((float(oneline[1])) * Pwidth ) + (float(oneline[3])) * 0.5 * Pwidth)
        xmaxContent = xmlBuilder.createTextNode(str(mathData))
        xmax.appendChild(xmaxContent)
        bndbox.appendChild(xmax)  # xmax标签结束

        ymax = xmlBuilder.createElement("ymax")  # ymax标签
        mathData = int(((float(oneline[2])) * Pheight + 1) + (float(oneline[4])) * 0.5 * Pheight)
        ymaxContent = xmlBuilder.createTextNode(str(mathData))
        ymax.appendChild(ymaxContent)
        bndbox.appendChild(ymax)  # ymax标签结束

        object.appendChild(bndbox)  # bndbox标签结束

        annotation.appendChild(object)  # object标签结束

    f = open(xmlPath + name[0:-4] + ".xml", 'w')
    xmlBuilder.writexml(f, indent='', newl='\n', addindent='\t', encoding='utf-8')
    f.close()

makexml(“D:/1-0606/qi/”,“D:/1-0606/xml/”,“D:/1-0606/tupian1/”)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值