python批量 txt转xml_Python版YOLOV3 Label(.txt)文件转xml文件

2023-10-26

最近在训练自己的yolo模型,训练之后想算mAP,发现网络上基本都是VOC数据集的标签制作方法。

我的标签一开始是这样的:

类型,x,y,w,h

所以和VOC的不一样,于是就自己做xml文件,附代码:

from xml.dom.minidom import Document
import os
import cv2

def makexml(txtPath,xmlPath,picPath): #读取txt路径,xml保存路径,数据集图片所在路径
        dict = {'0': "slit_l",#字典对类型进行转换
                '1': "trans_l",
                '2': "slot_l",
                '3': "sink_l",
                '4': "chap_l",
                '5': "block_l",
                '6': "track_l",
                '7': "plash",
                '8': "block_h"}
        files = os.listdir(txtPath)
        for i, name in enumerate(files):
          xmlBuilder = Document()
          annotation = xmlBuilder.createElement("annotation")  # 创建annotation标签
          xmlBuilder.appendChild(annotation)
          txtFile=open(txtPath+name)
          txtList = txtFile.readlines()
          img = cv2.imread(picPath+name[0:-4]+".jpg")
          Pheight,Pwidth,Pdepth=img.shape
          for i in txtList:
             oneline = i.strip().split(" ")

             folder = xmlBuilder.createElement("folder")#folder标签
             folderContent = xmlBuilder.createTextNode("VOC2007")
             folder.appendChild(folderContent)
             annotation.appendChild(folder)

             filename = xmlBuilder.createElement("filename")#filename标签
             filenameContent = xmlBuilder.createTextNode(name[0:-4]+".jpg")
             filename.appendChild(filenameContent)
             annotation.appendChild(filename)

             size = xmlBuilder.createElement("size")  # size标签
             width = xmlBuilder.createElement("width")  # size子标签width
             widthContent = xmlBuilder.createTextNode(str(Pwidth))
             width.appendChild(widthContent)
             size.appendChild(width)
             height = xmlBuilder.createElement("height")  # size子标签height
             heightContent = xmlBuilder.createTextNode(str(Pheight))
             height.appendChild(heightContent)
             size.appendChild(height)
             depth = xmlBuilder.createElement("depth")  # size子标签depth
             depthContent = xmlBuilder.createTextNode(str(Pdepth))
             depth.appendChild(depthContent)
             size.appendChild(depth)
             annotation.appendChild(size)

             object = xmlBuilder.createElement("object")
             picname = xmlBuilder.createElement("name")
             nameContent = xmlBuilder.createTextNode(dict[oneline[0]])
             picname.appendChild(nameContent)
             object.appendChild(picname)
             pose = xmlBuilder.createElement("pose")
             poseContent = xmlBuilder.createTextNode("Unspecified")
             pose.appendChild(poseContent)
             object.appendChild(pose)
             truncated = xmlBuilder.createElement("truncated")
             truncatedContent = xmlBuilder.createTextNode("0")
             truncated.appendChild(truncatedContent)
             object.appendChild(truncated)
             difficult = xmlBuilder.createElement("difficult")
             difficultContent = xmlBuilder.createTextNode("0")
             difficult.appendChild(difficultContent)
             object.appendChild(difficult)
             bndbox = xmlBuilder.createElement("bndbox")
             xmin = xmlBuilder.createElement("xmin")
             mathData=int(((float(oneline[1]))*Pwidth+1)-(float(oneline[3]))*0.5*Pwidth)
             xminContent = xmlBuilder.createTextNode(str(mathData))
             xmin.appendChild(xminContent)
             bndbox.appendChild(xmin)
             ymin = xmlBuilder.createElement("ymin")
             mathData = int(((float(oneline[2]))*Pheight+1)-(float(oneline[4]))*0.5*Pheight)
             yminContent = xmlBuilder.createTextNode(str(mathData))
             ymin.appendChild(yminContent)
             bndbox.appendChild(ymin)
             xmax = xmlBuilder.createElement("xmax")
             mathData = int(((float(oneline[1]))*Pwidth+1)+(float(oneline[3]))*0.5*Pwidth)
             xmaxContent = xmlBuilder.createTextNode(str(mathData))
             xmax.appendChild(xmaxContent)
             bndbox.appendChild(xmax)
             ymax = xmlBuilder.createElement("ymax")
             mathData = int(((float(oneline[2]))*Pheight+1)+(float(oneline[4]))*0.5*Pheight)
             ymaxContent = xmlBuilder.createTextNode(str(mathData))
             ymax.appendChild(ymaxContent)
             bndbox.appendChild(ymax)
             object.appendChild(bndbox)

             annotation.appendChild(object)

          f = open(xmlPath+name[0:-4]+".xml", 'w')
          xmlBuilder.writexml(f, indent='t', newl='n', addindent='t', encoding='utf-8')
          f.close()

