千家信息网

Python如何实现xml格式转txt格式

发表于:2024-12-13 作者:千家信息网编辑
千家信息网最后更新 2024年12月13日,本篇内容介绍了"Python如何实现xml格式转txt格式"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所
千家信息网最后更新 2024年12月13日Python如何实现xml格式转txt格式

本篇内容介绍了"Python如何实现xml格式转txt格式"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1、前言

最近学习Yolo v5是遇见了个问题,找的数据集全是xml文件,VOC 的标注是 xml 格式的,而YOLO是.txt格式,那么问题就来了,手动提取肯定是不可能的,那只能借用程序解决咯。

2、分析xml、txt数据

这是xml树形结构

这是txt格式

总结:

1.提取object->name、bndbox->xmin,ymin,xmax,ymin

2.格式转化需要用公式转换

YOLO数据集txt格式:

x_center :归一化后的中心点x坐标

y_center : 归一化后的中心点y坐标

w:归一化后的目标框宽度

h: 归一化后的目标况高度

(此处归一化指的是除以图片宽和高)

VOC数据集xml格式

yolo的四个数据xml->txt公式
x_center((x_min+x_max)/2-1)/w_image
y_center((y_min+y_max)/2-1)/h_image
w(x_max-x_min)/w_image
h(y_max-y_min)/h_image

3、转换过程

定义两个文件夹,train放xml数据, labels放txt数据。

代码解析:

import osimport xml.etree.ElementTree as ETimport iofind_path = './train/'    #xml所在的文件savepath='./labels/'   #保存文件class Voc_Yolo(object):    def __init__(self, find_path):        self.find_path = find_path    def Make_txt(self, outfile):        out = open(outfile,'w')         print("创建成功:{}".format(outfile))        return out    def Work(self, count):    #找到文件路径        for root, dirs, files in os.walk(self.find_path):        #找到文件目录中每一个xml文件            for file in files:            #记录处理过的文件                count += 1                #输入、输出文件定义                input_file = find_path + file                outfile = savepath+file[:-4]+'.txt'                #新建txt文件,确保文件正常保存                out = self.Make_txt(outfile)                #分析xml树,取出w_image、h_image                tree=ET.parse(input_file)                root=tree.getroot()                size=root.find('size')                w_image=float(size.find('width').text)                h_image=float(size.find('height').text)                #继续提取有效信息来计算txt中的四个数据                for obj in root.iter('object'):                #将类型提取出来,不同目标类型不同,本文仅有一个类别->0                    classname=obj.find('name').text                    cls_id = classname                    xmlbox=obj.find('bndbox')                    x_min=float(xmlbox.find('xmin').text)                    x_max=float(xmlbox.find('xmax').text)                    y_min=float(xmlbox.find('ymin').text)                    y_max=float(xmlbox.find('ymax').text)                    #计算公式                    x_center=((x_min+x_max)/2-1)/w_image                    y_center=((y_min+y_max)/2-1)/h_image                    w=(x_max-x_min)/w_image                    h=(y_max-y_min)/h_image                    #文件写入                    out.write(str(cls_id)+" "+str(x_center)+" "+str(y_center)+" "+str(w)+" "+str(h)+'\n')                out.close()        return countif __name__ == "__main__":    data = Voc_Yolo(find_path)    number = data.Work(0)    print(number)

4、最后结果对比

创建成功

与真实数据对比误差很小

"Python如何实现xml格式转txt格式"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

文件 格式 数据 公式 目标 不同 成功 中心点 内容 坐标 更多 知识 类型 过程 这是 问题 分析 学习 输出 实用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 自由战吼服务器加速哪个服务器 i7 6700k服务器 与维护网络安全相关的作文题目 广州店多软件开发有限公司 沂源企业erp软件开发公司 网络服务器如何做安全加固 计算机网络技术大专教案 软件开发是不是计算机 计算机网络安全面临的自然威胁 软件开发公司有rfid吗 csharp数据库怎么打开 ai软件开发从零自学 非关系数据库英语翻译 怎么才能成为网络安全白帽子 运行网络安全防护体系原则 数据库安全控制方法和技术 如何把数据库部署在服务器上 计算机网络技术最好的学校 山西app软件开发在线咨询 移动app软件开发外包 辽宁贝源网络技术有限公司 网络安全软件学习好物 漳州鑫广源网络技术有限公司 大学生网络安全知识测试题及答案 网络安全计算机被黑 苹果手机软件开发如何收费 裸金属服务器 暗黑2官方数据库 太仓推广网络技术收费 国外产业数据库
0