label_txt_to_xml

txt标签文件转换成xml文件

#coding=utf-8
#makexml("txt所在文件夹","xml保存地址","图片所在地址")

from xml.dom.minidom import Document
import os
import cv2

def makexml(txtPath,xmlPath,picPath): #读取txt路径,xml保存路径,数据集图片所在路径
        dict = {'0': "person",#字典对类型进行转换
                '1': "car",
                '2': "bus",
                '3': "truck"}
        files = os.listdir(txtPath)
        for i, name in enumerate(files):
          xmlBuilder = Document()
          annotation = xmlBuilder.createElement("annotation")  # 创建annotation标签
          xmlBuilder.appendChild(annotation)
          txtFile=open(txtPath+name,'r',encoding='iso8859-1')
          txtList = txtFile.readlines()
          img = cv2.imread(picPath+name[0:-4]+".jpg")
          print(picPath+name[0:-4]+".jpg")
          Pheight,Pwidth,Pdepth=img.shape
          #for i in txtList:
          #oneline = i.strip().split(" ")

          folder = xmlBuilder.createElement("folder")#folder标签
          folderContent = xmlBuilder.createTextNode("VOC2007")
          folder.appendChild(folderContent)
          annotation.appendChild(folder)

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

          size = xmlBuilder.createElement("size")# size标签
          width = xmlBuilder.createElement("width")  # size子标签width
          widthContent = xmlBuilder.createTextNode(str(Pwidth))
          width.appendChild(widthContent)
          size.appendChild(width)
          height = xmlBuilder.createElement("height") # size子标签height
          heightContent = xmlBuilder.createTextNode(str(Pheight))
          height.appendChild(heightContent)
          size.appendChild(height)
          depth = xmlBuilder.createElement("depth") # size子标签depth
          depthContent = xmlBuilder.createTextNode(str(Pdepth))
          depth.appendChild(depthContent)
          size.appendChild(depth)
          annotation.appendChild(size)

          for i in txtList:
             oneline = i.strip().split(" ")
             object = xmlBuilder.createElement("object")
             picname = xmlBuilder.createElement("name")
             if oneline[0]>='4':
                continue
             nameContent = xmlBuilder.createTextNode(dict[oneline[0]])
             picname.appendChild(nameContent)
             object.appendChild(picname)
             pose = xmlBuilder.createElement("pose")
             poseContent = xmlBuilder.createTextNode("Unspecified")
             pose.appendChild(poseContent)
             object.appendChild(pose)
             truncated = xmlBuilder.createElement("truncated")
             truncatedContent = xmlBuilder.createTextNode("0")
             truncated.appendChild(truncatedContent)
             object.appendChild(truncated)
             difficult = xmlBuilder.createElement("difficult")
             difficultContent = xmlBuilder.createTextNode("0")
             difficult.appendChild(difficultContent)
             object.appendChild(difficult)
             bndbox = xmlBuilder.createElement("bndbox")
             xmin = xmlBuilder.createElement("xmin")
             mathData=int(((float(oneline[1]))*Pwidth+1)-(float(oneline[3]))*0.5*Pwidth)
             xminContent = xmlBuilder.createTextNode(str(mathData))
             if xminContent<0:
                xminContent = 0
             xmin.appendChild(xminContent)
             bndbox.appendChild(xmin)
             ymin = xmlBuilder.createElement("ymin")
             mathData = int(((float(oneline[2]))*Pheight+1)-(float(oneline[4]))*0.5*Pheight)
             yminContent = xmlBuilder.createTextNode(str(mathData))
             if yminContent<0:
                yminContent = 0
             ymin.appendChild(yminContent)
             bndbox.appendChild(ymin)
             xmax = xmlBuilder.createElement("xmax")
             mathData = int(((float(oneline[1]))*Pwidth+1)+(float(oneline[3]))*0.5*Pwidth)
             xmaxContent = xmlBuilder.createTextNode(str(mathData))
             if xmaxContent>Pwidth:
                xmaxContent = Pwidth
             xmax.appendChild(xmaxContent)
             bndbox.appendChild(xmax)
             ymax = xmlBuilder.createElement("ymax")
             mathData = int(((float(oneline[2]))*Pheight+1)+(float(oneline[4]))*0.5*Pheight)
             ymaxContent = xmlBuilder.createTextNode(str(mathData))
             if ymaxContent>Pheight:
                ymaxContent = Pheight
             ymax.appendChild(ymaxContent)
             bndbox.appendChild(ymax)
             object.appendChild(bndbox)

             annotation.appendChild(object)

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

if __name__ == "__main__":
	txt_path = '/root/zhangsong/huawei/data/zsmodify_data/txt/'
	xml_path = '/root/zhangsong/huawei/data/zsmodify_data/Annotations/'
	image_path = '/root/zhangsong/huawei/data/zsmodify_data/JPEGImages/'
	
	makexml(txt_path,xml_path,image_path)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值