python实现批量修改PascalVOC数据集Annotation
学习DL过程中,各位同学⼀定会经历数据的标定⼯作,本篇按照Pascal VOC数据集格式,通过python实现Annotation⽂件的批量修改. 举个例⼦
<?xml version="1.0" ?><annotation>
<folder>HK</folder>
<filename>101.jpg</filename>
<path>/home/li//home/li/101.jpg</path> <source>
<database>Unknown</database>
</source>
<size>
<width>1280</width>
<height>720</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>Person</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>46</xmin>
<ymin>220</ymin>
<xmax>109</xmax>
<ymax>402</ymax>
</bndbox>
</object>
<object>
<name>Person</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>237</xmin>
<ymin>227</ymin>
<xmax>300</xmax>
<ymax>424</ymax>
</bndbox>
</object>
<object>
<name>Person</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>python处理xml文件
<xmin>283</xmin>
<ymin>143</ymin>
<xmax>325</xmax>
<ymax>295</ymax>
</bndbox>
</object>
<object>
<name>Person</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>312</xmin>
<ymin>171</ymin>
<xmax>372</xmax>
<ymax>296</ymax>
</bndbox>
</object>
</annotation>
在上述的xml⽂件中,可能我们在标定数据的过程中,换了设备,如何实现修改xml⽂件,假如⼀个⼀个打开修改,嗯....是个很⼤的⼯作量. python批量操作代码:
#coding=utf-8
import os
import os.path
import xml.dom.minidom
path="/home/li/HK_img/"
files=os.listdir(path) #得到⽂件夹下所有⽂件名称
s=[]
for xmlFile in files: #遍历⽂件夹
if not os.path.isdir(xmlFile): #判断是否是⽂件夹,不是⽂件夹才打开
print xmlFile
#TODO
#xml⽂件读取操作
#将获取的xml⽂件名送⼊到dom解析
dom=xml.dom.minidom.parse(os.path.join(path,xmlFile)) ###最核⼼的部分,路径拼接,输⼊的是具体路径
root=dom.documentElement
ElementsByTagName('path') #在这⾥我们修改的是path 节点的内容
n0=name[0]
print n0.firstChild.data
#p0=pose[0]
#print p0.firstChild.data
#修改
a=n0.firstChild.data[:-4]+'.jpg'
n0.firstChild.data='/home/li/'+a
#p0.firstChild.data='ok'
#打印输出
print '修改后的 name'
print n0.firstChild.data
print '修改后的 pose'
#print p0.firstChild.data
#print '~~~~~'
with open(os.path.join(path,xmlFile),'w') as fh:
dom.writexml(fh)
print('写⼊name/pose OK!') #⼀定要记住该部分,否则只是改了局部变量,并不会写⼊⽂件.
博主亲测有效,由于python的字符串拼接功能简易上⼿,⼤家可以根据⾃⼰的需求,进⾏更改.
PS:若代码运⾏失败,原因⼤概会有两个:
1.没有python的xml管理包,采⽤pip install 功能进⾏安装
2.python与C++完全不同,需要考虑代码的缩进,⼀定要注意代码的缩进.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论