【将xml文件转yolov5训练数据txt标签文件】连classes.txt都可以生成
以下是一个简化的Python代码示例,用于将XML文件转换为YOLOv5格式的训练数据txt标签文件。假设你已经有了classes.txt
文件,并且每个XML文件中只有一个对象。
import os
import glob
import xml.etree.ElementTree as ET
# 初始化类别名称
classes = None
with open('clasesses.txt', 'r') as f:
classes = [line.strip() for line in f.readlines()]
class_to_id = {name: i for i, name in enumerate(classes)}
# 转换函数
def convert(xml_files_path, txt_files_path, image_folder):
for xml_file in glob.glob(os.path.join(xml_files_path, '*.xml')):
# 读取图片名称
image_name = os.path.basename(xml_file).replace('.xml', '.jpg')
# 读取XML文件
tree = ET.parse(xml_file)
root = tree.getroot()
# 打开txt文件进行写入
with open(os.path.join(txt_files_path, image_name.replace('.jpg', '.txt')), 'w') as f:
for obj in root.iter('object'):
cls = obj.find('name').text
cls_id = class_to_id[cls]
xml_box = obj.find('bndbox')
xmin = int(xml_box.find('xmin').text) - 1
ymin = int(xml_box.find('ymin').text) - 1
xmax = int(xml_box.find('xmax').text) - 1
ymax = int(xml_box.find('ymax').text) - 1
# 写入标签信息
f.write(' '.join([str(cls_id), str(xmin), str(ymin), str(xmax), str(ymax)]) + '\n')
# 复制图片到指定文件夹
src_img_path = os.path.join(xml_files_path, image_folder, image_name)
dst_img_path = os.path.join(image_folder, image_name)
if not os.path.exists(os.path.dirname(dst_img_path)):
os.makedirs(os.path.dirname(dst_img_path))
os.system('cp {} {}'.format(src_img_path, dst_img_path))
# 调用转换函数
convert('path/to/xml/files', 'path/to/txt/labels', 'path/to/image/folder')
确保替换path/to/xml/files
、path/to/txt/labels
和path/to/image/folder
为你的实际XML文件夹路径、输出标签文件夹路径和图片存放路径。此代码假设你的clasesses.txt
文件中每行包含一个类别名称,并且XML文件中的对象名称与该文件中的类别名称相匹配。如果XML文件中的对象名称与clasesses.txt
文件中的名称不完全匹配,你可能需要一个映射表来处理这种情况。
评论已关闭