目标检测标签文件txt转成xml

2023-11-05

最近在用ppyolo训练好的模型对新采集的数据进行标记,再人工微调,减少从头打标签的时间,但是推理保存的结果都是txt格式的,想要在labelimg中可视化,那就需要将txt转换成xml。

以下代码即可完成这一功能。

# -*- coding:UTF-8 -*-
import os
import cv2

def txt_to_xml(classname_path, txt_path, img_path, xml_path):
    # 1.读取txt文件中的标签类别
    with open(classname_path, 'r') as f:
        classes = f.readlines()  # list, 每个类别末尾都有'\n'
        classes = [cls.strip('\n') for cls in classes]

    # 2.找到txt标签文件夹
    files = os.listdir(txt_path)
    # 用于存储 "老图"
    pre_img_name = ''
    # 3.遍历文件夹
    for i, name in enumerate(files):
        # mac系统中文件夹里有该文件,默认的也删不掉,那就直接pass
        if name == '.DS_Store':
            continue
        print(name)
        # 4.打开txt
        txtFile = open(txt_path + name)
        # 读取所有内容
        txtList = txtFile.readlines()
        # 读取图片名称
        img_name = name.split(".")[0]
        pic = cv2.imread(img_path + img_name + ".jpg")
        # 获取图像大小信息
        Pheight, Pwidth, Pdepth = pic.shape
        # 5.遍历txt文件中每行内容
        for row in txtList:
            # 按' '分割txt的一行的内容
            oneline = row.strip().split(" ")
            # 遇到的是一张新图片
            if img_name != pre_img_name:
                # 6.新建xml文件
                xml_file = open((xml_path + img_name + '.xml'), 'w')
                xml_file.write('<annotation>\n')
                xml_file.write('    <folder>billiards</folder>\n')
                xml_file.write('    <filename>' + img_name + '.jpg' + '</filename>\n')
                xml_file.write('    <path>E:/Images</path>\n')
                xml_file.write('    <source>\n')
                xml_file.write('        <database>orgaquant</database>\n')
                xml_file.write('    </source>\n')
                xml_file.write('    <size>\n')
                xml_file.write('        <width>' + str(Pwidth) + '</width>\n')
                xml_file.write('        <height>' + str(Pheight) + '</height>\n')
                xml_file.write('        <depth>' + str(Pdepth) + '</depth>\n')
                xml_file.write('    </size>\n')
                xml_file.write('    <object>\n')
                xml_file.write('        <name>' + classes[int(oneline[0])] + '</name>\n')
                xml_file.write('        <difficult>' + str(0) + '</difficult>\n')
                xml_file.write('        <bndbox>\n')
                xml_file.write('            <xmin>' + str(
                    int(((float(oneline[1])) * Pwidth + 1) - (float(oneline[3])) * 0.5 * Pwidth)) + '</xmin>\n')
                xml_file.write('            <ymin>' + str(
                    int(((float(oneline[2])) * Pheight + 1) - (float(oneline[4])) * 0.5 * Pheight)) + '</ymin>\n')
                xml_file.write('            <xmax>' + str(
                    int(((float(oneline[1])) * Pwidth + 1) + (float(oneline[3])) * 0.5 * Pwidth)) + '</xmax>\n')
                xml_file.write('            <ymax>' + str(
                    int(((float(oneline[2])) * Pheight + 1) + (float(oneline[4])) * 0.5 * Pheight)) + '</ymax>\n')
                xml_file.write('        </bndbox>\n')
                xml_file.write('    </object>\n')
                xml_file.close()
                pre_img_name = img_name  # 将其设为"老"图
            else:  # 不是新图而是"老图"
                # 7.同一张图片,只需要追加写入object
                xml_file = open((xml_path + img_name + '.xml'), 'a')
                xml_file.write('    <object>\n')
                xml_file.write('        <name>' + classes[int(oneline[0])] + '</name>\n')
                xml_file.write('        <difficult>' + str(0) + '</difficult>\n')
                '''  按需添加这里和上面
                xml_file.write('        <pose>Unspecified</pose>\n')
                xml_file.write('        <truncated>0</truncated>\n')
                xml_file.write('        <difficult>0</difficult>\n')
                '''
                xml_file.write('        <bndbox>\n')
                xml_file.write('            <xmin>' + str(
                    int(((float(oneline[1])) * Pwidth + 1) - (float(oneline[3])) * 0.5 * Pwidth)) + '</xmin>\n')
                xml_file.write('            <ymin>' + str(
                    int(((float(oneline[2])) * Pheight + 1) - (float(oneline[4])) * 0.5 * Pheight)) + '</ymin>\n')
                xml_file.write('            <xmax>' + str(
                    int(((float(oneline[1])) * Pwidth + 1) + (float(oneline[3])) * 0.5 * Pwidth)) + '</xmax>\n')
                xml_file.write('            <ymax>' + str(
                    int(((float(oneline[2])) * Pheight + 1) + (float(oneline[4])) * 0.5 * Pheight)) + '</ymax>\n')
                xml_file.write('        </bndbox>\n')
                xml_file.write('    </object>\n')
                xml_file.close()

        # 8.读完txt文件最后写入</annotation>
        xml_file1 = open((xml_path + pre_img_name + '.xml'), 'a')
        xml_file1.write('</annotation>')
        xml_file1.close()
    print("Done !")