makexml("txt所在文件夹","xml保存地址","图片所在地址")

最后的效果图:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python批量 txt转xml_Python版YOLOV3 Label(.txt)文件转xml文件 的相关文章

  • 某网站前端页面性能测试

    1页面性能测试概述 页面性能测试则是针对于页面性能优化而开展的一种性能测试 目的是对Web系统的页面进行测试以确认系统页面是否会影响系统的性能并为页面的优化提供依据与建议 最终提升系统的整体性能表现 提高用户体验满意度 他的关注点是在与页面
  • Centos7/8 安装任意版本 python3 和 pip3

    一 准备工作 1 新环境更新系统 如果是新环境最好要先更新以下系统 yum update yum upgrade y 2 Centos8无法使用yum命令 如果是Centos8提示错误 repo appstream 下载元数据失败 Cann
  • sql 语句 将查询结果中数字等标示转成汉字

    使用case 语句 将sex 字段进行转换 0 1 2 男 女 未知 SELECT u userid u username CASE u sex WHEN 0 THEN 女 WHEN 1 THEN 男 ELSE null END 性别 FR
  • Spring : 缓存相关注解@EnableCaching、@CacheConfig、@Cacheable、@Caching

    1 美图 2 概述 缓存相关注解 解释 EnableCaching 开启缓存注解的支持 CacheConfig 用于统一制定一些配置参数 这样在其他缓存注解里面就不用重复指定 Cacheable 如果之前已经有缓存数据值直接返回缓存数据 否
  • Java 转 C++ 知识点

    目录 配置Clion同步远程环境 0 内存模型 1 变量的作用域 2 typedef与define的区别 3 类的继承范围 4 常量与常函数 5 传值 传引用 6 友元的意义 7 左移运算符重载 8 析构函数 9 带指针的类 10 转型 1
  • 堆——二叉树

    堆 特殊的完全二叉树 最大堆 父结点大于子结点 最小堆 父结点小于子结点 最小堆的较大数下移 最小堆的向下调整 include
  • 蓝桥杯2017年第八届真题-发现环

    题目 题目链接 题解 并查集 DFS 并查集比较明显 因为要判断有没有环 思路也很简单 若不停加边 若两个点的fa是一样的 则说明再加上这两点之间的直接 边就会出现环 因此这两个点一定位于环上 我们以两点中的其中一个点为起点 dfs寻找另一
  • Chromium命令行开关列表1

    Chromium命令行开关列表 Google Chrome浏览器可以使用很多命令行 一些更改功能的行为 其他用于调试或试验 该页面列出了可用的开关 包括其条件和说明 上一次自动更新发生在2020 08 12 Condition Explan
  • Ubuntu下ffmpeg的安装与配置

    安装 配置 FFmpeg包括了目前领先的音 视频编码库libavcodec 提供了录制 转换以及流化音视频的完整解决方案 其强大的功能包括视频采集功能 视频格式转换 视频抓图 给视频加水印等 安装 安装FFmpeg前 需要先安装依赖库 su
  • 完美解决Python各种no module named "XX"问题

    在腾讯云上玩Django 但总是遇到no module name django core wsgi 等问题 在django的 error log中也提示是 no module 但是 本地 python3 wsgi py或者 python3
  • Firefly安装说明

    第三方库依赖 twisted python memcached DBUtils MySQLdb 安装第三方库 1 easy install twisted windows下可以直接用Twisted 12 2 0 win32 py2 6 ex
  • 十年大厂产品的数据分析宝典(下):数据打点、分析、做图表、监控的实用技巧

    序 上半部分文章主要围绕指标 包括选定关键指标 主要指标VS次要指标 从关键结果指标拆解出过程指标 并定下阶段性目标 这些是数据分析的基础工作 在没有做好之前 不建议直接就开始做功能 打点取数等等 如果这部分已经做好了 那么可以看接下来的文
  • 一些测开面试题及答案(个人梳理)

    这里写目录标题 答案对错自辨 文明观看 有错给我说我改 1 白盒测试 黑盒测试 1 1白盒测试 1 2黑盒测试 2 测试流程 3 bug流程 4 压力测试 5 selenium原理 6 选取元素方法 7 servlet生命周期 8 Java
  • Baseline、Benchmark&SOTA

    Baseline Baseline A baseline is a value or starting point on a scale with which other values can be compared 通俗的讲 一个算法被称
  • 一个通过cookie实现的账号密码保存的案例(会分享cookie设置获取删除的封装函数哦)

    相信大家都玩过QQ 但细心地你是否发现有个保存密码的功能 当你选中保存账号密码时 等你下次登录的时候 将直接为你显示出来你的账号密码 省去了我们再次输入的时间 那么这样一个功能是如何实现的呢 我现在通过cookie简单为大家实现一下这个功能
  • 第六章树和二叉树-作业3-Huffman树

    判断题 1 1 对N 2 个权值均不相同的字符构造哈夫曼树 则树中任一非叶结点的权值一定不小于下一层任一结点的权值 T 选择题 2 1 对N N 2 个权值均不相同的字符构造哈夫曼树 下列关于该哈夫曼树的叙述中 错误的是 D A 树中一定没
  • XXE漏洞原理--简单理解

    XXE漏洞简介 1 XXE漏洞全称XML External Entity Injection 即xmI外部实体注入漏洞 XXE漏洞发生在应用程序解析XML输入时 没有禁止外部实体的加载 导致可加载恶意外部文件 造成文件读取 命令执行 内网端
  • 提供HTTP、HTTPS都可访问的API

    情景说明 考虑到数据的安全传输 现在用到HTTPS进行API调用的越来越多了 本节就介绍如何使自己编写的API能让别人 进行HTTP HTTPS调用 先看一下一般情况 正常编写一个 使用HTTP访问一下 不写的话 默认使用HTTP协议进行访
  • 八、模板方法模式

    定义 模板方法模式 在一个方法中定义一个算法骨架 而将一些步骤延迟到子类中 模板方法使得子类可以在不改变算法结构的情况下 重新定义算法中的某些步骤 UML类图 说明 1 AbstractClass抽象中包含了模板方法 primitiveOp

