首页 > 其他分享 >xml转YOLO的txt格式(一次必成版!)

xml转YOLO的txt格式(一次必成版!)

时间:2024-10-13 18:19:27浏览次数:3  
标签:xml box YOLO classes path txt find

废话少说,直接上干货!

首先,我先介绍一下代码的使用,编程语言为“Python”,共有三处需按照自己的需求修改的,我都放在代码最下面了。

xml_root_path:输入你的xml格式的文件存放位置,建议全部用绝对路径
txt_save_path:输入你的txt格式的文件导出后的存放位置
classes_path:输入你的labels.txt格式的文件的存放位置(这里注意,在随便哪个地方新建一个labels.txt文件,必须叫这个名哈不然错了别找我,输入你数据集的类别名,有几类输几类,一行一个类别名,不需要加任何标点符号,逗号冒号的统统不要加,大小写一定要对,空格也不要多加,和你xml里面的类别名必须一样,不知道类别名的打开你的xml文件自己看看确认,不然输出的txt文件内容为空你也别找我,自己好好看)
import os
import glob
import xml.etree.ElementTree as ET


def get_classes(classes_path):
    with open(classes_path, encoding='utf-8') as f:
        class_names = f.readlines()
    class_names = [c.strip() for c in class_names]
    print("Classes loaded:", class_names)
    return class_names, len(class_names)


def convert(size, box):
    dw = 1.0 / size[0]
    dh = 1.0 / size[1]
    x = (box[0] + box[1]) / 2.0
    y = (box[2] + box[3]) / 2.0
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)


def convert_xml_to_yolo(xml_root_path, txt_save_path, classes_path):
    print("XML root path:", xml_root_path)
    print("TXT save path:", txt_save_path)
    print("Classes path:", classes_path)

    if not os.path.exists(txt_save_path):
        os.makedirs(txt_save_path)
    print("Directory created:", txt_save_path)

    xml_paths = glob.glob(os.path.join(xml_root_path, '*.xml'))
    print("XML files found:", xml_paths)

    classes, _ = get_classes(classes_path)

    for xml_id in xml_paths:
        print("Processing file:", xml_id)
        txt_id = os.path.join(txt_save_path, os.path.basename(xml_id)[:-4] + '.txt')
        txt = open(txt_id, 'w')
        xml = open(xml_id, encoding='utf-8')
        tree = ET.parse(xml)
        root = tree.getroot()
        size = root.find('size')
        w = int(size.find('width').text)
        h = int(size.find('height').text)
        for obj in root.iter('object'):
            difficult = 0
            if obj.find('difficult') is not None:
                difficult = obj.find('difficult').text
            cls = obj.find('name').text
            print("Class found:", cls)
            if cls not in classes or int(difficult) == 1:
                continue
            cls_id = classes.index(cls)
            xmlbox = obj.find('bndbox')
            b = (int(float(xmlbox.find('xmin').text)), int(float(xmlbox.find('xmax').text)),
                 int(float(xmlbox.find('ymin').text)), int(float(xmlbox.find('ymax').text)))
            box = convert((w, h), b)
            txt.write(str(cls_id) + ' ' + ' '.join([str(a) for a in box]) + '\n')
        txt.close()
        print("TXT file created:", txt_id)
if __name__ == '__main__':
    # 用户输入XML文件路径和TXT文件存放路径
    xml_root_path = r"C:\Users\DELL\Desktop\seaships\Annotations"
    txt_save_path = r"C:\Users\DELL\Desktop\Seaships(7000)\labels"
    classes_path = r"C:\Users\DELL\Desktop\labels.txt"
    convert_xml_to_yolo(xml_root_path, txt_save_path, classes_path)

标签:xml,box,YOLO,classes,path,txt,find
From: https://blog.csdn.net/mywhyyds/article/details/142901427

