目标检测标签文件txt转成xml
最近在用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相关推荐
- 基于语义分割Ground Truth(GT)转换yolov5目标检测标签(路面积水检测例子)
基于语义分割Ground Truth(GT)转换yolov5目标检测标签(路面积水检测例子) 概述 许多目标检测的数据是通过直接标注或者公开平台获得,如果存在语义分割Ground Truth的标签文件 ...
- 夏侯南溪搭建目标检测模型——文件结构设计篇
1 前言 此文章是夏侯南溪搭建目标检测模型--文件夹结构设计篇- 2 文件夹命名 使用小写字母命名,单词之间用短线"-"进行连接,例如: plane-detection 3 项目文 ...
- 目标检测: 数据集转换txt转为xml格式
目录 1.txt数据集格式 2.xml数据集格式 3.转换代码 4.根据xml标签分割出图像中的目标物体 5.效果展示 1.txt数据集格式 第1元素代表类别,第2,3表示目标框的中心位置,第4,5表 ...
- 目标检测-VOC数据集txt文件制作方法
个人微信公众号:AI研习图书馆,欢迎关注~ 深度学习知识及资源分享,学习交流,共同进步~ VOC数据集中txt文件的制作方法 1.引言 本文介绍两种VOC数据集txt文件生成方法,一种是Python实 ...
- Visdrone2019数据集.txt标签文件转换为voc格式.XML标签文件
最近有同学问是否有Visdrone数据集的xml文件,由于本人之前训练数据的时候没有保存xml文件,所以无法共享. 为了解决这个问题,重新写了转换代码并贴出,供大家共同学习使用.(文末附上数据下载网盘 ...
- VPGNet数据集解析且将分割标签转化为目标检测标签
VPGNet交通标志数据集 VPGNet是一个包含了四个场景(晴天,夜间,阴雨等)下的交通路况数据集,其主要是针对地面标志(箭头线,人行道)的任务,该数据集一共包括以下17类地面标注 {0:'back ...
- ECCV 2022 | RFLA:基于高斯感受野的微小目标检测标签分配
前言 在本文中,作者提出了一种基于高斯感受野的标签分配(RFLA)策略用于微小目标检测.并提出了一种新的感受野距离(RFD)来直接测量高斯感受野和地面真值之间的相似性,而不是使用IoU或中心采样策略分 ...
- 目标检测——标注文件的格式设计
1 致谢 感谢陈助教和钟老师的帮助! 2 标注文件的格式设计 标注的文件的格式我们选择CSV文件格式,因为CSV是数据科学中一种十分常用的数据格式,而且结合pandas包可以实现很多便利的数据操作,所 ...
- iCAN使用faster r-cnn得到目标检测结果文件为空
问题在于图片文件夹后少了/,添加上/后解决 -/tf-faster-rcnn/tools/Object_Detector.py --img_dir /home/featurize/Data/exima ...
最新文章
- php中file_get_contents如何读取大容量文件
- 岳阳机器人餐厅在哪_从机器人咖啡看未来餐饮行业大方向,如何才能活下去?...
- VMware下Ubuntu联网操作
- svn中“clean up”死循环问题解决办法
- 基于LZ77算法的文件压缩铺垫
- 如何把一个PDF文件内的部分页码对应的内容导出成一个新的PDF文件
- Java中,为什么子类的构造方法中必须调父类的构造方法?
- LeetCode 329. 矩阵中的最长递增路径(记忆化递归)
- 为什么年轻人挣得很多还是穷?北上广深挑战指数报告~
- 静态内部类----Java
- nginx ngx_http_auth_basic_module(Basic Authentication)
- WebSphere 管理员界面 修改配置之后,没有反应的原因,需要按下[保存]link
- python怎么在运行中查看执行状态_python,_python程序运行时 查看对象状态,python - phpStudy...
- KB954430补丁重复安装失败的解决办法
- Java开发手册(嵩山版)
- 《从零开始做运营》1~2章 读书笔记
- 轻易解决VMware 虚拟机中被提示“请不要在虚拟机中运行此程序“
- mint-ui message box confirm弹框确认和取消按钮的回调
- c语言必背数据结构_C语言实现常用数据结构:简要一览(第1篇
- 企业培训视频如何防止被下载和盗用?
热门文章
- keep-alive的理解?
- 不在轻狂也就不再年少
- nginx php 缓存时间,nginx expires设置数据过期时间
- java游戏 勇者恶龙_西方十大“勇者恶龙”游戏排名公开_电视游戏_新浪游戏_新浪网...
- 基于Darknet的YOLOv4目标检测
- 【vue案例】vue实现tab选项卡
- Golang telnet 端口
- 基于java+springboot+mybatis+vue+elementui的社区医疗服务系统
- 虚拟网络设备 tap/tun 原理解析
- linux内核那些事之Sparse内存模型初始化