将XML格式转化为YOLO需要的txt格式(代码)

1、XML的格式

<annotation><folder>cr</folder><filename>crazing_2.jpg</filename><source><database>NEU-DET</database></source><size><width>200</width><height>200</height><depth>1</depth></size><segmented>0</segmented><object><name>crazing</name><pose>Unspecified</pose><truncated>1</truncated><difficult>0</difficult><bndbox><xmin>99</xmin><ymin>120</ymin><xmax>200</xmax><ymax>174</ymax></bndbox></object><object><name>crazing</name><pose>Unspecified</pose><truncated>1</truncated><difficult>0</difficult><bndbox><xmin>8</xmin><ymin>16</ymin><xmax>200</xmax><ymax>111</ymax></bndbox></object>
</annotation>

我们来读一下这个xml文件核心内容

xmin ymin xmax ymax 这四个值代表了这个图像中的矩形框的位置 并且给这个位置取名为crazing

举个例子 一张有图片

 我们用框框把狗框起来 并且命名这个框为 狗

计算机就知道这个地方有个狗

2、转化代码

import xml.etree.ElementTree as ETimport pickle
import os
from os import listdir, getcwd
from os.path import join
import globclasses = ["crazing", "inclusion", "patches", "pitted_surface", "rolled-in_scale", "scratches"]def convert(size, box):dw = 1.0 / size[0]dh = 1.0 / size[1]x = (box[0] + box[1]) / 2.0y = (box[2] + box[3]) / 2.0w = box[1] - box[0]h = box[3] - box[2]x = x * dww = w * dwy = y * dhh = h * dhreturn (x, y, w, h)def convert_annotation(image_name):in_file = open('./Basic_data/indata/' + image_name[:-3] + 'xml')  # xml文件路径out_file = open('./Basic_data/labels/train/' + image_name[:-3] + 'txt', 'w')  # 转换后的txt文件存放路径f = open('./Basic_data/indata/' + image_name[:-3] + 'xml')xml_text = f.read()root = ET.fromstring(xml_text)f.close()size = root.find('size')w = int(size.find('width').text)h = int(size.find('height').text)for obj in root.iter('object'):cls = obj.find('name').textif cls not in classes:print(cls)continuecls_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)out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')wd = getcwd()if __name__ == '__main__':for image_path in glob.glob("datasets/Basic_data/IMAGES/*.jpg"):  # 每一张图片都对应一个xml文件这里写xml对应的图片的路径image_name = image_path.split('\\')[-1]convert_annotation(image_name)

代码中有注释,大家自己理解一下哈

再给大家看一下我的文件结构


大家只要改三个路径 就能运行了

 最终 给大家看一下生成的txt文件内容 

前面的0代表类别 举个例子 我们检测图片 里面有三个动物 分别是狗 猫 牛那我们就把狗当作0 猫 当作1 牛当作2 这样计算机很容易明白 0后面有四个数字 代表这个类别出现的位置,其实也就是矩形框

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469133.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js 点击button切换颜色_ThingJS 和three.js开发示例对比,让开发早点下班回家!3D 可视化...

ThingJS 3D框架简化了开发工作&#xff0c;面向对象和模块化的特点使得网页代码更加易于管理和维护&#xff0c;并且提供近200个官方示例&#xff0c;直接获取API能力&#xff0c;不需要基于3D概念进行开发&#xff0c;适合3D商业项目快速生成&#xff01;距离您的业务仅一层之…

变量命名

列举一下我自己的一些写法 local_int_loop_count global_int_data_count local_bool_plug_insert_flag global_bool_ble_connect_flag函数命名 get_tick_number set_tick_number为了代码清晰易懂&#xff0c;通常变量名采用一些著名的命名规则&#xff0c;主要有Camel标记法&am…

VSCode使用技巧——Ctrl+鼠标滚轮键使字体进行缩放

点击VSCode左下角的齿轮&#xff0c;进入设置 进入Extensions——》JSON——》Edit in settings.json 在json当中添加如下&#xff1a; "editor.mouseWheelZoom": true,

python 交互式可视化库_Python 交互式可视化库

Python 交互式可视化库 所属分类&#xff1a;中间件编程 开发工具&#xff1a;Python 文件大小&#xff1a;12843KB 下载次数&#xff1a;1 上传日期&#xff1a;2018-12-06 18:40:56 上 传 者&#xff1a;孤独的老张 说明&#xff1a; 一个 Python 交互式可视化库&#xff0c;…

OpenCV各版本差异与演化,从1.x到4.0

最近因项目需要&#xff0c;得把OpenCV捡起来&#xff0c;登录OpenCV官网&#xff0c;竟然发现release了4.0.0-beata版本&#xff0c;所以借此机会&#xff0c;查阅资料&#xff0c;了解下OpenCV各版本的差异及其演化过程&#xff0c;形成了以下几点认识&#xff1a; 新版本的…

python题库刷题训练软件_Python基础练习100题 ( 11~ 20)

刷题继续 上一期和大家分享了前10道题&#xff0c;今天继续来刷11~20 Question 11: Write a program which accepts a sequence of comma separated 4 digit binary numbers as its input and then check whether they are divisible by 5 or not. The numbers that are divisi…