相关文章

  • YOLOv11改进 | 注意力篇 | YOLOv11引入CoTAttention注意力
    1. CoT介绍1.1 摘要:具有自注意力的Transformer引发了自然语言处理领域的革命,最近激发了Transformer式架构设计的出现,在众多计算机视觉任务中取得了具有竞争力的结果。然而,大多数现有设计直接在2D特征图上采用自注意力,以获得基于每个空间位置处的孤立查询和键对的注......
  • golang从http请求中读取xml格式的body,并转成json
    推荐学习文档golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔记专栏文章目录以下是在Go语言中从HTT......
  • YOLO11改进|注意力机制篇|引入Mamba注意力机制MLLAttention
    目录一、【MLLAttention】注意力机制1.1【MLLAttention】注意力介绍1.2【MLLAttention】核心代码二、添加【MLLAttention】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP42.5STEP5三、yaml文件与运行3.1yaml文件3.2运行成功截图一、【MLLAttention】注意力机制1.1......
  • YOLOv9分割改进 ,YOLOv9分割改进主干网络为华为EfficientNet,助力涨点
    YOLOv9分割改进前训练结果:YOLOv9分割改进后训练结果:摘要卷积神经网络(ConvNets)通常在固定的资源预算下开发,然后在有更多资源时进行扩展以提高准确性。在本文中,我们系统地研究了模型扩展,并发现仔细平衡网络深度、宽度和分辨率可以带来更好的性能。基于这一观察,提出......
  • YOLOv11全网最新创新点改进系列:一文读懂YOLOv11算法!!!
    YOLOv11全网最新创新点改进系列:免费送!!!改进且跑通的源码!!融入CBAM注意力,将通道注意力和空间注意力相结合,嘎嘎提升V11算法,叫叫首,改进速度遥遥领先,粉丝水文速度遥遥领先!!!所有改进代码均经过实验测试跑通!截止发稿时YOLOv11已改进40+!自己排列组合2-4种后,考虑位置不同后可排列组合......
  • 读取bdict格式文件并转化为txt
    bdict格式是百度输入法的词库文件,那么怎么看里面的内容呢?这就需要用到bdict到txt的转化。下载:百度输入法-词库列表-餐饮比如下载“菜名大全”文件名:dict_file_734_20111227170031_1.0.0.bdict文件大小134924字节转换代码参考这篇文档:【搜狗&百度词库】.bdict文件与.sce......
  • YOLOv11改进 | 独家创新- 注意力篇 | YOLOv11引入GAM和LinearAttention结合之LGAM注意
    1.LGAM介绍     LGAM(LinearGlobalAttentionModule)和GAM(GlobalAttentionModule)是两种用于图像特征提取的注意力机制。它们在设计上有一些显著的差异,这使得LGAM在某些方面比GAM更具优势。     LGAM的设计与改进:    (1).线性注意力机制的引......
  • 软件构造,生成算式采用CSV、XML、JSON三种形式进行存储并读取。
    编写代码完成将生成的算式及习题长期保存下来,采用CSV、XML、JSON三种形式进行存储并读取。提交相关代码及运行截图。importrandomimportcsvimportjsonimportxml.etree.ElementTreeasETfromxml.domimportminidom#生成随机算式数据defgenerate_exercises(count......
  • 2006-2023年上市公司社会责任报告、ESG报告文本(TXT)
    2006-2023年上市公司社会责任报告、ESG报告文本(TXT)1、时间:2006-2023年2、范围:A股上市公司3、样本量:14279份4、说明:上市公司社会责任报告是企业对外公布的一份关于其社会责任实践和成果的详细文件,涵盖环境保护、社会贡献和公司治理等方面的表现。通常包含公司在减少环境影响......
  • 探索Ultralytics YOLO11在视觉任务上的应用
    前言在人工智能持续发展的当下,有一点是确凿无疑的:模型正变得愈发优秀、快捷和智能。就在人们以为YOLO系列已登峰造极之时,Ultralytics推出了最新升级版——YOLO11。需要注意的是,这里不是YOLOv11,他们简化了命名方式,去掉了“v”。这一改变就如同YOLO既做了形象上的精简,又实现......