xml转txt格式

需要提前存在保存yolo格式的txt文件夹

这是我的xml文件格式

在这里插入图片描述

import xml.etree.ElementTree as ET
import os

# 定义类别列表
classes = ['E2', 'Q1'] #修改为自己的类别

# 指定XML文件所在目录
xml_dir = 'E:/datasets/labels'  # 修改为包含XML文件的目录路径

# 指定目标目录
output_dir = 'E:/datasets/labels_txt'  # 修改为你想要保存YOLO格式文件的目标目录(labels_txt文件夹需要已存在,python不会自动生成)

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

        # 读取XML文件
        tree = ET.parse(xml_file)
        root = tree.getroot()

        # 提取图像宽度和高度
        width = int(root.find('size/width').text)
        height = int(root.find('size/height').text)

        # 构建YOLO格式的txt文件名
        output_filename = os.path.splitext(xml_filename)[0] + '.txt'
        txt_file = os.path.join(output_dir, output_filename)

        # 创建YOLO格式的文本文件
        with open(txt_file, 'w') as f:
            for obj in root.findall('object'):
                class_name = obj.find('name').text
                if class_name in classes:
                    class_id = classes.index(class_name)

                    # 提取边界框坐标
                    xmin = int(obj.find('bndbox/xmin').text)
                    ymin = int(obj.find('bndbox/ymin').text)
                    xmax = int(obj.find('bndbox/xmax').text)
                    ymax = int(obj.find('bndbox/ymax').text)

                    # 计算边界框的中心坐标和宽高
                    x_center = (xmin + xmax) / (2.0 * width)
                    y_center = (ymin + ymax) / (2.0 * height)
                    box_width = (xmax - xmin) / width
                    box_height = (ymax - ymin) / height

                    # 将目标信息写入YOLO格式的文本文件
                    f.write(f"{class_id} {x_center} {y_center} {box_width} {box_height}\n")

运行之后的结果:
在这里插入图片描述
有任何问题可以私聊我

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值