将xml标签转换为txt(voc格式转换为yolo方便进行训练)

简介: 该文章提供了一个Python脚本,用于将VOC格式的XML标签文件转换为YOLO训练所需的TXT格式,包括修改数据集类别、输入图像与标注文件夹地址、转换过程和结果展示。

将xml标签转换为txt(voc格式转换为yolo方便进行训练)

文章目录

  • 将xml标签转换为txt(voc格式转换为yolo方便进行训练)
    • 一、前言
    • 二、程序
    • 三、跑通演示
      • 1、修改classes为你的数据集的classes
      • 2、运行:输入图像与标注文件夹绝对地址
    • 四、结果如下:

一、前言

检索一下其他人的之后,感觉没有我的好用,将自己的代码贡献一下

二、程序

import xml.etree.ElementTree as ET

import os
from os import listdir, getcwd

classes = ["bed", "water horse bucket"] # 换上你标签

def convert(size, box):
    dw = 1.0 / size[0]
    dh = 1.0 / 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_name,labelPath):
   # in_file = open(os.path.join(labelPath,image_name[:-3] + 'xml'))  # xml文件路径

    out_file = open(os.path.join(labelPath+'TXT',image_name[:-3] + 'txt'), 'w')  # 转换后的txt文件存放路径

    in_file = open(os.path.join(labelPath,image_name[:-3] + 'xml'))  # xml文件路径
    xml_text = in_file.read()
    root = ET.fromstring(xml_text)
    in_file.close()
    size = root.find('size')
    w = int(size.find('width').text)
    h = int(size.find('height').text)
   # print(root.iter('object'))
    for obj in root.iter('object'):
        cls = obj.find('name').text
        if cls not in classes:
            print(cls)
            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)
        #print(bb)
        out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')

wd = getcwd()

if __name__ == '__main__':
    imgNmae=input('输入图像文件夹的绝对地址:')
    labelPath=input('输入xml标注的文件夹的绝对地址:')
    #imgNmae='E:\数据集\新建文件夹//bed//bed\data\img'
    #labelPath='E:\数据集\新建文件夹//bed/bed\data\labels'
    if not os.path.isdir(labelPath+'TXT'):
        os.mkdir(labelPath+'TXT')
    for image_path in os.listdir(imgNmae):  # 每一张图片都对应一个xml文件这里写xml对应的图片的路径
        #image_name = image_path.split('\\')[-1]
        print(image_path)
        convert_annotation(image_path,labelPath)

三、跑通演示

1、修改classes为你的数据集的classes

在这里插入图片描述

2、运行:输入图像与标注文件夹绝对地址

在这里插入图片描述

四、结果如下:

在这里插入图片描述

相关文章
|
6月前
|
SQL Java 数据库连接
MyBatis【源码探究 01】mapper.xml文件内<if test>标签判断参数值不等于null和空(当参数值为0)时筛选条件失效原因分析
MyBatis【源码探究 01】mapper.xml文件内<if test>标签判断参数值不等于null和空(当参数值为0)时筛选条件失效原因分析
715 0
MyBatis【源码探究 01】mapper.xml文件内<if test>标签判断参数值不等于null和空(当参数值为0)时筛选条件失效原因分析
|
23天前
|
XML JSON 数据可视化
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
本文详细介绍了不同数据集格式之间的转换方法,包括YOLO、VOC、COCO、JSON、TXT和PNG等格式,以及如何可视化验证数据集。
31 1
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
|
3月前
|
SQL Java 数据库连接
MyBatis Mapper.XML 标签使用说明
MyBatis Mapper.XML 标签使用说明
35 0
|
6月前
|
XML 数据格式 Python
python挑出训练集里图片对应的xml文件,方便统计标签框的类别与数目_python 统计voc2007xml中某一类别框个数(1)
python挑出训练集里图片对应的xml文件,方便统计标签框的类别与数目_python 统计voc2007xml中某一类别框个数(1)
|
6月前
|
XML Java 数据格式
java使用Document类解析xml并创建子标签节点
java使用Document类解析xml并创建子标签节点
|
SQL XML Java
Xml 映射文件中,除了常见的 select|insert|updae|delete 标签之外,还有哪些标签?
Xml 映射文件中,除了常见的 select|insert|updae|delete 标签之外,还有哪些标签?
132 0
|
6月前
|
XML JavaScript 数据格式
python - bs4提取XML/HTML中某个标签下的属性
python - bs4提取XML/HTML中某个标签下的属性
67 0
|
JavaScript 前端开发 Java
13dwr - dwr.xml配置(signatures标签)
13dwr - dwr.xml配置(signatures标签)
30 0
|
JavaScript 前端开发 安全
12dwr - dwr.xml配置(allow标签-Converter属性)
12dwr - dwr.xml配置(allow标签-Converter属性)
48 0
|
开发框架 JavaScript 前端开发
11dwr - dwr.xml配置(allow标签-Creator属性)
11dwr - dwr.xml配置(allow标签-Creator属性)
63 0