import xml.etree.ElementTree as ET
import os
classes =["object1","object2"]# 这里填你自己数据集中的类别
CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))defconvert(size, box):
dw =1./ size[0]
dh =1./ size[1]
x =(box[0]+ box[1])/2.0
y =(box[2]+ box[3])/2.0
w = box[1]- box[0]
h = box[3]- box[2]
x = x * dw
w = w * dw
y = y * dh
h = h * dh
return(x, y, w, h)defconvert_annotation(image_id):
in_file =open('/Annotation/VOC/%s.xml'%(image_id), encoding='UTF-8')# xml文件所在路径
out_file =open('Annotation/yolo/%s.txt'%(image_id),'w')# 生成txt格式文件的路径
tree = ET.parse(in_file)
root = tree.getroot()
size = root.find('size')
w =int(size.find('width').text)
h =int(size.find('height').text)for obj in root.iter('object'):
cls = obj.find('name').text
# print(cls)if cls notin classes:continue
cls_id = classes.index(cls)
xmlbox = obj.find('bndbox')
b =(float(xmlbox.find('xmin').text),float(xmlbox.find('xmax').text),float(xmlbox.find('ymin').text),float(xmlbox.find('ymax').text))
bb = convert((w, h), b)
out_file.write(str(cls_id)+" "+" ".join([str(a)for a in bb])+'\n')# 输出到指定文件夹
xml_path = os.path.join(CURRENT_DIR,'Annotation/')print(xml_path)# xml list
img_xmls = os.listdir(xml_path)for img_xml in img_xmls:print(img_xml)
label_name = img_xml.split('.')[0]print(label_name)
convert_annotation(label_name)# 生成classes文件
class_txt =open('Annotation/yolo/classes.txt','w')# 你的输出文件夹地址for obj in classes:print(obj)
class_txt.write(obj+'\n')
class_txt.close()