当前位置:网站首页>将xml标签转换为txt(voc格式转换为yolo方便进行训练)
将xml标签转换为txt(voc格式转换为yolo方便进行训练)
2022-08-04 03:47:00 【风吹落叶花飘荡】
将xml标签转换为txt(voc格式转换为yolo方便进行训练)
文章目录
一、前言
检索一下其他人的之后,感觉没有我的好用,将自己的代码贡献一下
二、程序
import xml.etree.ElementTree as ET
import os
from os import listdir, getcwd
classes = ["bed", "water horse bucket"] # 换上你标签
def convert(size, box):
dw = 1.0 / size[0]
dh = 1.0 / size[1]
x = (box[0] + box[1]) / 2.0
y = (box[2] + box[3]) / 2.0
w = box[1] - box[0]
h = box[3] - box[2]
x = x * dw
w = w * dw
y = y * dh
h = h * dh
return (x, y, w, h)
def convert_annotation(image_name,labelPath):
# in_file = open(os.path.join(labelPath,image_name[:-3] + 'xml')) # xml文件路径
out_file = open(os.path.join(labelPath+'TXT',image_name[:-3] + 'txt'), 'w') # 转换后的txt文件存放路径
in_file = open(os.path.join(labelPath,image_name[:-3] + 'xml')) # xml文件路径
xml_text = in_file.read()
root = ET.fromstring(xml_text)
in_file.close()
size = root.find('size')
w = int(size.find('width').text)
h = int(size.find('height').text)
# print(root.iter('object'))
for obj in root.iter('object'):
cls = obj.find('name').text
if cls not in classes:
print(cls)
continue
cls_id = classes.index(cls)
xmlbox = obj.find('bndbox')
b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),
float(xmlbox.find('ymax').text))
bb = convert((w, h), b)
#print(bb)
out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')
wd = getcwd()
if __name__ == '__main__':
imgNmae=input('输入图像文件夹的绝对地址:')
labelPath=input('输入xml标注的文件夹的绝对地址:')
#imgNmae='E:\数据集\新建文件夹//bed//bed\data\img'
#labelPath='E:\数据集\新建文件夹//bed/bed\data\labels'
if not os.path.isdir(labelPath+'TXT'):
os.mkdir(labelPath+'TXT')
for image_path in os.listdir(imgNmae): # 每一张图片都对应一个xml文件这里写xml对应的图片的路径
#image_name = image_path.split('\\')[-1]
print(image_path)
convert_annotation(image_path,labelPath)
三、跑通演示
1、修改classes为你的数据集的classes
2、运行:输入图像与标注文件夹绝对地址
四、结果如下:
边栏推荐
- How class only static allocation and dynamic allocation
- 基本表单验证流程
- 2022杭电多校联赛第五场 题解
- y86.第四章 Prometheus大厂监控体系及实战 -- prometheus存储(十七)
- Implementing a server-side message active push solution based on SSE
- 马尔可夫链
- 怎么把elastic中的异常登录ip和日志自动导出或抓取到数据库中?
- 企业直播风起:目睹聚焦产品,微赞拥抱生态
- 出现504怎么办?由于服务器更新导致的博客报504错误[详细记录]
- 【医保科普】维护医保基金安全,我们可以这样做
猜你喜欢
【源码】使用深度学习训练一个游戏
2 Gigabit Optical + 6 Gigabit Electric Rail Type Managed Industrial Ethernet Switch Supports X-Ring Redundant Ring One-key Ring Switch
机器学习模型的“可解释性”
The video of machine learning to learn [update]
自定义通用分页标签01
【 observe 】 super fusion: the first mention of "calculate net nine order" evaluation model, build open prosperity of power network
Significant differences between Oracle and Postgresql in PLSQL transaction rollback
全网没有之一的JMeter 接口测试流程详解
Polygon zkEVM network node
Reproduce 20-character short domain name bypass
随机推荐
DIY电工维修如何拆卸和安装开关面板插座
6-port full Gigabit Layer 2 network managed industrial Ethernet switch Gigabit 2 optical 4 electrical fiber self-healing ERPS ring network switch
高效IO模型
2022杭电多校联赛第五场 题解
Oracle与Postgresql在PLSQL内事务回滚的重大差异
2022年最新海南建筑八大员(材料员)模拟考试试题及答案
Senior PHP development case (1) : use MYSQL statement across the table query cannot export all records of the solution
哎,又跟HR在小群吵了一架!
JVM的内存模型简介
怎么把elastic中的异常登录ip和日志自动导出或抓取到数据库中?
2022 Hangzhou Electric Power Multi-School League Game 5 Solution
劝退背后。
PHP高级开发案例(1):使用MYSQL语句跨表查询无法导出全部记录的解决方案
FPGA parsing B code----serial 3
马尔可夫链
机器学习模型的“可解释性”
使用serve搭建本地服务器
FFmpeg —— 通过修改yuv,将视频转为黑白并输出(附源码)
TOML configuration file format, YAML's top contender
【源码】使用深度学习训练一个游戏