if __name__== '__main__':
    classname_path = '/Users/h1y/Documents/mac2server/billiards/billiards_classes.txt'  # names文件的路径
    # 修改成自己的文件夹 注意文件夹最后要加上/
    txt_path = "/Users/h1y/Documents/mac2server/billiards/txt2xml/labels/"
    img_path = "/Users/h1y/Documents/mac2server/billiards/txt2xml/images/"
    xml_path = "/Users/h1y/Documents/mac2server/billiards/txt2xml/"
    txt_to_xml(classname_path, txt_path, img_path, xml_path)

其中,代码中第一步提到的类别标签txt文件内容格式如下,每一行为一个类别
在这里插入图片描述
转换后的xml文件和labelimg生成的格式一样,如下所示
在这里插入图片描述

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

目标检测标签文件txt转成xml 的相关文章

  • 如何在 Google App Engine 的 Python 中获取 StringProperty 的值?

    如何获取 nbd Model 的值 我想返回由多个字段组成的描述 但我无法让它工作 这是我的班级代码 class User ndb Model name ndb StringProperty email ndb StringProperty
  • 如何让python优雅地失败?

    我只是想知道如何让 python 在所有可能的错误中以用户定义的方式失败 例如 我正在编写一个处理 大 项目列表的程序 并且某些项目可能不符合我定义的格式 如果 python 检测到错误 它目前只会输出一条丑陋的错误消息并停止整个过程 但是
  • Pandas 连接问题:列重叠但未指定后缀

    我有以下数据框 print df a mukey DI PI 0 100000 35 14 1 1000005 44 14 2 1000006 44 14 3 1000007 43 13 4 1000008 43 13 print df b
  • Tipfy:如何在模板中显示blob?

    鉴于在 gae 上使用tipfy http www tipfy org python 以下模型 greeting avatar db Blob avatar 显示 blob 此处为图像 的模板标签是什么 在这种情况下 斑点是一个图像 这很棒
  • 有人可以推荐一个免费的 xslt 工具吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Paramiko SSHException 通道已关闭

    我一直在使用 Paramiko 在 Linux Windows 机器上发送命令 它可以很好地在 Ubuntu 机器上远程执行测试 但是 它不适用于 Windows 7 主机 以下是我收到的错误 def unit for event self
  • 通用详细视图 ProfileView 必须使用对象 pk 或 slug 调用

    我是 Django 2 0 的新手 在访问我的个人资料页面视图时收到此错误 它适用于像这样的网址path users
  • Django 模型字段默认基于另一个模型字段

    我使用 Django Admin 构建一个管理站点 有两张表 一张是ModelA其中有数据 另一个是ModelB里面什么也没有 如果一个模型字段b b in ModelB为None 可以显示在网页上 值为ModelA的场a b 我不知道该怎
  • 按多个键分组并对字典列表的值进行汇总/平均值

    在Python中按多个键进行分组并对字典列表进行汇总 平均值的最Pythonic方法是什么 假设我有一个字典列表 如下所示 input dept 001 sku foo transId uniqueId1 qty 100 dept 001
  • 如何使用 PyMongo 在重复键错误后继续插入

    如果我需要在 MongoDB 中插入尚不存在的文档 db stock update one document set document upsert True 将完成这项工作 如果我错了 请随时纠正我 但是 如果我有一个文档列表并想将它们全
  • Python 3在for循环中更改字典键的值不起作用

    我的 python 3 代码没有按预期工作 def addFunc x y print x y def subABC x y z print x y z def doublePower base exp print 2 base exp d
  • 将列表中的 None 替换为最左边的非 none 值

    Given a None 1 2 3 None 4 None None I d like a None 1 2 3 3 4 4 4 目前我已经用以下方法强制它 def replaceNoneWithLeftmost val last Non
  • 根据第三个变量更改散点图中的标记样式

    我正在处理多列字典 我想绘制两列 然后根据第三列和第四列更改标记的颜色和样式 我很难改变 pylab 散点图中的标记样式 我的方法适用于颜色 不幸的是不适用于标记样式 x 1 2 3 4 5 6 y 1 3 4 5 6 7 m k l l
  • Jupyter Notebook 中的深色模式绘图 - Python

    我正在使用 Jupyter Notebook 目前正在使用 JupyterThemes 的深色日光主题 我注意到我的绘图不是处于黑暗模式 并且文本仍然是黑色并且在日光照射的背景上无法读取 JupyterThemes 的自述文件建议在 ipy
  • 在Python中连续解析文件

    我正在编写一个脚本 该脚本使用 HTTP 流量行解析文件 并取出域 目前仅将它们打印到屏幕上 我正在使用 httpry 将流量连续写入文件 这是我用来删除域名的脚本 usr bin python import re input open r
  • 解组转义 XML

    在 Go 中 我将如何解码此 XML 响应 我尝试过建立一个自定义UnMarshal方法在我的Answerstruct 但我运气不太好
  • 沿轴 0 重复 scipy csr 稀疏矩阵

    我想重复 scipy csr 稀疏矩阵的行 但是当我尝试调用 numpy 的重复方法时 它只是将稀疏矩阵视为对象 并且只会将其作为 ndarray 中的对象重复 我浏览了文档 但找不到任何实用程序来重复 scipy csr 稀疏矩阵的行 我
  • Pip 无法在 Windows 上安装 Twisted

    我正在尝试在 Windows 8 计算机上安装 Twisted 在 Twisted 官方网站上 只有一个 Windows 版的 Wheel 文件 https twistedmatrix com trac wiki Downloads htt
  • Streamlabs API 405 响应代码

    我正在尝试使用Streamlabs API https dev streamlabs com Streamlabs API 使用 Oauth2 来创建应用程序 因此 首先我将使用我的应用程序的用户发送到一个授权链接 其中包含我的应用程序的客
  • 在父类中访问子类变量

    我有一个父类和一个继承的子类 我想知道如何访问我的父类中的子类变量 我尝试了这个但失败了 class Parent object def init self print x class Child Parent x 1 x Child Er

