'''
将xml格式的标注文件转为yolo的txt格式
将.xml文件放至labels文件夹中,转换后的.txt文件会被放到labelsyolo文件夹中
根据目标类别修改1处
'''
import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join
def convert(size, box):
dw = 1./(size[0])
dh = 1./(size[1])
x = (box[0] + box[1])/2.0 - 1
y = (box[2] + box[3])/2.0 - 1
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_id):
in_file = open('labels/%s.xml'%(image_id)) # 存储路径
out_file = open('labelsyolo/%s.txt'%(image_id), 'w')
tree=ET.parse(in_file)
root = tree.getroot()
#img_path = 'images/%s.jpg'%(image_id)
#img = cv2.imread(img_path)
size = root.find('size')
#size = img.shape
#w,h = size[1],size[0]
w = int(size.find('width').text)
h = int(size.find('height').text)
for obj in root.iter('object'):
# difficult = obj.find('difficult').text
cls = obj.find('name').text
if cls=='cancer': # 修改处1
cls=0
else:
continue
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) + " " + " ".join([str(a) for a in bb]) + '\n')
wd = getcwd()
list_file = os.listdir('labels')
for file in list_file:
f=file.replace('.xml','')
convert_annotation(f)
Python将xml格式的标注文件转为yolo的txt格式
最新推荐文章于 2023-08-03 10:09:44 发布