数据集XML标签转YOLO标签

这篇具有很好参考价值的文章主要介绍了数据集XML标签转YOLO标签。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据集XML标签转YOLO标签

XML格式数据集标签转YOLO数据集格式标签

在进行目标检测任务时,我们需要对数据集进行标注。常见的数据集标注格式有XML格式和YOLO格式,其中XML格式标注文件通常由目标框的左上角和右下角坐标组成,而YOLO格式标注文件则由目标框的中心点坐标、宽度和高度组成。

本文将介绍如何将XML格式的标注文件转为YOLO格式的标注文件。我们将使用Python语言来实现这一转换过程。

准备工作

在转换之前,我们需要准备好两个文件夹:一个存放XML格式标注文件的文件夹,一个存放转换后的txt格式标注文件的文件夹。此外,我们还需要定义一个包含目标类别的列表。

classes = ["A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10",
           "A11", "A12", "A13", "A14", "A15", "A16", "A17", "A18", "A19", "A20"]

标注转换函数

我们将定义一个名为convert_annotation的函数,用于将单个XML格式标注文件转为YOLO格式标注文件。该函数的输入参数为标注文件的名称(不包括扩展名),输出参数为转换后的txt格式标注文件。

def convert_annotation(image_id):
    in_file = open('./label_xml\\%s.xml' % (image_id), encoding='UTF-8')
    out_file = open('./label_txt\\%s.txt' % (image_id), 'w')  # 生成txt格式文件
    tree = ET.parse(in_file)
    root = tree.getroot()
    size = root.find('size')
    w = int(size.find('width').text)
    h = int(size.find('height').text)

    for obj in root.iter('object'):
        cls = obj.find('name').text
        if cls not in classes:
            continue
        cls_id = classes.index(cls)
        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_id) + " " +
                       " ".join([str(a) for a in bb]) + '\\n')

在该函数中,我们首先打开XML格式标注文件,并创建一个txt格式标注文件。然后,我们解析XML格式标注文件,获取图片的宽度和高度。接着,我们遍历XML文件中的目标框,将目标框的类别转换为对应的类别ID,并计算出目标框在YOLO格式中的表示方式。最后,我们将类别ID和目标框信息写入txt格式标注文件中。

批量转换

当我们定义好标注转换函数后,我们还需要编写代码来批量转换XML格式标注文件。下面的代码将遍历XML格式标注文件所在的文件夹,对每个XML格式标注文件进行转换,并将转换后的txt格式标注文件保存到指定的文件夹中。

xml_path = os.path.join(CURRENT_DIR, './label_xml/')

# xml list
img_xmls = os.listdir(xml_path)
for img_xml in img_xmls:
    label_name = img_xml.split('.')[0]
    print(label_name)
    convert_annotation(label_name)

结论

本文介绍了如何将XML格式的标注文件转为YOLO格式的标注文件。我们使用Python语言实现了这一转换过程,并提供了批量转换的代码。这些代码可以帮助我们更快速地进行目标检测任务,并提高我们的工作效率。

全代码如下文章来源地址https://www.toymoban.com/news/detail-724985.html

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import copy
from lxml.etree import Element, SubElement, tostring, ElementTree

import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join

classes = ["A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10",
           "A11", "A12", "A13", "A14", "A15", "A16", "A17", "A18", "A19", "A20"]  # 类别

CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))


def convert(size, box):
    dw = 1. / size[0]
    dh = 1. / size[1]
    x = (box[0] + box[1]) / 2.0
    y = (box[2] + box[3]) / 2.0
    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('./label_xml\%s.xml' % (image_id), encoding='UTF-8')
    out_file = open('./label_txt\%s.txt' % (image_id), 'w')  # 生成txt格式文件
    tree = ET.parse(in_file)
    root = tree.getroot()
    size = root.find('size')
    w = int(size.find('width').text)
    h = int(size.find('height').text)

    for obj in root.iter('object'):
        cls = obj.find('name').text
        # print(cls)
        if cls not in classes:
            continue
        cls_id = classes.index(cls)
        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_id) + " " +
                       " ".join([str(a) for a in bb]) + '\n')


xml_path = os.path.join(CURRENT_DIR, './label_xml/')

# xml list
img_xmls = os.listdir(xml_path)
for img_xml in img_xmls:
    # print(img_xml)
    label_name = img_xml.split('.')[0]
    print(label_name)
    convert_annotation(label_name)

