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官方数据库
太仓推广网络技术收费
国外产业数据库