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


    1.准备好两个文件夹

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

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

    2.给出原转换程序

    1. # .txt-->.xml
    2. # ! /usr/bin/python
    3. # -*- coding:UTF-8 -*-
    4. import os
    5. import cv2
    6. def txt_to_xml(txt_path, img_path, xml_path):
    7. # 1.字典对标签中的类别进行转换
    8. dict = {'0': "organoid",
    9. '1': "car",
    10. '2': "bus",
    11. '3': "ufo",
    12. '4': "robot",
    13. '5': "virus",
    14. '6': "trunk",
    15. '7': "plash",
    16. '8': "biycle"}
    17. # 2.找到txt标签文件夹
    18. files = os.listdir(txt_path)
    19. # 用于存储 "老图"
    20. pre_img_name = ''
    21. # 3.遍历文件夹
    22. for i, name in enumerate(files):
    23. # 许多人文件夹里有该文件,默认的也删不掉,那就直接pass
    24. if name == "desktop.ini":
    25. continue
    26. print(name)
    27. # 4.打开txt
    28. txtFile = open(txt_path + name)
    29. # 读取所有内容
    30. txtList = txtFile.readlines()
    31. # 读取图片名称
    32. img_name = name.split(".")[0]
    33. pic = cv2.imread(img_path + img_name + ".jpg")
    34. # 获取图像大小信息
    35. Pheight, Pwidth, Pdepth = pic.shape
    36. # 5.遍历txt文件中每行内容
    37. for row in txtList:
    38. # 按' '分割txt的一行的内容
    39. oneline = row.strip().split(" ")
    40. # 遇到的是一张新图片
    41. if img_name != pre_img_name:
    42. # 6.新建xml文件
    43. xml_file = open((xml_path + img_name + '.xml'), 'w')
    44. xml_file.write('\n')
    45. xml_file.write(' VOC2007\n')
    46. xml_file.write(' ' + img_name + '.jpg' + '\n')
    47. xml_file.write('\n')
    48. xml_file.write('orgaquant\n')
    49. xml_file.write('organoids\n')
    50. xml_file.write('\n')
    51. xml_file.write(' \n')
    52. xml_file.write(' ' + str(Pwidth) + '\n')
    53. xml_file.write(' ' + str(Pheight) + '\n')
    54. xml_file.write(' ' + str(Pdepth) + '\n')
    55. xml_file.write(' \n')
    56. xml_file.write(' \n')
    57. xml_file.write('' + dict[oneline[0]] + '\n')
    58. xml_file.write(' \n')
    59. xml_file.write(' ' + str(
    60. int(((float(oneline[1])) * Pwidth + 1) - (float(oneline[3])) * 0.5 * Pwidth)) + '\n')
    61. xml_file.write(' ' + str(
    62. int(((float(oneline[2])) * Pheight + 1) - (float(oneline[4])) * 0.5 * Pheight)) + '\n')
    63. xml_file.write(' ' + str(
    64. int(((float(oneline[1])) * Pwidth + 1) + (float(oneline[3])) * 0.5 * Pwidth)) + '\n')
    65. xml_file.write(' ' + str(
    66. int(((float(oneline[2])) * Pheight + 1) + (float(oneline[4])) * 0.5 * Pheight)) + '\n')
    67. xml_file.write(' \n')
    68. xml_file.write('
    69. \n'
      )
    70. xml_file.close()
    71. pre_img_name = img_name # 将其设为"老"图
    72. else: # 不是新图而是"老图"
    73. # 7.同一张图片,只需要追加写入object
    74. xml_file = open((xml_path + img_name + '.xml'), 'a')
    75. xml_file.write(' \n')
    76. xml_file.write('' + dict[oneline[0]] + '\n')
    77. ''' 按需添加这里和上面
    78. xml_file.write(' Unspecified\n')
    79. xml_file.write(' 0\n')
    80. xml_file.write(' 0\n')
    81. '''
    82. xml_file.write(' \n')
    83. xml_file.write(' ' + str(
    84. int(((float(oneline[1])) * Pwidth + 1) - (float(oneline[3])) * 0.5 * Pwidth)) + '\n')
    85. xml_file.write(' ' + str(
    86. int(((float(oneline[2])) * Pheight + 1) - (float(oneline[4])) * 0.5 * Pheight)) + '\n')
    87. xml_file.write(' ' + str(
    88. int(((float(oneline[1])) * Pwidth + 1) + (float(oneline[3])) * 0.5 * Pwidth)) + '\n')
    89. xml_file.write(' ' + str(
    90. int(((float(oneline[2])) * Pheight + 1) + (float(oneline[4])) * 0.5 * Pheight)) + '\n')
    91. xml_file.write(' \n')
    92. xml_file.write('
    93. \n'
      )
    94. xml_file.close()
    95. # 8.读完txt文件最后写入
    96. xml_file1 = open((xml_path + pre_img_name + '.xml'), 'a')
    97. xml_file1.write('')
    98. xml_file1.close()
    99. print("Done !")
    100. # 修改成自己的文件夹 注意文件夹最后要加上/
    101. txt_to_xml("txt_path/", "img_path/", "xml_path/")

    3.需要修改的地方

    3.1 修改标签类别:

    修改之后

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

    3.3 修改之后的完整代码

    1. # .txt-->.xml
    2. # ! /usr/bin/python
    3. # -*- coding:UTF-8 -*-
    4. import os
    5. import cv2
    6. def txt_to_xml(txt_path, img_path, xml_path):
    7. # 1.字典对标签中的类别进行转换
    8. dict = {'0': "pedestrian",
    9. '1': "people",
    10. '2': "bicycle",
    11. '3': "car",
    12. '4': "van",
    13. '5': "truck",
    14. '6': "tricycle",
    15. '7': "awning-tricycle",
    16. '8': "bus",
    17. '9': "motor"}
    18. # 2.找到txt标签文件夹
    19. files = os.listdir(txt_path)
    20. # 用于存储 "老图"
    21. pre_img_name = ''
    22. # 3.遍历文件夹
    23. for i, name in enumerate(files):
    24. # 许多人文件夹里有该文件,默认的也删不掉,那就直接pass
    25. if name == "desktop.ini":
    26. continue
    27. print(name)
    28. # 4.打开txt
    29. txtFile = open(txt_path + name)
    30. # 读取所有内容
    31. txtList = txtFile.readlines()
    32. # 读取图片名称
    33. img_name = name.split(".")[0]
    34. pic = cv2.imread(img_path + img_name + ".jpg")
    35. # 获取图像大小信息
    36. Pheight, Pwidth, Pdepth = pic.shape
    37. # 5.遍历txt文件中每行内容
    38. for row in txtList:
    39. # 按' '分割txt的一行的内容
    40. oneline = row.strip().split(" ")
    41. # 遇到的是一张新图片
    42. if img_name != pre_img_name:
    43. # 6.新建xml文件
    44. xml_file = open((xml_path + img_name + '.xml'), 'w')
    45. xml_file.write('\n')
    46. xml_file.write(' VOC2007\n')
    47. xml_file.write(' ' + img_name + '.jpg' + '\n')
    48. xml_file.write('\n')
    49. xml_file.write('orgaquant\n')
    50. xml_file.write('organoids\n')
    51. xml_file.write('\n')
    52. xml_file.write(' \n')
    53. xml_file.write(' ' + str(Pwidth) + '\n')
    54. xml_file.write(' ' + str(Pheight) + '\n')
    55. xml_file.write(' ' + str(Pdepth) + '\n')
    56. xml_file.write(' \n')
    57. xml_file.write(' \n')
    58. xml_file.write('' + dict[oneline[0]] + '\n')
    59. xml_file.write(' \n')
    60. xml_file.write(' ' + str(
    61. int(((float(oneline[1])) * Pwidth + 1) - (float(oneline[3])) * 0.5 * Pwidth)) + '\n')
    62. xml_file.write(' ' + str(
    63. int(((float(oneline[2])) * Pheight + 1) - (float(oneline[4])) * 0.5 * Pheight)) + '\n')
    64. xml_file.write(' ' + str(
    65. int(((float(oneline[1])) * Pwidth + 1) + (float(oneline[3])) * 0.5 * Pwidth)) + '\n')
    66. xml_file.write(' ' + str(
    67. int(((float(oneline[2])) * Pheight + 1) + (float(oneline[4])) * 0.5 * Pheight)) + '\n')
    68. xml_file.write(' \n')
    69. xml_file.write('
    70. \n'
      )
    71. xml_file.close()
    72. pre_img_name = img_name # 将其设为"老"图
    73. else: # 不是新图而是"老图"
    74. # 7.同一张图片,只需要追加写入object
    75. xml_file = open((xml_path + img_name + '.xml'), 'a')
    76. xml_file.write(' \n')
    77. xml_file.write('' + dict[oneline[0]] + '\n')
    78. ''' 按需添加这里和上面
    79. xml_file.write(' Unspecified\n')
    80. xml_file.write(' 0\n')
    81. xml_file.write(' 0\n')
    82. '''
    83. xml_file.write(' \n')
    84. xml_file.write(' ' + str(
    85. int(((float(oneline[1])) * Pwidth + 1) - (float(oneline[3])) * 0.5 * Pwidth)) + '\n')
    86. xml_file.write(' ' + str(
    87. int(((float(oneline[2])) * Pheight + 1) - (float(oneline[4])) * 0.5 * Pheight)) + '\n')
    88. xml_file.write(' ' + str(
    89. int(((float(oneline[1])) * Pwidth + 1) + (float(oneline[3])) * 0.5 * Pwidth)) + '\n')
    90. xml_file.write(' ' + str(
    91. int(((float(oneline[2])) * Pheight + 1) + (float(oneline[4])) * 0.5 * Pheight)) + '\n')
    92. xml_file.write(' \n')
    93. xml_file.write('
    94. \n'
      )
    95. xml_file.close()
    96. # 8.读完txt文件最后写入
    97. xml_file1 = open((xml_path + pre_img_name + '.xml'), 'a')
    98. xml_file1.write('')
    99. xml_file1.close()
    100. print("Done !")
    101. # 修改成自己的文件夹 注意文件夹最后要加上/
    102. txt_to_xml("VisDroneTxt/labels/", "VisDroneTxt/images/", "VisDroneXml/labels/")

    4.运行.py文件

    5.转换成功

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

  • 相关阅读:
    spring 中 @Validated/@Valid
    LeetCode 1704. 判断字符串的两半是否相似
    跨平台开发新纪元:Xcode的多平台应用构建指南
    本科生学深度学习,搭建环境,再不入坑就晚了
    HCIP路由交换的三门考试
    C与CPP常见编译工具链与构建系统简介
    Mysql 日常命令记录
    虚拟机中Linux下安装服务器
    【obs】x264编码:“buffer_size“
    8月8本程序员新书:Rust、软技能、Python、量子...
  • 原文地址:https://blog.csdn.net/pyscl01/article/details/133745965