到了这里,关于数据集XML标签转YOLO标签的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • YOLOV3 SPP 目标检测项目(针对xml或者yolo标注的自定义数据集)

    项目下载地址:YOLOV3 SPP网络对自定义数据集的目标检测(标注方式包括xml或者yolo格式) 目标检测边界框的表现形式有两种: YOLO(txt) : 第一个为类别,后面四个为边界框,x,y中心点坐标以及h,w的相对值  xml文件:类似于网页的标注文件,里面会存放图像名称、高度宽度信息

    2024年02月04日
    浏览(44)
  • 常用脚本-持续更新(文件重命名、视频抽帧、拆帧、删除冗余文件、yolo2xml、转换图片格式、修改xml)

    所有代码位置 :Learning-Notebook-Codes/Python/常用脚本 脚本路径: codes/files_rename.py 脚本说明:可以自动重命名某个文件夹下指定类型的文件。 修改前文件名称: img1.jpg 修改后文件名称: Le0v1n-20231123-X-0001.jpg 脚本路径: codes/extract_frames.py 脚本说明:根据帧间隔对某个文件夹下指定

    2024年02月20日
    浏览(52)
  • [yolov5] yolo的数据标签格式

    yolov5 的标签格式 https://github.com/ultralytics/yolov5/issues/9816 你好!。感谢您询问YOLOv5🚀数据集格式。用于分割的XY坐标与用于长方体中心的标准坐标相同。 为了正确训练,您的数据必须为YOLOv5格式。有关数据集设置的完整文档以及开始培训您的第一个模型所需的所有步骤,请参阅

    2024年02月04日
    浏览(53)
  • YOLO目标检测——无人机航拍行人检测数据集下载分享【含对应voc、coc和yolo三种格式标签】

    实际项目应用 :智能交通管理、城市安防监控、公共安全救援等领域 数据集说明 :无人机航拍行人检测数据集,真实场景的高质量图片数据,数据场景丰富 标签说明 :使用lableimg标注软件标注,标注框质量高,含voc(xml)、coco(json)和yolo(txt)三种格式标签,分别存放在不同文件

    2024年01月18日
    浏览(54)
  • YOLO目标检测——VOC2007数据集+已标注VOC格式标签下载分享

    VOC2007数据集是一个经典的目标检测数据集,该数据集包含了20个常见的目标类别,涵盖了人、动物、交通工具等多个领域,共同11220图片。使用lableimg标注软件标注,标注框质量高,标签格式为VOC格式(即xml标签),可以直接用于YOLO系列的目标检测。 数据集点击下载 :YOLO目

    2024年02月09日
    浏览(48)
  • YOLO目标检测——棉花病虫害数据集+已标注txt格式标签下载分享

    实际项目应用 :棉花病虫害防治 数据集说明 :棉花病虫害检测数据集,真实场景的高质量图片数据,数据场景丰富 标签说明 :使用lableimg标注软件标注,标注框质量高,含voc(xml)、coco(json)和yolo(txt)三种格式标签,分别存放在不同文件夹下,可以直接用于YOLO系列的目标检测

    2024年02月09日
    浏览(47)
  • Yolov5数据集标签的txt格式与xml相互转换

    在使用yolov5制作数据集时,yolov5使用txt格式的标签,打标签的工具如labelimg使用的是xml格式的标签,需要进行数据集格式的转换: txt格式的数据集标签转为xml格式 xml格式的数据集标签转为txt格式

    2024年02月15日
    浏览(50)
  • 【表面缺陷检测】铝型材表面缺陷检测数据集介绍(含xml标签文件)

    铝型材是一种由铝合金材料制成的,具有固定截面形状和尺寸的条形建材。由于其优良的物理性能和广泛的应用领域,铝型材在现代工业和生活中发挥着重要的作用。 根据截面形状的不同,铝型材可分为角铝、槽铝、工字铝、方管铝等多种类型。每种类型的铝型材都有其独特

    2024年02月08日
    浏览(41)
  • 【3D 图像分割】基于 Pytorch 的 3D 图像分割6(数据预处理之LIDC-IDRI 标签 xml 标签转储及标记次数统计 )

    由于之前哔站作者整理的 LUNA16 数据处理方式过于的繁琐,于是,本文就对 LUNA16 数据做一个新的整理,最终得到的数据和形式是差不多的。但是,主要不同的是代码逻辑比较的简单,便于理解。 对于 LUNA16 数据集的学习,可以去参考这里:【3D 图像分类】基于 Pytorch 的 3D 立

    2024年02月04日
    浏览(53)
  • 100种目标检测数据集【voc格式yolo格式json格式coco格式】+YOLO系列算法源码及训练好的模型

    提示:本文介绍并分享了应用于 各行业 、 各领域 非常有用的 目标检测数据集 (感谢您的关注+三连, 数据集持续更新中… ),其中绝大部分数据集作者 已应用于各种实际落地项目 ,数据集 整体质量好 , 标注精确 ,数据的 多样性充分 , 训练 模型拟合较好 ,具有较高

    2023年04月09日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包