赞
踩
下面是一个简单的Python脚本,使用xml.etree.ElementTree库来解析XML文件,并将标注信息转换为YOLOv格式的TXT文件。
全部代码:
import xml.etree.ElementTree as ET
import os
def convert_xml_to_yolov(xml_path, output_path, class_mapping):
# 解析XML文件
tree = ET.parse(xml_path)
root = tree.getroot()
# 打开输出文件进行写入
with open(output_path, 'w') as out_file:
for obj in root.findall('object'):
# 获取类别名称
class_name = obj.find('name').text
if class_name not in class_mapping:
print(f"Warning: Class '{class_name}' not in class mapping. Skipping.")
continue
class_id = class_mapping[class_name]
# 获取边界框坐标
bbox = obj.find('bndbox')
xmin = float(bbox.find('xmin').text)
ymin = float(bbox.find('ymin').text)
xmax = float(bbox.find('xmax').text)
ymax = float(bbox.find('ymax').text)
# 计算归一化坐标
width = xmax - xmin
height = ymax - ymin
x_center = xmin + width / 2
y_center = ymin + height / 2
# 归一化坐标
img_width = float(root.find('size').find('width').text)
img_height = float(root.find('size').find('height').text)
x_center /= img_width
y_center /= img_height
width /= img_width
height /= img_height
# 写入输出文件
out_file.write(f"{class_id} {x_center} {y_center} {width} {height}\n")
if __name__ == "__main__":
xml_folder = "path/to/xml/folder"
output_folder = "path/to/output/folder"
class_mapping = {"class1": 0, "class2": 1, "class3": 2} # 使用你的类别映射更新这里
# 遍历文件夹中的每个XML文件
for xml_file in os.listdir(xml_folder):
if xml_file.endswith(".xml"):
xml_path = os.path.join(xml_folder, xml_file)
# 生成输出文件路径
txt_file = os.path.splitext(xml_file)[0] + ".txt"
output_path = os.path.join(output_folder, txt_file)
# 将XML转换为YOLOv格式
convert_xml_to_yolov(xml_path, output_path, class_mapping)
print("Conversion completed.")
请确保替换脚本中的xml_folder,output_folder和class_mapping变量的值,以适应你的文件结构和类别映射。此外,确保你的XML文件中包含适当的标注信息(类别、边界框等)。
请确保替换脚本中的xml_folder,output_folder和class_mapping变量的值
python xml_to_txt.py
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。