【⼯具脚本】读取VOC格式的标注xml⽂件,并修改xml中的
内容
功能:读取xml⽂件,并根据需求修改⾥⾯的内容。我本将心向明月 奈何明月照沟渠意思
1)修改xml⽂件中标注框的xmin,xmax,ymin,ymax的坐标值,当坐标值越界时,对其进⾏修改。
2)修改xml中filename的值(即标注⽂件对应图⽚的名称)。
注意:使⽤python3运⾏,python2运⾏时会报错(encoding相关的).
# coding=utf-8
import os
import os.path
import xml.dom.minidom
# 将string转换为int
def to_int(str):
try:
int(str)
return int(str)
except ValueError: #报类型错误,说明不是整型的
try:
float(str) #⽤这个来验证,是不是浮点字符串
return int(float(str))
except ValueError: #如果报错,说明即不是浮点,也不是int字符串。是⼀个真正的字符串
return False
root = r"/data_1/样本" #根⽬录路径
path = root + '/xml' #输⼊⽂件夹
save_path = root + '/newxml' #输出⽂件夹
if not os.path.isdir(save_path):
os.makedirs(save_path)
files = os.listdir(path) # 得到⽂件夹下所有r⽂件名称
s = []
身作方舟 魂渡彼岸for xmlFile in files:
# 遍历⽂件夹
portion = os.path.splitext(xmlFile)
if not os.path.isdir(xmlFile):
# 判断是否是⽂件夹,不是⽂件夹才打开
print (xmlFile)
# xml⽂件读取操作
# 将获取的xml⽂件名送⼊到dom解析
dom = xml.dom.minidom.parse(os.path.join(path, xmlFile))
# 最核⼼的部分os.path.join(path,xmlFile),路径拼接,输⼊的是具体路径
root = dom.documentElement
# 修改xmin
xmin = ElementsByTagName('xmin')
for i in range(len(xmin)):
if to_int(xmin[i].firstChild.data) < 0:
xmin[i].firstChild.data = 0
lol排位分段游戏家族名字前缀
print(">>>>>>>>>>>>>>>>>>>xmin修改为:"+str(xmin[i].firstChild.data))
# 修改ymin
ymin = ElementsByTagName('ymin')
for i in range(len(ymin)):
轻伤二级可以判多少年if to_int(ymin[i].firstChild.data) < 0:
ymin[i].firstChild.data = 0
print(">>>>>>>>>>>>>>>>>>>ymin修改为:"+str(ymin[i].firstChild.data))
# 获取图像的宽⾼
# 获取图像的宽⾼
width = 0
height = 0
img_w = ElementsByTagName('width')
for i in range(len(img_w)):
width = to_int(img_w[i].firstChild.data)
img_h = ElementsByTagName('height')
for i in range(len(img_h)):
height = to_int(img_h[i].firstChild.data)
# 修改xmax
xmax = ElementsByTagName('xmax')
for i in range(len(xmax)):
if to_int(xmax[i].firstChild.data) > width:
xmax[i].firstChild.data = width
print(">>>>>>>>>>>>>>>>>>>xmax修改为"+str(xmax[i].firstChild.data))
# 修改ymax
ymax = ElementsByTagName('ymax')
for i in range(len(ymax)):
if to_int(ymax[i].firstChild.data) > height:
ymax[i].firstChild.data = height
print(">>>>>>>>>>>>>>>>>>>ymax修改为:"+str(ymax[i].firstChild.data))
# # 修改图像的尺⼨
# if width > height:
# for i in range(len(img_h)):
# img_h[i].firstChild.data = width
# elif width < height:
# for i in range(len(img_w)):
# img_w[i].firstChild.data = height
# else:
# print("need not alter!")
# 保存修改到xml⽂件中
with open(os.path.join(save_path, xmlFile), 'w', encoding='UTF-8') as fh:
南方小年和北方小年是什么意思dom.writexml(fh)
print('')
# name = ElementsByTagName('name')
# # ElementsByTagName('pose')
# # 重命名class name
# for i in range(len(name)):
# # print (name[i].firstChild.data)
# # print(xmlFile)
# # if portion[1] == ".xml":
# # newname = portion[0] + ".jpg"
# # print(newname)
# newname = "zero"
# if name[i].firstChild.data == "chebiao":
# name[i].firstChild.data = newname
# print(name[i].firstChild.data)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论