LabelImg数据标签voc转yolo模式

网上找的教程太麻烦了,自己写了一个
复制代码
import os
import xml.etree.ElementTree as ET

# 定义 VOC 类别列表。
classes = ['有什么标签写什么标签']

# 定义输入和输出目录。
input_dir = 'VOC 数据集路径'
output_dir = 'YOLO 数据集路径'

# 循环遍历输入目录中的每个 XML 文件。
for file_name in os.listdir(input_dir):
    if file_name.endswith('.xml'):
        # 读取 XML 文件。
        xml_file = os.path.join(input_dir, file_name)
        tree = ET.parse(xml_file)
        root = tree.getroot()

        # 获取图像尺寸。
        size = root.find('size')
        width = int(size.find('width').text)
        height = int(size.find('height').text)

        # 创建 YOLO 格式的文本文件。
        txt_file = os.path.join(output_dir, file_name[:-4] + '.txt')
        with open(txt_file, 'w') as f:
            # 循环遍历 XML 文件中的每个对象。
            for obj in root.iter('object'):
                # 获取类别标签。
                cls = obj.find('name').text
                if cls not in classes:
                    continue
                cls_id = classes.index(cls)

                # 获取边界框坐标。
                bbox = obj.find('bndbox')
                xmin = int(bbox.find('xmin').text)
                ymin = int(bbox.find('ymin').text)
                xmax = int(bbox.find('xmax').text)
                ymax = int(bbox.find('ymax').text)

                # 将 VOC 边界框坐标转换为 YOLO 格式。
                x_center = (xmin + xmax) / (2 * width)
                y_center = (ymin + ymax) / (2 * height)
                w = (xmax - xmin) / width
                h = (ymax - ymin) / height

                # 将 YOLO 格式写入文本文件。
                f.write('{} {} {} {} {} {}\n'.format(cls_id, x_center, y_center, w, h, file_name[:-4]))
        
复制代码

核心是这段代码,他可以删掉后四个字符加上.txt

 txt_file = os.path.join(output_dir, file_name[:-4] + '.txt')
posted @   万里同风  阅读(167)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示