import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir,getcwd
from os.path import join
import glob
classes=["crazing","inclusion",'patches',"pitter_surface","rolled-in_scale","scratches"]
def convert(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)
def convert_annotation(image_name):
in_file=open(r'C:\Users\xy\Desktop\netdet\NEU-DET\ANNOTATIONS\\'+image_name[:-3]+'xml')#读取xml文件
out_file=open(r'C:\Users\xy\Desktop\netdet\NEU-DET\LABELS\\'+image_name[:-3]+'txt','w')
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
if cls not in classes:
print(cls)
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')
wd=getcwd()
if __name__ == '__main__':
for image_path in glob.glob((r"C:\Users\xy\Desktop\netdet\NEU-DET\IMAGES\*.jpg")):
print('done')
image_name=image_path.split('\\')[-1]
convert_annotation(image_name)
print('done')
COCO数据集格式---XML转txt格式脚本
最新推荐文章于 2023-08-25 13:48:32 发布