VOC数据格式下标注.xml文件filename及path属性更改
VOC数据格式下标注.xml⽂件filename及path属性更改
问题描述
在⼤家帮助下制作了voc格式数据集,由于⼀开始图⽚命名采⽤了中⽂括号,担⼼后续训练报错(反正就是不满意就对啦,强迫症患者必须要保证图⽚名称规范且连号),就对xml⽂件和jpg格式图⽚进⾏了批量改名,具体见该专栏下另⼀篇⽂章。改名成功之后,发现xml⽂件内filename和path属性与⽂件名对不上了(呜呜呜…太难了),具体问题见下图吧!爱你不需要理由
改名成功前后问题描述
中学生调查报告
解决办法玉和翡翠区别
直接上代码,⽬录结构及修改结果如图
# coding=utf-8
# ⽂件⽬录结构如下,需要注意两个⽂件夹下⽂件名称必须要对应
# ——————————————————————————
# |--annotations
# |----1.xml
# |----2.xml
# |----需要修改的xml⽂件
# |--images
# |----1.jpg
# |----2.jpg
# |----与xml⽂件对应的图⽚
# ——————————————————————————
伤感小文章
# 适⽤范围:①voc数据格式;②请他⼈帮你标注数据,做整合时希望xml⽂件中path与训练路径⼀致,以防出错
# ③昨晚标注后才发现图⽚命名不规范不连续,更改图⽚名和标签名,此时xml中filename和图⽚名称不对应
# ④亲测③问题存在时,voc转coco数据格式时,filename问题会导致coco数据集有问题
import os
import xml.dom.minidom
file_path ="D:/woyaobiye/data/xml_path_test/annotations"# 修改为上述xml⽂件所在路径
img_path ="D:/woyaobiye/data/xml_path_test/images"# 修改为上述图⽚所在路径
xml_files = os.listdir(file_path)# xml⽂件名列表
img_files = os.listdir(img_path)# 图⽚⽂件名列表,由于xml⽂件以及图⽚名称(图⽚均为.jpg)后缀⼀⼀对应,因此列表内也⼀⼀对应# 必须承认这样会存在问题,⽐如图⽚后缀不⼀样等等肯定会bug,遇到问题再修改吧
for i, xmlFile in enumerate(xml_files):# 遍历xml⽂件夹
if not os.path.isdir(xmlFile):# 不是⽂件夹,打开xml⽂件
超新星11人print("\n",xmlFile)
dom = xml.dom.minidom.parse(os.path.join(file_path, xmlFile))# 读取xml⽂件,送⼊dom解析
root = dom.documentElement                                      # 返回整个xml⽂档的内容
original_path = ElementsByTagName('path')# 根据标签名称获取path节点
p0 = original_path[0]# 上述返回值是⼀个list,观察xml⽂件发现path和filename长度均为1
# print(p0)                # p0其实是机器编码,不是具体⽂本
path0 = p0.firstChild.data  # 使⽤data是将其具体的⽂本内容提取出来
# print(path0)
original_filename = ElementsByTagName('filename')# 根据标签名称获取filename节点
氢氧化铜是沉淀吗f0 = original_filename[0]# 同上
print(f0)
fn0 = f0.firstChild.data  # 同上
img_name = img_files[i]# 获取和xml对应的图⽚名称
modify_path = img_path +"/"+ img_name      # 修改path
modify_filename = img_name                    # 修改filename
# print(modify_path)
p0.firstChild.data = modify_path              # 把修改后的path值赋给path的机器码
f0.firstChild.data = modify_filename        # 把修改后的filename值赋给path的机器码
with open(os.path.join(file_path, xmlFile),'w')as fh:
dom.writexml(fh)
print('修改path和filename DONE!')

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。