随机推荐

  • ERC20的创建及合约之间的调用(合约调用合约)

    ERC20 Token ERC20是一个token合约标准 具体的概念和友好的合约库 可参考openzeppelin 接下来的代码创建一个erc20 token SPDX License Identifier GPL 3 0 pragma
  • webupload 实现大文件分片上传

    废话不多说 直接上例子 html代码 div class layui form item div
  • 1.Ros初学笔记

    1 创建workspace 名字是catkin ws mkdir p catkin ws src 2 初始化环境 生成build 编译成功的可执行文件 devel src 代码包 cd catkin ws catkin make 3 为了让
  • Ubuntu JetBrains(JetBrains Account Error:JetBrains Account connection error: www.jetbrains.com)

    问题 Your host may be behind a proxy 在使用学生免费账户登录的时候出现错误 解决 修改 etc hosts文件 将其中的 jetbrains的相关行去掉即可
  • Over-COM:一种可折叠的头部医疗支架

    为了帮助医生对颅内疾病进行更精准的诊断 来自中国的Lailu Li科研团队设计了一个架空可折叠的头部支架 Over COM 该支架包括一个固定在患者头部的装置 外壳 8个线性执行器和1个IMU 惯性测量单元 以及一个远离病人的小盒子 包含微
  • Doc2vec计算文本相似度

    1 Doc2vec模型介绍 Doc2Vec模型基于Word2vec模型 并在其基础上增加了一个段落向量 以Doc2Vec的C BOW方法为例 算法的主要思想在以下两个方面 训练过程中新增了paragraph id 即训练语料中每个句子都有一
  • java栈与队列

    3 栈 栈是一种特殊的线性表 栈只能在一端 栈顶 进行操作 往栈里添加元素叫入栈 删除栈里的元素叫出栈 后进的元素先出 官方栈 java util Stack 栈的应用 浏览器的前进与后退 如果输入三个网址 假设123三个 出栈过程 后退操
  • SpringCloud服务间调用

    SpringCloud服务间的调用有两种方式 RestTemplate和FeignClient 不管是什么方式 他都是通过REST接口调用服务的http接口 参数和结果默认都是通过jackson序列化和反序列化 因为Spring MVC的R
  • 修改jar包增加自己需要功能的操作步骤(小白实践)

    一 修改静态文件的方式比较简单 1 先将要修改的jar包备份 cp xxx jar xxx 2 jar 2 建立一个新的目录便于后面的打包 mkdir jar tmp 3 将包放到刚刚创建的目录里解压 mv xxx 2 jar jar tm
  • GUI系统之SurfaceFlinger(11)SurfaceComposerClient

    文章都是通过阅读源码分析出来的 还在不断完善与改进中 其中难免有些地方理解得不对 欢迎大家批评指正 转载请注明 From LXS http blog csdn net uiop78uiop78 GUI系统之SurfaceFlinger章节目
  • qwtplot3D安装--终结解决方案

    帮同学做一个地热信息展示的软件 需要用到3D显示的内容 一方面 自己比较懒 懒去看OpenGL相关的内容 虽然以前做过3D开发相关的内容 但是毕竟需要处理的代码太多了 另一方面 也是一直在用QWT在帮他做2D图形显示这块 因此就想着用qwt
  • python3面向对象

    一些术语 类 class 用来描述具有相同的属性和方法的对象的集合 它定义了该集合中每个对象所共有的属性和方法 对象是类的实例 an example 4 learning class nClass i 123456
  • 论文笔记1——SSDA-YOLO: SEMI-SUPERVISED DOMAIN ADAPTIVE YOLO FOR CROSS-DOMAIN OBJECT DETECTION

    SSDA YOLO SEMI SUPERVISED DOMAIN ADAPTIVE YOLO FOR CROSS DOMAIN OBJECT DETECTION 源码地址 https github com hnuzhy SSDA YOLO
  • c#中“?”的几种用法

    c 中 的几种用法 1 可空类型修饰符 如 A B表示如果A为null则返回B 否则返回A 2 三元运算符 如 bool f false return f true 1 0 如果f为true则返回1 否则返回0 3 空合并运算符 如 a b
  • MySQL 管理方法

    MySQL 管理方法 一 Mysql介绍 二 Mysql启动 三 Mysql用户管理 一 Mysql介绍 MySQL是一个开放源码的小型关联式数据库管理系统 开发者为瑞典MySQL AB公司 目前MySQL被广泛地应用在Internet上的
  • Pytest系列-使用自定义标记mark(6)

    简介 pytest 可以支持自定义标记 自定义标记可以把一个 web 项目划分为多个模块 然后指定模块名称执行 Pytest 里面自定义标记 用法 将 pytest mark 标记名称 放到测试函数或者类上面 使用 执行时加上 m 标记名
  • 单片机新手指导1:STM32单片机学习思路

    学习内容 1 写在前面 1 学习态度 单片机 编程学习需要持续的恒心和毅力 涉及的学科跨度大 知识多 前期需长期投入大的精力入门 整个学习过程中最难的是入门这一步 也就是从0到1的过程 后期的学习是从1到10 由于掌握了一定的学习方法 所以
  • 真题详解(有向图)-软件设计(六十二)

    真题详解 极限编程 软件设计 六十一 https blog csdn net ke1ying article details 130435971 CMM指软件成熟度模型 一般1级成熟度最低 5级成熟度最高 采用更高级的CMM模型可以提高软件
  • 2022最简单易懂的IOS App打包发布完整流程

    创建appid标识符 进入apple开发者中心点击Account 点击Certificates Identifiers Profiles 创建AppIDS标识符 点击左侧菜单栏Identifiers 再点击 按钮 选择App IDs 再点击
  • python批量 txt转xml_Python版YOLOV3 Label(.txt)文件转xml文件

    最近在训练自己的yolo模型 训练之后想算mAP 发现网络上基本都是VOC数据集的标签制作方法 我的标签一开始是这样的 类型 x y w h 所以和VOC的不一样 于是就自己做xml文件 附代码 from xml dom minidom i