目标检测数据集格式转换:txt格式转换为xml格式(以VisDrone数据集为例)

2023-10-10 15:36

本文主要是介绍目标检测数据集格式转换:txt格式转换为xml格式(以VisDrone数据集为例),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.准备好两个文件夹

VisDroneTxt文件夹里面装的是原图片以及txt格式的标签

VisDroneVoc里面的labels文件夹是目标文件夹,用来装转换之后的xml格式标签

2.给出原转换程序

# .txt-->.xml
# ! /usr/bin/python
# -*- coding:UTF-8 -*-
import os
import cv2def txt_to_xml(txt_path, img_path, xml_path):# 1.字典对标签中的类别进行转换dict = {'0': "organoid",'1': "car",'2': "bus",'3': "ufo",'4': "robot",'5': "virus",'6': "trunk",'7': "plash",'8': "biycle"}# 2.找到txt标签文件夹files = os.listdir(txt_path)# 用于存储 "老图"pre_img_name = ''# 3.遍历文件夹for i, name in enumerate(files):# 许多人文件夹里有该文件,默认的也删不掉,那就直接passif name == "desktop.ini":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>VOC2007</folder>\n')xml_file.write('    <filename>' + img_name + '.jpg' + '</filename>\n')xml_file.write('<source>\n')xml_file.write('<database>orgaquant</database>\n')xml_file.write('<annotation>organoids</annotation>\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>' + dict[oneline[0]] + '</name>\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>' + dict[oneline[0]] + '</name>\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 !")# 修改成自己的文件夹 注意文件夹最后要加上/
txt_to_xml("txt_path/", "img_path/", "xml_path/")

3.需要修改的地方

3.1 修改标签类别:

修改之后

3.2将路径修改成自己文件夹的路径

3.3 修改之后的完整代码

# .txt-->.xml
# ! /usr/bin/python
# -*- coding:UTF-8 -*-
import os
import cv2def txt_to_xml(txt_path, img_path, xml_path):# 1.字典对标签中的类别进行转换dict = {'0': "pedestrian",'1': "people",'2': "bicycle",'3': "car",'4': "van",'5': "truck",'6': "tricycle",'7': "awning-tricycle",'8': "bus",'9': "motor"}# 2.找到txt标签文件夹files = os.listdir(txt_path)# 用于存储 "老图"pre_img_name = ''# 3.遍历文件夹for i, name in enumerate(files):# 许多人文件夹里有该文件,默认的也删不掉,那就直接passif name == "desktop.ini":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>VOC2007</folder>\n')xml_file.write('    <filename>' + img_name + '.jpg' + '</filename>\n')xml_file.write('<source>\n')xml_file.write('<database>orgaquant</database>\n')xml_file.write('<annotation>organoids</annotation>\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>' + dict[oneline[0]] + '</name>\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>' + dict[oneline[0]] + '</name>\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 !")# 修改成自己的文件夹 注意文件夹最后要加上/
txt_to_xml("VisDroneTxt/labels/", "VisDroneTxt/images/", "VisDroneXml/labels/")

4.运行.py文件

5.转换成功

到此为止,将Visdrone数据集的标签格式从txt转换为xml。

这篇关于目标检测数据集格式转换:txt格式转换为xml格式(以VisDrone数据集为例)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/181378

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装