使用labelImg生成的xml用于yolov3目标检测训练,为了减少标注工作量,可以使用少部分数据训练模型,然后使用模型跑剩下的数据,把预测的结果写到xml文件中,再使用labelImg文件进行修正,可以减少总体的标注工作量。
import xml.dom.minidom
import os
def create_xml(save_path, bboxes, a, name):
#在内存中创建一个空的文档
doc = xml.dom.minidom.Document()
#创建一个根节点Managers对象
root = doc.createElement('annotation')
#设置根节点的属性
#将根节点添加到文档对象中
doc.appendChild(root)
nodesize = doc.createElement('size')
nodewidth = doc.createElement('width')
nodewidth.appendChild(doc.createTextNode(str(240)))
nodeheight = doc.createElement('height')
nodeheight.appendChild(doc.createTextNode(str(80)))
nodedepth = doc.createElement('depth')
nodedepth.appendChild(doc.createTextNode(str(1)))
nodesize.appendChild(nodewidth)
nodesize.appendChild(nodeheight)
nodesize.appendChild(nodedepth)
classes = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','J','K','L','M','N',
'P','Q','R','S','T','U','V','W','X','Y','Z']
managerList = []
for bbox in bboxes:
managerList.append({'name':classes[int(bbox[5])],'xmin' : int(bbox[0]), 'ymin' : int(bbox[1]), 'xmax' : int(bbox[2]), 'ymax' :int(bbox[3])})
for i in managerList :
nodefilename = doc.createElement('filename')
# nodefilename = doc.createElement('name')
nodefilename.appendChild(doc.createTextNode(name))
root.appendChild(nodefilename)
nodeobject = doc.createElement('object')
nodeName = doc.createElement('name')
nodeName.appendChild(doc.createTextNode(str(i['name'])))
nodeobject.appendChild(nodeName)
nodebndbox = doc.createElement('bndbox')
# nodebndbox.appendChild(doc.createTextNode(str(i['name'])))
nodeobject.appendChild(nodebndbox)
nodexmin = doc.createElement('xmin')
#给叶子节点name设置一个文本节点,用于显示文本内容
nodexmin.appendChild(doc.createTextNode(str(i['xmin'])))
nodeymin = doc.createElement("ymin")
nodeymin.appendChild(doc.createTextNode(str(i["ymin"])))
nodexmax = doc.createElement("xmax")
nodexmax.appendChild(doc.createTextNode(str(i["xmax"])))
nodeymax = doc.createElement("ymax")
nodeymax.appendChild(doc.createTextNode(str(i["ymax"])))
#将各叶子节点添加到父节点Manager中,
#最后将Manager添加到根节点Managers中
nodebndbox.appendChild(nodexmin)
nodebndbox.appendChild(nodeymin)
nodebndbox.appendChild(nodexmax)
nodebndbox.appendChild(nodeymax)
root.appendChild(nodeobject)
#开始写xml文档
fp = open(os.path.join(save_path,a+'.xml'), 'w')
doc.writexml(fp, indent='\t', addindent='\t', newl='\n', encoding="utf-8")
网友评论