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

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

# -*- coding:UTF-8 -*-
import os
import cv2def 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系统中文件夹里有该文件,默认的也删不掉,那就直接passif name == '.DS_Store':continueprint(name)# 4.打开txttxtFile = 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.同一张图片,只需要追加写入objectxml_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生成的格式一样,如下所示

目标检测标签文件txt转成xml相关推荐

  1. 基于语义分割Ground Truth(GT)转换yolov5目标检测标签(路面积水检测例子)

    基于语义分割Ground Truth(GT)转换yolov5目标检测标签(路面积水检测例子) 概述 许多目标检测的数据是通过直接标注或者公开平台获得,如果存在语义分割Ground Truth的标签文件 ...

  2. 夏侯南溪搭建目标检测模型——文件结构设计篇

    1 前言 此文章是夏侯南溪搭建目标检测模型--文件夹结构设计篇- 2 文件夹命名 使用小写字母命名,单词之间用短线"-"进行连接,例如: plane-detection 3 项目文 ...

  3. 目标检测: 数据集转换txt转为xml格式

    目录 1.txt数据集格式 2.xml数据集格式 3.转换代码 4.根据xml标签分割出图像中的目标物体 5.效果展示 1.txt数据集格式 第1元素代表类别,第2,3表示目标框的中心位置,第4,5表 ...

  4. 目标检测-VOC数据集txt文件制作方法

    个人微信公众号:AI研习图书馆,欢迎关注~ 深度学习知识及资源分享,学习交流,共同进步~ VOC数据集中txt文件的制作方法 1.引言 本文介绍两种VOC数据集txt文件生成方法,一种是Python实 ...

  5. Visdrone2019数据集.txt标签文件转换为voc格式.XML标签文件

    最近有同学问是否有Visdrone数据集的xml文件,由于本人之前训练数据的时候没有保存xml文件,所以无法共享. 为了解决这个问题,重新写了转换代码并贴出,供大家共同学习使用.(文末附上数据下载网盘 ...

  6. VPGNet数据集解析且将分割标签转化为目标检测标签

    VPGNet交通标志数据集 VPGNet是一个包含了四个场景(晴天,夜间,阴雨等)下的交通路况数据集,其主要是针对地面标志(箭头线,人行道)的任务,该数据集一共包括以下17类地面标注 {0:'back ...

  7. ECCV 2022 | RFLA:基于高斯感受野的微小目标检测标签分配

    前言 在本文中,作者提出了一种基于高斯感受野的标签分配(RFLA)策略用于微小目标检测.并提出了一种新的感受野距离(RFD)来直接测量高斯感受野和地面真值之间的相似性,而不是使用IoU或中心采样策略分 ...

  8. 目标检测——标注文件的格式设计

    1 致谢 感谢陈助教和钟老师的帮助! 2 标注文件的格式设计 标注的文件的格式我们选择CSV文件格式,因为CSV是数据科学中一种十分常用的数据格式,而且结合pandas包可以实现很多便利的数据操作,所 ...

  9. iCAN使用faster r-cnn得到目标检测结果文件为空

    问题在于图片文件夹后少了/,添加上/后解决 -/tf-faster-rcnn/tools/Object_Detector.py --img_dir /home/featurize/Data/exima ...

最新文章

  1. 数学建模中的matlab实例,matlab数学建模实例
  2. “端午节” 送亲戚,送长辈,粽子可视化大屏来帮忙!
  3. HDLBits 系列(6)(Reduction)缩位运算符
  4. maven仓库找不到需要的jar包解决办法-转载
  5. matlab格拉姆施密特,改进的格拉姆-施密特正交化(modified Gram-Schmidt Process)
  6. Pycharm如何自动换行
  7. h3c s7506e 配置手册_H3C交换机s5500Web登录配置
  8. 数据分析:为什么说Python比Excel更简单高效 ?
  9. 在windows平台下搭建Django项目虚拟环境
  10. NextJS基础教程
  11. 易语言代码转换python_易语言通过文本解析的方式把C代码转换成易代码
  12. ASCII码对照表 (0-255)
  13. 产品认证之IP防护等级
  14. WORD图、表标号——题注
  15. mysql基础命令集合
  16. 借助 Lucene.Net 构建站内搜索引擎(上)
  17. 永久域名注册流程知识
  18. sqlserver运行超大sql文件
  19. hibernate之HQL实体更新与删除
  20. PROCAST-重力铸造分析流程

热门文章

  1. 简单描述机械硬盘和固态硬盘的区别
  2. 缔造Android推送服务不死之身
  3. 蚂蚁为什么摔不死?-王睿琦
  4. 第7章用户界面设计工具
  5. 企业微信年度大会召开,壁垒建立私域运营新标准
  6. centos7防火墙关闭telnet端口不通
  7. 关于ubuntu14中libgomp.so.1:version 'GOMP_4.0' not fount问题的解决方案
  8. 腾讯云对象存储 COS 服务之 XML Python SDK 实践
  9. 微信小程序自定义tabbar【中间凸起样式】
  10. eclipse preferences没有android,解决方法:Eclipse的 window--preferences里面没有Android选项...