如何学习计算机图形学

http://blog.csdn.net/szchtx/article/details/6916675转载于:https://www.cnblogs.com/ArcherHuang/p/6574560.html

shell for循环

weiqifaubuntu:~/qcom$ for i in $(seq 1 1 10) > do > echo "hello World" > done hello World hello World hello World hello World hello World hello World hello World hello World hello World hello World weiqifaubuntu:~/qcom$ 输入for i in $(s…

西门子s7-200解密软件下载_西门子S7-200/300/400通讯方式汇总,超级全面

1西门子 200 plc 使用 MPI 协议与组态王进行通讯时需要哪些设置?1)在运行组态王的机器上需要安装西门子公司提供的 STEP7 Microwin 3.2 的编程软件&#xff0c;我们的驱动需要调用编程软件提供的 MPI 接口库函数;2)需要将 MPI 通讯卡 CP5611 卡安装在计算机的插槽中&#xff0…

如何监控NVIDIA GPU 的运行状态和使用情况

设备跟踪和管理正成为机器学习工程的中心焦点。这个任务的核心是在模型训练过程中跟踪和报告gpu的使用效率。 有效的GPU监控可以帮助我们配置一些非常重要的超参数&#xff0c;例如批大小&#xff0c;还可以有效的识别训练中的瓶颈&#xff0c;比如CPU活动(通常是预处理图像)占…

进程和线程的本质和区别

进程是什么&#xff1f; 程序并不能单独运行&#xff0c;只有将程序装载到内存中&#xff0c;系统为它分配资源才能运行&#xff0c;而这种执行的程序就称之为进程。程序和进程的区别就在于&#xff1a;程序是指令的集合&#xff0c;它是进程运行的静态描述文本&#xff1b;进程…

HBase学习笔记——概念及原理

1.什么是HBase HBase – Hadoop Database&#xff0c;是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统&#xff0c;利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HBase利用Hadoop HDFS作为其文件存储系统&#xff0c;利用Hadoop MapReduce来处理HBas…

.bat是什么语言_简单说说当我们打开网页时,浏览器到底做了什么?

前言&#xff1a;为什么我们需要掌握浏览器的原理作为一名前端研发&#xff0c;平日里打交道最多的&#xff0c;就是各式各样的客户端。不论你是针对pc端还是移动端&#xff0c;甚至是专门在微信端做前端研发&#xff0c;都需要跟一样东西接触——浏览器。不知道你有没有留意过…

花书《深度学习》代码实现:02 概率部分:概率密度函数+期望+常见概率分布代码实现

1 概率 1.1 概率与随机变量 频率学派概率 (Frequentist Probability)&#xff1a;认为概率和事件发⽣的频率相关。贝叶斯学派概率 (Bayesian Probability)&#xff1a;认为概率是对某件事发⽣的确定程度&#xff0c;可以理解成是确信的程度。随机变量 (Random Variable)&…

内存泄露Lowmemorykiller分析

01 前言 最近疫苗事情非常火热,这件事情让我对刘强东有点刮目相看,我们需要更多的人关注曝光此类问题 02 正文 Android Kernel 会定时执行一次检查,杀死一些进程,释放掉内存。Low memory killer 是定时进行检查。Low memory killer 主要是通过进程的oom_adj 来判定进程的…

腾讯官网生成qq在线客服代码

http://jingyan.baidu.com/article/e2284b2b42ce8ce2e6118ddd.html转载于:https://www.cnblogs.com/diyunpeng/p/6576696.html

TabError: inconsistent use of tabs and spaces in indentation

本文使用PyCharm的格式化代码功能解决TabError: inconsistent use of tabs and spaces in indentation。 1、提出问题&#xff1a; 当把代码从别处复制进来PyCharm&#xff0c;然后运行报错&#xff1a;TabError: inconsistent use of tabs and spaces in indentation 2、 分…

python 默认参数_有趣的 Python 特性 3 | 当心默认可变参数这个大猪蹄子。

本文字数&#xff1a;1575 字阅读本文大概需要&#xff1a;4 分钟写在之前Python 提供了很多让使用者觉得舒服至极的功能特性&#xff0c;但是随着不断的深入学习和使用 Python&#xff0c;我发现其中存在着许多玄学的输出与之前预想的结果大相径庭&#xff0c;这个对于初学者来…

Linux内核模块编译

Linux内核模块是一种可被动态加载和卸载的可执行程序。通过内核模块可以扩展内核功能,内核模块通常用于设备驱动、文件系统等。如果没有内核模块,需要向内核添加功能就需要自发代码、重新编译内核、安装新内核等步骤。 内核空间中不止一个程序试图访问驱动程序模块,导致一个…

AI-无损检测方向速读:基于深度学习的表面缺陷检测方法综述

1 表面缺陷检测的概念 表面缺陷检测是机器视觉领域中非常重要的一项研究内容, 也称为 AOI (Automated optical inspection) 或 ASI (Automated surface inspection)&#xff0c;它是利用机器视觉设备获取图像来判断采集图像中是否存在缺陷的技术。 1.1 传统检测的缺陷(非CNN)…