随机推荐

  • android 自定义控件--(圆盘形菜单控件)

    思路原理 定一个原点和一个半径 圆的四周均匀分布每个菜单 为了方便计算 菜单的坐标用度数表示 然后转化为极坐标计算 定某个点为起始点 根据总菜单数确定每个点增加的度数 然后依次确定每个点的度数 也就确定了坐标 源代码 package chr
  • linux下C语言修改文件权限

    头文件
  • Java 统计文本文件中字符数量

    设有一个文本文件word01 txt 内容如下 after a minute or two and said to his friend he opened them again a minute or two and said to fr
  • 【数据结构——树】Trie树的两种实现方式:二叉树(左孩子右兄弟)与二十六叉树

    输入 输入的第一行为一个正整数n 表示词典的大小 其后n行 每一行一个单词 不保证是英文单词 也有可能是火星文单词哦 单词由不超过10个的小写英文字母组成 可能存在相同的单词 此时应将其视作不同的单词 接下来的一行为一个正整数m 表示询问的
  • c++实现哈夫曼huffman压缩文本

    哈夫曼压缩原理就是构建二叉树 出现频率高的字母用更少的位数来表示 实现压缩的效果 比如字符串abcbbc 构建哈夫曼树 这样构建出编码表b gt 0 a gt 10 c gt 11 原本6个字符要48位来表示 现在只需要9位来表示即可 1
  • FairyGui简单介绍

    1 什么是FairyGui 跨平台UI编辑器 支持多种项目 如Unity Cocos2dx CryEngine HavokVision Starling Egret LayaAir Haxe Pixi LibGDX and More 2 a
  • 视频号的播放量和互动率、完播率密不可分

    如何提高视频号播放量 视频号是推荐机制 分两种 社交推荐 朋友给你点赞 我未关注也可能刷到你 和平台推荐 提高系统推荐的两个指标和一个逻辑 两个指标 互动率和完播率 1 互动率 互动率是指互动次数占总播放量的比重 包含 点赞率 评论率 转发
  • 算法 - 递归实现汉诺塔(The Tower of Hanoi)

    目录 引言 分析 分析两片汉诺塔的迁移过程 分析三片汉诺塔的迁移过程 代码实现 递归出口 递归过程 完整程序代码 运行结果 参考资料 引言 今天接触到了一个非常有意思的游戏 名字叫做汉诺塔 Tower of Hanoi 小时候没有玩过这个益
  • web爬虫学习(四)——手机APP爬取

    思路如下 STEP1 为我们的爬虫找到入口 笔者是一个痴迷于挖掘数据中的价值的学习人 希望在平日的工作学习中 挖掘数据的价值 找寻数据的秘密 笔者认为 数据的价值不仅仅只体现在企业中 个人也可以体会到数据的魅力 用技术力量探索行为密码 让大
  • TFTP常用命令

    一 上传到指定文件夹 tftp p l file target ip 这里的file可以是一个目录 如 C User Administrator Documents 二 下载到当前目录 tftp g r file source ip 这里的
  • webug 4.0 第十关 存储型xss

    感谢webug团队一直以来的更新维护 webug是什么 WeBug名称定义为 我们的漏洞 靶场环境基础环境是基于PHP mysql制作搭建而成 中级环境与高级环境分别都是由互联网漏洞事件而收集的漏洞存在的操作环境 部分漏洞是基于Window
  • 将在数组中的对象的 key,做替换

    固定更换个别 key key1 映射 stroke value 替代值不变 比如 value 的 stroke const arrayOfObj key1 value1 key2 value2 key1 value1 key2 value2
  • 什么是CSS权重值?CSS权重值的优先级是什么?

    什么是CSS的权重值 1 权重决定了你css规则怎样被浏览器解析直到生效 css权重关系到你的css规则是怎样显示的 2 当很多的规则被应用到某一个元素上时 权重是一个决定哪种规则生效 或者是优先级的过程 3 每个选择器都有自己的权重 你的
  • 华为OD机试 - 矩阵最大值(Python)

    题目描述 给定一个仅包含0和1的N N二维矩阵 请计算二维矩阵的最大值 计算规则如下 1 每行元素按下标顺序组成一个二进制数 下标越大越排在低位 二进制数的值就是该行的值 矩阵各行值之和为矩阵的值 2 允许通过向左或向右整体循环移动每行元素
  • python selenium从新浪财经网抓取一家公司的高管任职信息写入excel表格

    网址 http vip stock finance sina com cn corp go php vCI CorpManager stockid 600900 phtml 在页面按f12打开开发者工具 在table标签上右键复制xpath
  • SpringMvc学习-4-Spring MVC 拦截器

    SPring MVC JSON数据交互 Spring提供了一个HttpMessageConverter
  • excel多元线性拟合_急,如何用excel拟合多元函数

    数据如下 公式lny lnA aT blnK clnL D 其中AD是固定值 y是生产总值 T是时间 K是固定资产投资 L是就业 求用excel拟合方程求出abc 多谢了 急等各位大侠 生产总值 固定资产投资 时间 就业 522 28 11
  • 胡言乱语

    1 2013 4 10 又梦见你们苍苍的容颜 心里满满的自责 我早该长大了 不应该心存侥幸的在抗拒 让你们承受的太多了 愧疚难当
  • 最新CTR预测服务的GPU优化实践

    CTR模型在互联网的搜索 推荐 广告等场景有着广泛的应用 近年来 随着深度神经网络的引入 CTR模型的推理对硬件算力的要求逐渐增加 本文介绍了美团在CTR模型优化的实践 通过分析模型结构特点 结合GPU硬件架构 我们设计了一系列流程对模型进
  • 目标检测标签文件txt转成xml

    最近在用ppyolo训练好的模型对新采集的数据进行标记 再人工微调 减少从头打标签的时间 但是推理保存的结果都是txt格式的 想要在labelimg中可视化 那就需要将txt转换成xml 以下代码即可完成这一功能 coding UTF 8