顶部位置
具体内容
1. 精灵标注助手的标注结果
返回顶部
<?xml version="1.0" ?>
<doc>
<path>6695.png</path>
<outputs>
<object>
<item>
<name>face</name>
<bndbox>
<xmin>51</xmin>
<ymin>36</ymin>
<xmax>103</xmax>
<ymax>91</ymax>
</bndbox>
</item>
<item>
<name>smoke</name>
<bndbox>
<xmin>3</xmin>
<ymin>172</ymin>
<xmax>27</xmax>
<ymax>206</ymax>
</bndbox>
</item>
</object>
</outputs>
<time_labeled>1613973666698</time_labeled>
<labeled>true</labeled>
<size>
<width>165</width>
<height>339</height>
<depth>3</depth>
</size>
</doc>
2. code: 将精灵标注结果改为voc格式标注结果
返回顶部
''' 重写 xml 文件时需要的信息
filename 对应的图片名称
width 有
height 有
depth 有
标记框信息:
name 标签名
xyxy 标记框信息
'''
import os
from xml.dom import minidom
import xml.etree.ElementTree as ET
def extract_xml_info(xml_path):
tree = ET.parse(xml_path)
filename = os.path.basename(xml_path)
width = float(tree.find('size').find('width').text)
height = float(tree.find('size').find('height').text)
depth = float(tree.find('size').find('depth').text)
objs = tree.find('outputs').find('object').findall('item')
bbox_list = []
for obj in objs:
label_name = obj.find('name').text
xmin = int(obj.find('bndbox').find('xmin').text)
ymin = int(obj.find('bndbox').find('ymin').text)
xmax = int(obj.find('bndbox').find('xmax').text)
ymax = int(obj.find('bndbox').find('ymax').text)
bbox = [label_name, xmin, ymin, xmax, ymax]
bbox_list.append(bbox)
xml_dict = {
'filename':filename, 'width':int(width) , 'height':int(height) , 'depth':int(depth) , 'bbox_list':bbox_list }
return xml_dict
def write_xml(xml_dict, xml_save_path):
filename = xml_dict['filename']
width = xml_dict['width']
height = xml_dict['height']
depth = xml_dict['depth']
bbox_list = xml_dict['bbox_list']
dom = minidom.Document()
root_node = dom.createElement('annotation')
dom.appendChild(root_node)
folder_node = dom.createElement('folder')
root_node.appendChild(folder_node)
folder_text = dom.createTextNode('smoke-1')
folder_node.appendChild(folder_text)
filename_node = dom.createElement('filename')
root_node.appendChild(filename_node)
filename_text = dom.createTextNode(filename)
filename_node.appendChild(filename_text)
size_node = dom.createElement('size')
root_node.appendChild(size_node)
width_node = dom.createElement('width')
size_node.appendChild(width_node)
width_text = dom.createTextNode(str(width))
width_node.appendChild(width_text)
height_node = dom.createElement('height')
size_node.appendChild(height_node)
height_text = dom.createTextNode(str(height))
height_node.appendChild(height_text)
depth_node = dom.createElement('depth')
size_node.appendChild(depth_node)
depth_text = dom.createTextNode(str(depth))
depth_node.appendChild(depth_text)
for bbox in bbox_list:
object_node = dom.createElement('object')
root_node.appendChild(object_node)
name_node = dom.createElement('name')
object_node.appendChild(name_node)
name_text = dom.createTextNode(str(bbox[0]))
name_node.appendChild(name_text)
bndbox_node = dom.createElement('bndbox')
object_node.appendChild(bndbox_node)
xmin_node = dom.createElement('xmin')
bndbox_node.appendChild(xmin_node)
xmin_text = dom.createTextNode(str(bbox[1]))
xmin_node.appendChild(xmin_text)
ymin_node = dom.createElement('ymin')
bndbox_node.appendChild(ymin_node)
ymin_text = dom.createTextNode(str(bbox[2]))
ymin_node.appendChild(ymin_text)
xmax_node = dom.createElement('xmax')
bndbox_node.appendChild(xmax_node)
xmax_text = dom.createTextNode(str(bbox[3]))
xmax_node.appendChild(xmax_text)
ymax_node = dom.createElement('ymax')
bndbox_node.appendChild(ymax_node)
ymax_text = dom.createTextNode(str(bbox[4]))
ymax_node.appendChild(ymax_text)
try:
with open(xml_save_path,'w',encoding='UTF-8') as fh:
dom.writexml(fh,indent='',addindent='\t',newl='\n',encoding='UTF-8')
except Exception as err:
print('错误:{err}'.format(err=err))
def ergodic_xml(xml_folder_path, xml_folder_path_save):
xml_filenames = os.listdir(xml_folder_path)
xml_index = 0
for xml_filename in xml_filenames:
if xml_filename.split('.')[-1] != 'xml':
continue
xml_index = xml_index + 1
xml_path = os.path.join(xml_folder_path, xml_filename)
xml_info = extract_xml_info(xml_path)
print('{:<3d}\t{}\t{}'.format(xml_index, xml_filename, xml_info))
xml_save_path = os.path.join(xml_folder_path_save, xml_filename)
write_xml(xml_info, xml_save_path)
xml_folder_path = r'./data/xml'
xml_folder_path_save = r'./data/xml_voc'
ergodic_xml(xml_folder_path, xml_folder_path_save)
3. 改写后的xml文件内容
返回顶部
<?xml version="1.0" encoding="UTF-8"?>
<annotation>
<folder>smoke-1</folder>
<filename>6695.xml</filename>
<size>
<width>165</width>
<height>339</height>
<depth>3</depth>
</size>
<object>
<name>face</name>
<bndbox>
<xmin>51</xmin>
<ymin>36</ymin>
<xmax>103</xmax>
<ymax>91</ymax>
</bndbox>
</object>
<object>
<name>smoke</name>
<bndbox>
<xmin>3</xmin>
<ymin>172</ymin>
<xmax>27</xmax>
<ymax>206</ymax>
</bndbox>
</object>
</annotation>
4. 内容4
返回顶部
在这里插入代码片
5. 内容5
返回顶部
在这里插入代码片
6. 内容6
返回顶部
在这里插入代码片