YOLO格式数据集(.txt)如何转换为VOC格式数据集(.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 ETdef 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:continueclass_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_namebbox = 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.mzph.cn/news/38466.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gin模板语法

Gin模板语法 文章目录 <center> Gin模板语法前提提醒Gin框架启动服务器模板解析模板渲染遇到不同目录下相同的文件如何加载和渲染自定义函数加载静态文件 前提提醒 由于有了前面template包的基础,所以该笔记不再过多详细分析 Gin框架启动服务器 语法: r:gin.Default()/…

Medical Isolated Power Supply System in Angola

安科瑞 华楠 Abstract: Diagnosis and treatment in modern hospitals are inseparable from advanced medical equipment, which are inseparable from safe and reliable power supply. Many operations often last for several hours, and the consequences of a sudden pow…

【UE4 RTS】07-Camera Boundaries

前言 本篇实现的效果是当CameraPawn移动到地图边缘时会被阻挡。 效果 步骤 1. 打开项目设置&#xff0c;在“引擎-碰撞”中&#xff0c;点击“新建Object通道” 新建通道命名为“MapBoundaries”&#xff0c;然后点击接受 2. 向视口中添加 阻挡体积 调整阻挡体积的缩放 向四…

【TypeScript】this指向,this内置组件

this类型 TypeScript可推导的this类型函数中this默认类型对象中的函数中的this明确this指向 怎么指定this类型 this相关的内置工具类型转换ThisParameterType<>ThisParameterType<>ThisType TypeScript可推导的this类型 函数中this默认类型 对象中的函数中的this…

华为OD机试-字符串序列判定

题目描述 给定两个字符串 s和 t &#xff0c;判断 s是否为 t 的子序列。 你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长&#xff08;长度n ~ 500,000&#xff09;&#xff0c;而 s 是个短字符串&#xff08;长度 <100&#xff09;。字符串的一个子序列是原…

Docker容器:docker基础及安装

文章目录 一.docker容器概述1.什么是容器2. docker与虚拟机的区别2.1 docker虚拟化产品有哪些及其对比2.2 Docker与虚拟机的区别 3.Docker容器的使用场景4.Docker容器的优点5.Docker 的底层运行原理6.namespace的六项隔离7.Docker核心概念 二.Docker安装 及管理1.安装 Docker1.…

【科研论文配图绘制】task1 掌握科研绘图的基本知识

【科研论文配图绘制】task1 掌握科研绘图的基本知识 写在最前 8月份Datawhale组队学习&#xff0c;写下该博客记录学习内容 1.科研论文配图的分类与构成 2.科研论文配图的格式和尺寸 3.科研论文配图中的字体和字号设置 4.科研论文配图的版式设计、结构布局和颜色搭配 占个…

机器学习笔记 - 基于C++的​​深度学习 三、实现成本函数

机器学习中的建模 作为人工智能工程师,我们通常将每个任务或问题定义为一个函数。 例如,如果我们正在开发面部识别系统,我们的第一步是将问题定义为将输入图像映射到标识符的函数F(X)。但是问题是如何知道F(X)公式? 事实上,使用公式或一系列固有规则来定义F(X)是不可行的(…

【Go 基础篇】Go语言指针解析:深入理解内存与引用的奥秘

介绍 指针是计算机编程中的重要概念&#xff0c;它提供了直接访问内存地址的能力&#xff0c;为程序的数据处理和内存管理提供了灵活性和效率。在Go语言&#xff08;Golang&#xff09;中&#xff0c;指针也是一种重要的数据类型&#xff0c;用于处理变量的引用和修改。本篇博…

GraphQL(六)登录态校验Directive

GraphQL Directive&#xff08;指令&#xff09;是GraphQL中的一种特殊类型&#xff0c;它允许开发者在GraphQL schema中添加元数据&#xff0c;以控制查询和解析操作的行为 Directive的详细说明及使用可见GraphQL&#xff08;五&#xff09;指令[Directive]详解 本文将介绍通过…

勘探开发人工智能技术:机器学习(6)

0 提纲 7.1 循环神经网络RNN 7.2 LSTM 7.3 Transformer 7.4 U-Net 1 循环神经网络RNN 把上一时刻的输出作为下一时刻的输入之一. 1.1 全连接神经网络的缺点 现在的任务是要利用如下语料来给apple打标签&#xff1a; 第一句话&#xff1a;I like eating apple!(我喜欢吃苹…

06 json数据解析和列表控件

内容回顾 json数据解析 json ----- 对要传输的数据进行封装的工具 json是由json数组([]) 和 json对象({})在qt中,对JSON数据进行处理(解析和打包) JSON数据处理所要包含的类: QJsonDocument -----它的作用是将数据转换成json文档 QJsonArray ---- json数组,就是封装多个…

User-Agent介绍

User-Agent介绍 引言 在Web开发中&#xff0c;我们经常会遇到需要根据不同的用户设备或浏览器类型来进行特定处理的情况。为了达到这样的目的&#xff0c;我们可以使用User-Agent这个HTTP头信息字段来识别用户的设备和浏览器。本篇文章将介绍User-Agent的基本概念、用法以及在…

SpringBoot 学习(02): 从嵌入式系统到嵌入式Servlet SpingBoot 的进化之路

嵌入式系统 计算机操作系统启动后&#xff0c;会加载一系列的功能和服务&#xff0c;而这些东西都不是开发操作系统的人写的&#xff0c;如果想让一个生态快速崛起&#xff0c;那么操作系统的开发人&#xff0c;就要告诉大家&#xff0c;在这个操作系统上&#xff0c;你要遵守…

3.1 Ansible 的使用和配置管理

Ansible 的使用和配置管理 文章目录 Ansible 的使用和配置管理Ansible 基础Ansible 模块和变量主机管理和组织角色和剧本部署应用和配置自动化与批量操作Ansible 常见用例Ansible 最佳实践和性能优化 大纲 Ansible 简介和特点 介绍 Ansible 的定义和作用&#xff0c;以及它在配…

【Java】Guava的Striped类。

Striped类,它提供了一种线程安全的分段锁(Striped Locking)机制。 Striped类可以用于将一组资源或操作分成多个段(Stripes),每个段上都有一个独立的锁。这种机制可以在并发访问时提供更好的性能,因为不同线程可以同时访问不同的段而不会相互阻塞。通常,Striped锁适用于…

pytorch3d成功安装

一、pytorch3d是什么&#xff1f; PyTorch3D的目标是帮助加速深度学习和3D交叉点的研究。3D数据比2D图像更复杂&#xff0c;在从事Mesh R-CNN和C3DPO等项目时&#xff0c;我们遇到了一些挑战&#xff0c;包括3D数据表示、批处理和速度。我们开发了许多有用的算子和抽象&#xf…

【Visual Studio Code】--- Win11 安装 VS Code 超详细

Win11 安装 VS Code 超详细 概述一、下载 Vscode二、安装 Vscode 概述 一个好的文章能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径&#xff0c;学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成长。 一、下载 Vscode Vscode官网 二、…

HTTP和HTTPS协议

目录 一、HTTP和HTTPS区别&#x1f33b; 二、有了https还有使用http场景吗&#x1f34a; 三、https协议的工作原理&#x1f4a5; 四、https协议的优点和缺点&#x1f35e; 一、HTTP和HTTPS区别&#x1f33b; HTTP&#xff08;Hypertext Transfer Protocol&#xff09;和HTT…

时序预测 | MATLAB实现基于KNN K近邻的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于KNN K近邻的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于KNN K近邻的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 基于KNN K近邻的时间序列预测-递归预测未来(多指标评价) …