- 训练模型需要用到空白的xml,生成负样本的xml文件
from lxml.etree import Element, SubElement, tostring
from xml.dom.minidom import parseString
import json
import os
import cv2
import codecs
import numpy as np
from PIL import Image
def save_xml(image_name, width, height,channel=3):
save_dir = '保存xml的文件夹路径'
node_root = Element('annotation')
node_folder = SubElement(node_root, 'folder')
node_folder.text = 'VOC2007'
node_filename = SubElement(node_root, 'filename')
node_filename.text = image_name
node_source = SubElement(node_root,'source')
node_database = SubElement(node_source,'database')
node_database.text = 'Unknown'
node_size = SubElement(node_root, 'size')
node_width = SubElement(node_size, 'width')
node_width.text = '%s' % width
node_height = SubElement(node_size, 'height')
node_height.text = '%s' % height
node_depth = SubElement(node_size, 'depth')
node_depth.text = '%s' % channel
x, y, w, h = 0, 0, width, height
left, top, right, bottom = x, y, x + w, y + h
node_object = SubElement(node_root, 'object')
node_name = SubElement(node_object, 'name')
node_name.text = 'hxq_gjtps'
node_bndbox = SubElement(node_object, 'bndbox')
node_xmin = SubElement(node_bndbox, 'xmin')
node_xmin.text = '%s' % left
node_ymin = SubElement(node_bndbox, 'ymin')
node_ymin.text = '%s' % top
node_xmax = SubElement(node_bndbox, 'xmax')
node_xmax.text = '%s' % right
node_ymax = SubElement(node_bndbox, 'ymax')
node_ymax.text = '%s' % bottom
node_object = SubElement(node_root, 'object')
node_name = SubElement(node_object, 'name')
node_name.text = 'hxq_gjbs'
node_bndbox = SubElement(node_object, 'bndbox')
node_xmin = SubElement(node_bndbox, 'xmin')
node_xmin.text = '%s' % left
node_ymin = SubElement(node_bndbox, 'ymin')
node_ymin.text = '%s' % top
node_xmax = SubElement(node_bndbox, 'xmax')
node_xmax.text = '%s' % right
node_ymax = SubElement(node_bndbox, 'ymax')
node_ymax.text = '%s' % bottom
xml = tostring(node_root, pretty_print=True)
dom = parseString(xml)
save_xml = os.path.join(save_dir, image_name.replace('jpg', 'xml'))
with open(save_xml, 'wb') as f:
f.write(xml)
return
if __name__ == '__main__':
root_path = '图片路径'
imagelist = os.listdir(os.path.join(root_path))
for image_name in imagelist:
if '.DS_Store' in image_name:
continue
image = root_path + image_name
img = Image.open(image)
img_size = img.size
w = img.width
h = img.height
print('image',image,w,h)
save_xml(image_name,w,h)