需要提前存在保存yolo格式的txt文件夹
这是我的xml文件格式
import xml.etree.ElementTree as ET
import os
# 定义类别列表
classes = ['E2', 'Q1'] #修改为自己的类别
# 指定XML文件所在目录
xml_dir = 'E:/datasets/labels' # 修改为包含XML文件的目录路径
# 指定目标目录
output_dir = 'E:/datasets/labels_txt' # 修改为你想要保存YOLO格式文件的目标目录(labels_txt文件夹需要已存在,python不会自动生成)
# 遍历XML文件夹中的每个XML文件
for xml_filename in os.listdir(xml_dir):
if xml_filename.endswith('.xml'):
xml_file = os.path.join(xml_dir, xml_filename)
# 读取XML文件
tree = ET.parse(xml_file)
root = tree.getroot()
# 提取图像宽度和高度
width = int(root.find('size/width').text)
height = int(root.find('size/height').text)
# 构建YOLO格式的txt文件名
output_filename = os.path.splitext(xml_filename)[0] + '.txt'
txt_file = os.path.join(output_dir, output_filename)
# 创建YOLO格式的文本文件
with open(txt_file, 'w') as f:
for obj in root.findall('object'):
class_name = obj.find('name').text
if class_name in classes:
class_id = classes.index(class_name)
# 提取边界框坐标
xmin = int(obj.find('bndbox/xmin').text)
ymin = int(obj.find('bndbox/ymin').text)
xmax = int(obj.find('bndbox/xmax').text)
ymax = int(obj.find('bndbox/ymax').text)
# 计算边界框的中心坐标和宽高
x_center = (xmin + xmax) / (2.0 * width)
y_center = (ymin + ymax) / (2.0 * height)
box_width = (xmax - xmin) / width
box_height = (ymax - ymin) / height
# 将目标信息写入YOLO格式的文本文件
f.write(f"{class_id} {x_center} {y_center} {box_width} {box_height}\n")
运行之后的结果:
有任何问题可以私聊我