目标检测数据集格式转换:txt格式转换为xml格式(以VisDrone数据集为例)

1.准备好两个文件夹

VisDroneTxt文件夹里面装的是原图片以及txt格式的标签

VisDroneVoc里面的labels文件夹是目标文件夹,用来装转换之后的xml格式标签

目标检测数据集格式转换:txt格式转换为xml格式(以VisDrone数据集为例)_第1张图片

2.给出原转换程序

# .txt-->.xml
# ! /usr/bin/python
# -*- coding:UTF-8 -*-
import os
import cv2


def txt_to_xml(txt_path, img_path, xml_path):
    # 1.字典对标签中的类别进行转换
    dict = {'0': "organoid",
            '1': "car",
            '2': "bus",
            '3': "ufo",
            '4': "robot",
            '5': "virus",
            '6': "trunk",
            '7': "plash",
            '8': "biycle"}
    # 2.找到txt标签文件夹
    files = os.listdir(txt_path)
    # 用于存储 "老图"
    pre_img_name = ''
    # 3.遍历文件夹
    for i, name in enumerate(files):
        # 许多人文件夹里有该文件,默认的也删不掉,那就直接pass
        if name == "desktop.ini":
            continue
        print(name)
        # 4.打开txt
        txtFile = open(txt_path + name)
        # 读取所有内容
        txtList = txtFile.readlines()
        # 读取图片名称
        img_name = name.split(".")[0]
        pic = cv2.imread(img_path + img_name + ".jpg")
        # 获取图像大小信息
        Pheight, Pwidth, Pdepth = pic.shape
        # 5.遍历txt文件中每行内容
        for row in txtList:
            # 按' '分割txt的一行的内容
            oneline = row.strip().split(" ")
            # 遇到的是一张新图片
            if img_name != pre_img_name:
                # 6.新建xml文件
                xml_file = open((xml_path + img_name + '.xml'), 'w')
                xml_file.write('\n')
                xml_file.write('    VOC2007\n')
                xml_file.write('    ' + img_name + '.jpg' + '\n')
                xml_file.write('\n')
                xml_file.write('orgaquant\n')
                xml_file.write('organoids\n')
                xml_file.write('\n')
                xml_file.write('    \n')
                xml_file.write('        ' + str(Pwidth) + '\n')
                xml_file.write('        ' + str(Pheight) + '\n')
                xml_file.write('        ' + str(Pdepth) + '\n')
                xml_file.write('    \n')
                xml_file.write('    \n')
                xml_file.write('' + dict[oneline[0]] + '\n')
                xml_file.write('        \n')
                xml_file.write('            ' + str(
                    int(((float(oneline[1])) * Pwidth + 1) - (float(oneline[3])) * 0.5 * Pwidth)) + '\n')
                xml_file.write('            ' + str(
                    int(((float(oneline[2])) * Pheight + 1) - (float(oneline[4])) * 0.5 * Pheight)) + '\n')
                xml_file.write('            ' + str(
                    int(((float(oneline[1])) * Pwidth + 1) + (float(oneline[3])) * 0.5 * Pwidth)) + '\n')
                xml_file.write('            ' + str(
                    int(((float(oneline[2])) * Pheight + 1) + (float(oneline[4])) * 0.5 * Pheight)) + '\n')
                xml_file.write('        \n')
                xml_file.write('    \n')
                xml_file.close()
                pre_img_name = img_name  # 将其设为"老"图
            else:  # 不是新图而是"老图"
                # 7.同一张图片,只需要追加写入object
                xml_file = open((xml_path + img_name + '.xml'), 'a')
                xml_file.write('    \n')
                xml_file.write('' + dict[oneline[0]] + '\n')
                '''  按需添加这里和上面
                xml_file.write('        Unspecified\n')
                xml_file.write('        0\n')
                xml_file.write('        0\n')
                '''
                xml_file.write('        \n')
                xml_file.write('            ' + str(
                    int(((float(oneline[1])) * Pwidth + 1) - (float(oneline[3])) * 0.5 * Pwidth)) + '\n')
                xml_file.write('            ' + str(
                    int(((float(oneline[2])) * Pheight + 1) - (float(oneline[4])) * 0.5 * Pheight)) + '\n')
                xml_file.write('            ' + str(
                    int(((float(oneline[1])) * Pwidth + 1) + (float(oneline[3])) * 0.5 * Pwidth)) + '\n')
                xml_file.write('            ' + str(
                    int(((float(oneline[2])) * Pheight + 1) + (float(oneline[4])) * 0.5 * Pheight)) + '\n')
                xml_file.write('        \n')
                xml_file.write('    \n')
                xml_file.close()

        # 8.读完txt文件最后写入
        xml_file1 = open((xml_path + pre_img_name + '.xml'), 'a')
        xml_file1.write('')
        xml_file1.close()
    print("Done !")


# 修改成自己的文件夹 注意文件夹最后要加上/
txt_to_xml("txt_path/", "img_path/", "xml_path/")

3.需要修改的地方

3.1 修改标签类别:

目标检测数据集格式转换:txt格式转换为xml格式(以VisDrone数据集为例)_第2张图片

修改之后

目标检测数据集格式转换:txt格式转换为xml格式(以VisDrone数据集为例)_第3张图片

