在yolov5中,如何将xml格式转换为yolov5所需的txt格式(超详细)

news/2024/7/11 0:15:54 标签: YOLO, xml, java
xmlns="http://www.w3.org/2000/svg" style="display: none;">

这是一堆xml文件,但是在yolov5中需要的是txt文件,现在需要的是将xml转换为txt文件。
在这里插入图片描述
先看一下xml文件的内容
在这里插入图片描述
下面是转换的全部代码,只要安装python就可以直接运行。

import xml.etree.ElementTree as ET
 
import pickle
import os
from os import listdir , getcwd
from os.path import join
import glob
 
classes = ["ship"]
 
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_annotation(image_name):
    in_file = open('./Annotations_new/'+image_name[:-3]+'xml') #xml文件路径
    out_file = open('./lables/'+image_name[:-3]+'txt', 'w') #转换后的txt文件存放路径
    f = open('./Annotations_new/'+image_name[:-3]+'xml')
    xml_text = f.read()
    root = ET.fromstring(xml_text)
    f.close()
    size = root.find('size')
    w = int(size.find('width').text)
    h = int(size.find('height').text)
 
 
 
 
    for obj in root.iter('object'):
        cls = obj.find('name').text
        if cls not in classes:
            print(cls)
            continue
        cls_id = classes.index(cls)
        xmlbox = obj.find('bndbox')
        b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),
             float(xmlbox.find('ymax').text))
        bb = convert((w,h), b)
        out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')
 
wd = getcwd()
 
if __name__ == '__main__':
 
    for image_path in glob.glob("./JPEGImages/*.jpg"): #每一张图片都对应一个xml文件这里写xml对应的图片的路径
        image_name = image_path.split('\\')[-1]
        convert_annotation(image_name)

这是我的目录结构
在这里插入图片描述
1.py里面存放的是上面的代码,在给我你的代码里面,你只需要改动四个地方即可(就是改图片的路径,xml文件的路径,和最终转换的txt文件的存储路径),这个路径大家要是改不好的话,就写绝对路径,这样就不会报错了。
在这里插入图片描述
在这里插入图片描述
最终生成的文件
在这里插入图片描述
打开一个文件看看
在这里插入图片描述
大功告成!


http://www.niftyadmin.cn/n/5272018.html

相关文章

平均数 C语言xdoj66

问题描述 计算n个整数&#xff08;x1,x2,x3...&#xff09;的平均数&#xff0c;结果保留两位小数。 输入说明 第一行为整数n&#xff08;1 < n <100&#xff09;&#xff0c;接下来是n个整数(0 < x1,x2,x3....< 2^31 - 1)。 输出说明 输出这n个整数的…

逻辑回归的介绍和应用

逻辑回归的介绍 逻辑回归&#xff08;Logistic regression&#xff0c;简称LR&#xff09;虽然其中带有"回归"两个字&#xff0c;但逻辑回归其实是一个分类模型&#xff0c;并且广泛应用于各个领域之中。虽然现在深度学习相对于这些传统方法更为火热&#xff0c;但实…

android 13.0 设置上网应用白名单(上网app白名单)

1.概述 在13.0的产品rom定制开发中,在对产品进行网络模块开发中,有功能需要要求设置某些app可以上网,某些app不可以上网,就是所谓的网络应用白名单功能 接下来就来分析下相关的网络模块,来具体实现相关功能的开发 2.设置上网应用白名单(上网app白名单)核心代码 framewor…

【贪心算法】【中位贪心】LeetCode:100123.执行操作使频率分数最大

涉及知识点 双指针 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 贪心算法 题目 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 你可以对数组执行 至多 k 次操作&#xff1a; 从数组中选择一个下标 i &#xff0c;将 nums[i] …

zip的binaries和selfcontained的区别是什么

在hub/ee里我们有时候看到不同后缀的压缩包, 具体差别如下: 前者是纯粹的ILSpy二进制文件&#xff0c;需要手动解压缩后运行&#xff1b; 后者则是一个自包含的应用程序&#xff0c;包括了.NET Core运行时和所有依赖组件&#xff0c;可以直接运行。

Github 2023-12-17 开源项目日报Top10

根据Github Trendings的统计&#xff0c;今日(2023-12-17统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目3非开发语言项目2C#项目1TypeScript项目1Swift项目1Rust项目1Go项目1 在本地启动和运行大型语言模…

【sprintboot+vue3】解决前后端分离项目遇到的问题

目录 一、Access to XMLHttpRequest at http://127.0.0.1:8088/api/hello from origin http://localhost:5173 has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource. 二、报错[vue/compiler-sfc] 一、Access to …

0089__一条普遍存在于嵌入式实时系统(RTOS)中的嵌套使用互斥量的bug分析

一条普遍存在于嵌入式实时系统(RTOS)中的嵌套使用互斥量的bug分析_rt_mutex_take-CSDN博客