目标检测:把标注文件txt格式转换为xml格式

Posted 告白少年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了目标检测:把标注文件txt格式转换为xml格式相关的知识,希望对你有一定的参考价值。

txt_to_xml程序如下:

# -*- coding: utf-8 -*-
import os,shutil
import cv2
from lxml.etree import Element, SubElement, tostring
def txt_xml(img_path,img_name,txt_path,img_txt,xml_path,img_xml):
    #读取txt的信息
    clas=[]
    img=cv2.imread(os.path.join(img_path,img_name))
    imh, imw = img.shape[0:2]
    txt_img=os.path.join(txt_path,img_txt)
    with open(txt_img,"r") as f:
        next(f)
        for line in f.readlines():
            line = line.strip('\\n')
            list = line.split(" ")
            # print(list)
            clas.append(list)
    node_root = Element('annotation')
    node_folder = SubElement(node_root, 'folder')
    node_folder.text = '1'
    node_filename = SubElement(node_root, 'filename')
    #图像名称
    node_filename.text = img_name
    node_size = SubElement(node_root, 'size')
    node_width = SubElement(node_size, 'width')
    node_width.text = str(imw)
    node_height = SubElement(node_size, 'height')
    node_height.text = str(imh)
    node_depth = SubElement(node_size, 'depth')
    node_depth.text = '3'
    for i in range(len(clas)):
        node_object = SubElement(node_root, 'object')
        node_name = SubElement(node_object, 'name')
        node_name.text = str(clas[i][0])
        node_pose=SubElement(node_object, 'pose')
        node_pose.text="Unspecified"
        node_truncated=SubElement(node_object, 'truncated')
        node_truncated.text="truncated"
        node_difficult = SubElement(node_object, 'difficult')
        node_difficult.text = '0'
        node_bndbox = SubElement(node_object, 'bndbox')
        node_xmin = SubElement(node_bndbox, 'xmin')
        node_xmin.text = str(clas[i][1])
        node_ymin = SubElement(node_bndbox, 'ymin')
        node_ymin.text = str(clas[i][2])
        node_xmax = SubElement(node_bndbox, 'xmax')
        node_xmax.text = str(int(clas[i][1])+int(clas[i][3]))
        node_ymax = SubElement(node_bndbox, 'ymax')
        node_ymax.text = str(int(clas[i][2])+int(clas[i][4]))
    xml = tostring(node_root, pretty_print=True)  # 格式化显示,该换行的换行
    img_newxml = os.path.join(xml_path, img_xml)
    file_object = open(img_newxml, 'wb')
    file_object.write(xml)
    file_object.close()

if __name__ == "__main__":
    #图像文件夹所在位置
    img_path = r"C:\\Users\\An\\Desktop\\Exclusively-Dark-Image-Dataset-master\\Groundtruth\\img\\test"
    #标注文件夹所在位置
    txt_path=r"C:\\Users\\An\\Desktop\\Exclusively-Dark-Image-Dataset-master\\Groundtruth\\ann\\test"
    #txt转化成xml格式后存放的文件夹
    xml_path=r"C:\\Users\\An\\Desktop\\Exclusively-Dark-Image-Dataset-master\\xml"
    for img_name in os.listdir(img_path):
        print(img_name)
        img_xml=img_name.split(".")[0]+".xml"
        img_txt=img_name+".txt"
        txt_xml(img_path, img_name, txt_path, img_txt,xml_path, img_xml)

1.图像和标注文件对应关系:

2.标注文件的格式如下:

3.生成的xml文件格式如下:


4.图像用labelImg打开的结果:

以上是关于目标检测:把标注文件txt格式转换为xml格式的主要内容,如果未能解决你的问题,请参考以下文章

[数据集][VOC][目标检测]输电线异物数据集目标检测可用yolo训练-4165张介绍

生成VOC2007标注格式

[数据集][VOC][目标检测]河道垃圾水面漂浮物数据集目标检测可用yolo训练-1304张介绍

[数据集][VOC][目标检测]翻越栏杆翻越防护栏数据集目标检测可用yolo训练-1035张介绍

labelimg标注的VOC格式标签xml文件和yolo格式标签txt文件相互转换

[深度学习][数据集][目标检测]工程车辆数据集16881张15种类别车辆介绍