当前位置:   article > 正文

【将标注信息为VOC格式的XML文件转换为YOLOv格式的TXT文件】

【将标注信息为VOC格式的XML文件转换为YOLOv格式的TXT文件】


当将XML标签转换为YOLOv格式的TXT文件时,通常需要提取XML文件中的对象(物体)标注信息,并将其转换为适合YOLOv格式的文本。YOLOv格式的文本文件通常包含每个物体的类别、边界框的归一化坐标和宽高等信息。

1.VOC格式的xm文件转换为YOLOv格式的TXT文件脚本

下面是一个简单的Python脚本,使用xml.etree.ElementTree库来解析XML文件,并将标注信息转换为YOLOv格式的TXT文件。
全部代码:

import xml.etree.ElementTree as ET
import os

def convert_xml_to_yolov(xml_path, output_path, class_mapping):
	# 解析XML文件
    tree = ET.parse(xml_path)
    root = tree.getroot()

    # 打开输出文件进行写入
    with open(output_path, 'w') as out_file:
        for obj in root.findall('object'):
        	# 获取类别名称
            class_name = obj.find('name').text
            if class_name not in class_mapping:
                print(f"Warning: Class '{class_name}' not in class mapping. Skipping.")
                continue

            class_id = class_mapping[class_name]

             # 获取边界框坐标
            bbox = obj.find('bndbox')
            xmin = float(bbox.find('xmin').text)
            ymin = float(bbox.find('ymin').text)
            xmax = float(bbox.find('xmax').text)
            ymax = float(bbox.find('ymax').text)

            # 计算归一化坐标
            width = xmax - xmin
            height = ymax - ymin
            x_center = xmin + width / 2
            y_center = ymin + height / 2

            # 归一化坐标
            img_width = float(root.find('size').find('width').text)
            img_height = float(root.find('size').find('height').text)

            x_center /= img_width
            y_center /= img_height
            width /= img_width
            height /= img_height

            # 写入输出文件
            out_file.write(f"{class_id} {x_center} {y_center} {width} {height}\n")

if __name__ == "__main__":
    xml_folder = "path/to/xml/folder"
    output_folder = "path/to/output/folder"
    class_mapping = {"class1": 0, "class2": 1, "class3": 2}   # 使用你的类别映射更新这里

      # 遍历文件夹中的每个XML文件
    for xml_file in os.listdir(xml_folder):
        if xml_file.endswith(".xml"):
            xml_path = os.path.join(xml_folder, xml_file)

            # 生成输出文件路径
            txt_file = os.path.splitext(xml_file)[0] + ".txt"
            output_path = os.path.join(output_folder, txt_file)

           # 将XML转换为YOLOv格式
            convert_xml_to_yolov(xml_path, output_path, class_mapping)

    print("Conversion completed.")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62

请确保替换脚本中的xml_folder,output_folder和class_mapping变量的值,以适应你的文件结构和类别映射。此外,确保你的XML文件中包含适当的标注信息(类别、边界框等)。

2.使用方法

2.1.文件夹结构

在这里插入图片描述

2.2.脚本使用

  1. 创建一个.py文件,将上述代码放进去。

请确保替换脚本中的xml_folder,output_folder和class_mapping变量的值

  1. 命令
python xml_to_txt.py
  • 1

在这里插入图片描述

  1. 用labelImg查看效果很好。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/159582
推荐阅读
相关标签
  

闽ICP备14008679号