YOLO格式数据集(.txt)如何转换为VOC格式数据集(.xml)

news/2024/7/11 1:29:14 标签: YOLO, xml

前言:

安装好python环境与编译器

转换:

将标注文件从文本格式(.txt)转换为 XML 格式(.xml)可以通过以下步骤完成:

  1. 解析文本标注文件:打开 .txt 文件,逐行读取每个标注,并解析边界框坐标和类别信息。
  2. 创建 XML 文件:使用 Python 的内置库 xml.etree.ElementTree 创建一个 XML 树,然后逐个添加 XML 元素来表示图像和标注信息。
  3. 将 XML 树写入文件:将构建的 XML 树写入一个新的 .xml 文件中,以实现标注信息的转换。

PS:通常情况下,.txt 文件中的每一行应该包含一条标注信息,其中包括类别信息。以下是一种可能的 .txt 文件的格式: 

class_id x_min y_min x_max y_max 

其中 x_miny_minx_maxy_max 是标注框的坐标,class_id 是类别标识。如果在你的数据中类别信息不是放在每行的最后一列,你需要根据你的数据格式进行相应的调整。

按照上面的YOLO格式,具体代码如下所示

import os
import xml.etree.ElementTree as ET

def convert_txt_to_xml(txt_folder, xml_folder, classes):
    txt_files = [f for f in os.listdir(txt_folder) if f.endswith('.txt')]
    
    for txt_file in txt_files:
        txt_path = os.path.join(txt_folder, txt_file)
        xml_path = os.path.join(xml_folder, os.path.splitext(txt_file)[0] + '.xml')
        
        with open(txt_path, 'r') as txt_file:
            lines = txt_file.readlines()

        root = ET.Element('annotation')

        for line in lines:
            line = line.strip().split()
            if len(line) < 5:
                continue
            
            class_index = int(float(line[0]))  # 类别索引
            class_name = classes[class_index]  # 类别名称
            xmin, ymin, xmax, ymax = map(int, map(float, line[1:5]))  # 坐标转换为整数

            obj = ET.SubElement(root, 'object')
            ET.SubElement(obj, 'name').text = class_name
            bbox = ET.SubElement(obj, 'bndbox')
            ET.SubElement(bbox, 'xmin').text = str(xmin)
            ET.SubElement(bbox, 'ymin').text = str(ymin)
            ET.SubElement(bbox, 'xmax').text = str(xmax)
            ET.SubElement(bbox, 'ymax').text = str(ymax)

        tree = ET.ElementTree(root)
        tree.write(xml_path)

# 要转换的文件夹路径和输出的文件夹路径
txt_folder = 'labels' #txt文件夹
xml_folder = 'labels_xml_folder'  #目标xml文件夹
classes = ['pig', 'stand', 'lie', 'drink', 'lie', 'eat']  # 类别列表

convert_txt_to_xml(txt_folder, xml_folder, classes)

这段代码会将txt文件夹中的每个txt文件转换为相应的xml文件,并根据类别索引匹配对应的类别名称。


http://www.niftyadmin.cn/n/4942042.html

相关文章

简单记录牛客top101算法题(初级题C语言实现)BM24 二叉树的中序遍历 BM28 二叉树的最大深度 BM29 二叉树中和为某一值的路径

1. BM24 二叉树的中序/后续遍历 要求&#xff1a;给定一个二叉树的根节点root&#xff0c;返回它的中序遍历结果。                          输入&#xff1a;{1,2,#,#,3} 返回值&#xff1a;[2,3,1]1.1 自己的整体思路&#xff08;与二叉树的前序遍…

leetcode做题笔记79单词搜索

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那些水平相邻或垂直相…

简单认识excel篇章1

excel是Office办公软件中的组件之一&#xff0c;它专长于对表格中的数据进行计算和统计管理&#xff0c;通常用于财务或其他数据管理的表格制作&#xff0c;同时excel还有很好的可视化能力&#xff0c;可用于制作各种行业报告。 在Microsoft Excel中&#xff0c;excel文件的后缀…

3. 爬取自己CSDN博客列表(自动方式)(分页查询)(网站反爬虫策略,需要在代码中添加合适的请求头User-Agent,否则response返回空)

文章目录 步骤打开谷歌浏览器输入网址按F12进入调试界面点击网络&#xff0c;清除历史消息按F5刷新页面找到接口&#xff08;community/home-api/v1/get-business-list&#xff09;接口解读 撰写代码获取博客列表先明确返回信息格式json字段解读 Apipost测试接口编写python代码…

CentOS 8 安装 oracle 23c CentOS9 Error deal

1.环境准备 软件准备 序号 软件 下载地址 1 VirtualBox https://www.virtualbox.org/wiki/Downloads2 CentOS Stream 8 https://mirrors.tuna.tsinghua.edu.cn/centos/8-stream/isos/x86_64/CentOS-Stream-8-x86_64-latest-dvd1.iso3 oracle-database-free-23c # cd ~/Down…

科大讯飞星火模型申请与chatgpt 3.5模型以及new bing的对比

科大讯飞星火模型 申请科大讯飞星火认知大模型账号科大讯飞星火认知大模型使用1.界面介绍2. 在编程能力上与chatgpt 3.5对比科大讯飞星火模型chatgpt 3.5模型 3. 在图片生成能力上与new bing对比 总结 申请科大讯飞星火认知大模型账号 注册网址&#xff1a; 科大讯飞星火认知大…

Android Framework 动态更新插拔设备节点执行权限

TF卡设备节点是插上之后动态添加&#xff0c;所以不能通过初始化设备节点权限来解决&#xff0c;需要监听TF插入事件&#xff0c;在init.rc 监听插入后动态更新设备节点执行权限 添加插拔TF卡监听 frameworks/base/services/core/java/com/android/server/StorageManagerServic…

一.net core 自动化发布到docker (Jenkins安装)

目录 1.安装Jenkins 参考资料:https://www.jenkins.io/doc/book/installing/docker/#downloading-and-running-jenkins-in-docker 1.Open up a terminal window.(打开一个终端窗口。) 2.Create a bridge network in Docker using the following docker network create comma…