3.2将路径修改成自己文件夹的路径

目标检测数据集格式转换:txt格式转换为xml格式(以VisDrone数据集为例)_第4张图片

3.3 修改之后的完整代码

# .txt-->.xml
# ! /usr/bin/python
# -*- coding:UTF-8 -*-
import os
import cv2


def txt_to_xml(txt_path, img_path, xml_path):
    # 1.字典对标签中的类别进行转换
    dict = {'0': "pedestrian",
            '1': "people",
            '2': "bicycle",
            '3': "car",
            '4': "van",
            '5': "truck",
            '6': "tricycle",
            '7': "awning-tricycle",
            '8': "bus",
            '9': "motor"}
    # 2.找到txt标签文件夹
    files = os.listdir(txt_path)
    # 用于存储 "老图"
    pre_img_name = ''
    # 3.遍历文件夹
    for i, name in enumerate(files):
        # 许多人文件夹里有该文件,默认的也删不掉,那就直接pass
        if name == "desktop.ini":
            continue
        print(name)
        # 4.打开txt
        txtFile = open(txt_path + name)
        # 读取所有内容
        txtList = txtFile.readlines()
        # 读取图片名称
        img_name = name.split(".")[0]
        pic = cv2.imread(img_path + img_name + ".jpg")
        # 获取图像大小信息
        Pheight, Pwidth, Pdepth = pic.shape
        # 5.遍历txt文件中每行内容
        for row in txtList:
            # 按' '分割txt的一行的内容
            oneline = row.strip().split(" ")
            # 遇到的是一张新图片
            if img_name != pre_img_name:
                # 6.新建xml文件
                xml_file = open((xml_path + img_name + '.xml'), 'w')
                xml_file.write('\n')
                xml_file.write('    VOC2007\n')
                xml_file.write('    ' + img_name + '.jpg' + '\n')
                xml_file.write('\n')
                xml_file.write('orgaquant\n')
                xml_file.write('organoids\n')
                xml_file.write('\n')
                xml_file.write('    \n')
                xml_file.write('        ' + str(Pwidth) + '\n')
                xml_file.write('        ' + str(Pheight) + '\n')
                xml_file.write('        ' + str(Pdepth) + '\n')
                xml_file.write('    \n')
                xml_file.write('    \n')
                xml_file.write('' + dict[oneline[0]] + '\n')
                xml_file.write('        \n')
                xml_file.write('            ' + str(
                    int(((float(oneline[1])) * Pwidth + 1) - (float(oneline[3])) * 0.5 * Pwidth)) + '\n')
                xml_file.write('            ' + str(
                    int(((float(oneline[2])) * Pheight + 1) - (float(oneline[4])) * 0.5 * Pheight)) + '\n')
                xml_file.write('            ' + str(
                    int(((float(oneline[1])) * Pwidth + 1) + (float(oneline[3])) * 0.5 * Pwidth)) + '\n')
                xml_file.write('            ' + str(
                    int(((float(oneline[2])) * Pheight + 1) + (float(oneline[4])) * 0.5 * Pheight)) + '\n')
                xml_file.write('        \n')
                xml_file.write('    \n')
                xml_file.close()
                pre_img_name = img_name  # 将其设为"老"图
            else:  # 不是新图而是"老图"
                # 7.同一张图片,只需要追加写入object
                xml_file = open((xml_path + img_name + '.xml'), 'a')
                xml_file.write('    \n')
                xml_file.write('' + dict[oneline[0]] + '\n')
                '''  按需添加这里和上面
                xml_file.write('        Unspecified\n')
                xml_file.write('        0\n')
                xml_file.write('        0\n')
                '''
                xml_file.write('        \n')
                xml_file.write('            ' + str(
                    int(((float(oneline[1])) * Pwidth + 1) - (float(oneline[3])) * 0.5 * Pwidth)) + '\n')
                xml_file.write('            ' + str(
                    int(((float(oneline[2])) * Pheight + 1) - (float(oneline[4])) * 0.5 * Pheight)) + '\n')
                xml_file.write('            ' + str(
                    int(((float(oneline[1])) * Pwidth + 1) + (float(oneline[3])) * 0.5 * Pwidth)) + '\n')
                xml_file.write('            ' + str(
                    int(((float(oneline[2])) * Pheight + 1) + (float(oneline[4])) * 0.5 * Pheight)) + '\n')
                xml_file.write('        \n')
                xml_file.write('    \n')
                xml_file.close()

        # 8.读完txt文件最后写入
        xml_file1 = open((xml_path + pre_img_name + '.xml'), 'a')
        xml_file1.write('')
        xml_file1.close()
    print("Done !")


# 修改成自己的文件夹 注意文件夹最后要加上/
txt_to_xml("VisDroneTxt/labels/", "VisDroneTxt/images/", "VisDroneXml/labels/")

4.运行.py文件

目标检测数据集格式转换:txt格式转换为xml格式(以VisDrone数据集为例)_第5张图片

5.转换成功

目标检测数据集格式转换:txt格式转换为xml格式(以VisDrone数据集为例)_第6张图片

到此为止,将Visdrone数据集的标签格式从txt转换为xml。

你可能感兴趣的:(xml,YOLO,python,深度学习,目标检测,人工智能,计算机视觉)