【Python 实操】labelImg标注的xml格式转换为yolo的txt文件

背景

YOLO家族开枝散叶(尤其是YOLOv5)的广泛应用就涉及到图像的标注与文件格式转换,常用的标注工具有 LabelMelabelImg 等。
labelImg 标注完后,需要将 voc 格式的 xml 转换为 yolo 格式的 txt ; 废话不多说,直接上菜。

上菜

  • vocxml2yolotxt.py
# filename: vocxml2yolotxt.py
import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join# 根据自己情况修改
classes = ["Head","Helmet","WorkCloth","NormalCloth"]imgspath = "."
imgsuffixlist = ['jpg', 'png', 'jpeg', 'bmp']    # 检查图像列表
def checkimgslist(imgspath):imgslist = os.listdir(imgspath)newimgslist = []for imname in imgslist:suffix = imname.split(".")[-1]if suffix in imgsuffixlist:newimgslist.append(imname)return newimgslist# 转换尺寸和矩形框
def convert(size, box):dw = 1. / size[0]dh = 1. / 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_id):# 如果找不到对应的xml,那么就直接新建一个文件即可print(image_id)# 直接创建文件out_file = open('labels/%s.txt' % image_id, 'w')# 找不到对应的xml文件,就直接新建一个txt文件,并退出if not os.path.exists('Annotations/%s.xml' % image_id):passelse:# UnicodeDecodeError: 'gbk' codec can't decode byte 0x80, 所以用 with open UTF-8 编码格式打开with open('Annotations/%s.xml' % image_id, 'r', encoding='UTF-8') as xml_file:tree = ET.parse(xml_file)root = tree.getroot()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:continuecls_id = classes.index(cls)bbox = obj.find('bndbox')b = (float(bbox.find('xmin').text), float(bbox.find('xmax').text), float(bbox.find('ymin').text), float(bbox.find('ymax').text))bb = convert((w, h), b)out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')# 写完就关闭该文件out_file.close()# 将类别信息写入到文件中
def print_classesname(classes):classesname = 'classes_name.txt'out_file = open(classesname, 'w')for cls in classes:out_file.write(str(cls)+"\n")out_file.close()if __name__ == '__main__':print("In main")i = 0# 找到图像文件列表imgslist = checkimgslist(imgspath=imgspath)# 打印类别信息到文件print_classesname(classes=classes)# 遍历图像文件列表并转换数据for imname in imgslist:# 调试用# i += 1# if i > 5:#     break# print(imname)## 找到文件后缀最后一个位置suffix = imname.split(".")[-1]idx = imname.index(suffix)        imnameid = imname[0:idx-1]# 转换生成文件convert_annotation(imnameid)

【Python 实操】labelImg标注的xml格式转换为yolo的txt文件相关推荐

  1. python批量实现labelImg标注的 xml格式数据转换成 txt格式保存

    labelImg标注的 xml格式数据如下: 单个xml文件数据打开如下: python实现labelImg标注的 xml格式数据转换成 txt格式数据的代码xml2txt.py如下: # -*- c ...

  2. python实现对LabelImg标注的xml文件修改其标签名字

    使用labelImg标注数据时,通过python批量修改已经标注的数据标签名字,例如,本程序将标注生成的xml文件中的目标名字"zero"批量修改为"num", ...

  3. PSM倾向得分匹配法【python实操篇】

    前言 大家好,我是顾先生,PSM倾向性得分匹配法的Python代码实操终于来啦! ​ 对于PSM原理不太熟悉的同学可以看看前一篇文章:PSM倾向得分匹配法[上篇:理论篇] 目前网上PSM实操的相关文章 ...

  4. 小马同学 学习python实操的第一天

    学习python实操的第一天 第一个实操案例 任务1:向文件输出"一段属于你自己的话" ##方法一 fp= open('d:/test.txt','w') ##open('文件存储 ...

  5. Python—实操小实验之人机PK游戏(终极版本—应用类与对象的知识点应用)

    Python-实操小实验之人机PK游戏(终极版本-应用类与对象的知识点应用) 人机PK游戏所需要的基础元素如下: ①要有玩家.敌人.生命值.攻击力,还要有计分: ②要可以互相进行攻击,攻击之后生命值要 ...

  6. 用Python对我们自己标注的数据集转化为YOLO训练需要的txt文件

    用Python对我们自己标注的数据集转化为YOLO训练需要的txt文件 一. 数据分类 在项目的根目录下新建一个maketxt.py文件. 该脚本会在straw/ImageSets文件夹下生成:tra ...

  7. xml格式转换为txt格式

    xml格式转换为txt格式 本文借用yolo中的程序进行修改,链接如下: https://pjreddie.com/media/files/voc_label.py 修改后程序如下: import x ...

  8. 如何将xml格式转换为yolov5所需的txt格式

    如今,深度学习非常热门,制作数据集是深度学习很重要的一环.制作数据集就离不开打标签,我们打出来的标签可能是 txt 格式 或者 xml 格式 或者json格式,但是yolo运行的标签格式是txt格式 ...

  9. python 将PascalVOC(XML)格式的标注数据批量转换为YOLO(txt)格式的标注数据

    文章目录 20191022 20200523 第一次使用,修改了代码内容 使用方法 修改过的代码 20191022 引用文章:啊哈~发表第一篇博客,voc格式的标注数据转换为yolo格式的标注数据 i ...

最新文章

  1. PAT Basic 1069. 微博转发抽奖(20)
  2. PAT 1037 在霍格沃茨找零钱(20)(代码+思路)
  3. Visual C++语言编程开发详解(孙鑫老师)
  4. MSRCR(Multi-Scale Retinex with Color Restore)多尺度Retinex图像增强
  5. jsp医院管理系统_Thymeleaf+SpringBoot+SpringDataJPA实现的中小医院信息管理系统
  6. IDEA的十大快捷键
  7. 将 ASP.NET Core 2.0 项目升级至 ASP.NET Core 2.1 RC 1
  8. java打包拆包_[Java] Java 打包成jar包 和 解压jar包
  9. springmvc报错 nested exception is org.mybatis.spring.MyBatisSystemException:
  10. ueditor 覆盖下拉框问题解决
  11. 前端之CSS第二部分属性相关
  12. Spark DataFrames DataSet
  13. UG1969软件详细安装教程
  14. Python怎么安装PHP,php中ThinkPHP的下载和安装
  15. vmware 7.0 序列号_更改solidworks序列号及修改安装
  16. 计算机辅助故障树分析法,非常实用的工具和方法:故障树分析法(FTA)
  17. 华为外包员工是什么样的群体?
  18. 普渡大学计算机科学本科,美国普渡大学计算机科学CS本科申请条件及案例
  19. Linux查看mpp数据库地址,Linux环境搭建DM8 MPP双节点集群
  20. 汽车智造(一)| 移动机器人(AGV AMR)如何赋能汽车行业制造升级

热门文章

  1. 步态识别 数据集 (一)
  2. 金融机构的反洗钱(AML)合规工作和系统建设
  3. C getopt.h
  4. 扫一扫功能在手机便签的哪里
  5. linux有数据恢复工具吗,Linux运维人员必备的数据恢复工具有哪些?
  6. Shell 二进制转换成十六进制的方案
  7. Linux安装GIT最新版
  8. 计算机系学生未来憧憬,北京科技大学计算机与通信工程学院-脚踏实地,展望未来——计通学院2018级本科生年级会...
  9. 微信小程序项目实例——体质计算器
  10. 计算机库网络不见了,在电脑中的库文件夹不见了的找回方法介绍