训练数据集时需要随机挑一些数据图片出来当test集,这个可以帮助随机抽取一些数据(xml与对应的jpg)
import cv2
import numpy as np
import os
import xml.dom.minidom
from PIL import Image
import random
def write_xml(info):
info1=info[0][0:6]+'.jpg'
img_dir='JPEGImages/'
im = Image.open(img_dir+info1)
width,height = im.size
xml_dir='11/'
#write in xml file
xml_file = open((xml_dir + info1[0:6]+'.xml'),'w')
xml_file.write('<annotation>\n')
xml_file.write(' <folder>VOC2007</folder>\n')
xml_file.write(' <filename>' +info1 + '</filename>\n')
xml_file.write(' <size>\n')
xml_file.write(' <width>' + str(width) + '</width>\n')
xml_file.write(' <height>' + str(height) + '</height>\n')
xml_file.write(' <depth>3</depth>\n')
xml_file.write(' </size>\n')
#write the region of image on xml file
for img_each_label in info[1:]:
# print("aaaaaaa",img_each_label)
# print("bbbbbbb",img_each_label)
spt="limitRate"
xml_file.write(' <object>\n')
xml_file.write(' <name>' + spt + '</name>\n')
xml_file.write(' <pose>Unspecified</pose>\n')
xml_file.write(' <truncated>0</truncated>\n')
xml_file.write(' <difficult>0</difficult>\n')
xml_file.write(' <bndbox>\n')
xml_file.write(' <xmin>' + str(img_each_label[0]) + '</xmin>\n')
xml_file.write(' <ymin>' + str(img_each_label[1]) + '</ymin>\n')
xml_file.write(' <xmax>' + str(img_each_label[2]) + '</xmax>\n')
xml_file.write(' <ymax>' + str(img_each_label[3]) + '</ymax>\n')
xml_file.write(' </bndbox>\n')
xml_file.write(' </object>\n')
xml_file.write('</annotation>')
def xml_read(filename):
# print(filename)
if os.path.exists(filename) is False:
return None
dom = xml.dom.minidom.parse(filename)
#得到文档元素对象
root = dom.documentElement
object_ = root.getElementsByTagName('object')
info=[]
# filename = root.getElementsByTagName('filename')[0].firstChild.data
for object_1 in object_:
name=object_1.getElementsByTagName("name")[0].firstChild.data
bndbox=object_1.getElementsByTagName("bndbox")[0]
xmin=int(bndbox.getElementsByTagName("xmin")[0].firstChild.data)
ymin=int(bndbox.getElementsByTagName("ymin")[0].firstChild.data)
xmax=int(bndbox.getElementsByTagName("xmax")[0].firstChild.data)
ymax=int(bndbox.getElementsByTagName("ymax")[0].firstChild.data)
# if name=='40\'':
# print(filename,xmin,ymin,xmax,ymax)
# if 'limitRate'==name or 'limit'==name:
info.append([xmin,ymin,xmax,ymax,name])
return info
file_dir='./'
name=[]
for files in os.scandir('.'):
if files.name[-1]=='l':
name.append(files.name)
num=0
import os,shutil
random.shuffle(name)
for ii in range(len(name)//2):
file=name[ii-num]
file_src=file
file_dst='11/'+file_src
shutil.copyfile(file_src,file_dst)
file_src=file[:-4]+'.jpg'
file_dst='11/'+file_src
shutil.copyfile(file_src,file_dst)
更多内容请关注公众号,了解嵌入式ai前沿资讯!