XML文件转TXT,XML无图片宽高信息

网络上有很多xml转txt的文章,不过有的xml文件不包括size信息,即图片本身的宽高,如先前提到的湛江水下目标检测大赛数据集的label文件。因此在前辈的基础上添加了图像size的读取,无需对xml文件进行处理,直接将图片的宽高读到数组中,这个方法的局限性在于标签和图片必须一一对应,但考虑到数据集通常是规整的,因此无伤大雅。

import xml.etree.ElementTree as ET
import os
import cv2
from tqdm import tqdmclasses = ["holothurian", "echinus", "scallop", "starfish"]  # 类别
xml_path = "xml标签文件夹路径"
txt_path = "txt标签存储路径"
image_path = "图像文件夹路径"# 将原有的xmax,xmin,ymax,ymin换为x,y,w,h
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, width, hight):in_file = open(xml_path + '\\{}.xml'.format(image_id), encoding='UTF-8')out_file = open(txt_path + '\\{}.txt'.format(image_id), 'w')  # 生成同名的txt格式文件tree = ET.parse(in_file)root = tree.getroot()size = root.find('size')  # 此处是获取原图的宽高,便于后续的归一化操作if size is not None:w = int(size.find('width').text)h = int(size.find('height').text)else:w = widthh = hightfor obj in root.iter('object'):cls = obj.find('name').text# print(cls)if cls not in classes: # 此处会将cls里没有的类别打印,以便后续添加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')# 此处获取图像宽高的数组,tqdm为进度条库,将处理可视化
def image_size(path):image = os.listdir(path)w_l, h_l = [], []for i in tqdm(image):if i.endswith('jpg'):h_l.append(cv2.imread(os.path.join(path, i)).shape[0])w_l.append(cv2.imread(os.path.join(path, i)).shape[1])return w_l, h_l# 遍历xml文件,将对应的宽高输入convert_annotation方法
if __name__  == "__main__":img_xmls = os.listdir(xml_path)w, h = image_size(image_path)i = 0for img_xml in img_xmls:label_name = img_xml.split('.')[0]print(label_name)convert_annotation(label_name, w[i], h[i])i += 1

XML文件转TXT,XML无图片宽高信息相关推荐

  1. 数据标签处理:python将xml文件转换为txt,csv格式

    数据标签处理:python将xml文件转换为txt,csv格式 这里的标注文件为点标注文件 每次要用数据处理脚本的时候都忘记放哪里了,然后重写了一遍又一遍,虽然代码不长,但是每次都有重新写还是很麻烦, ...

  2. VC++ MSXML创建XML文件以及对XML文档解析

    VC++ MSXML创建XML文件以及对XML文档解析 转自http://www.newxing.com/Tech/Program/Cpp/703.html // XmlCreationDemo.cp ...

  3. Android向本地写入一个XML文件和解析XML文件

    在网络存储过程中有很多时候会遇到XML文件解析和使用XML保存一些信息,解析XML文件用的比较多的方法是pull解析和SAX解析,但是我一般只用pull解析,下面就向cd卡写入一个XML文件,然后再使 ...

  4. 02_Android写xml文件和读xml文件

     新建Android项目 编写AndroidManifest.xml,使本Android项目具有单元测试功能和写外设的权限. <?xml version="1.0" en ...

  5. jdom解析xml文件_JDOM编辑XML文件示例

    jdom解析xml文件 JDOM provides very neat way to manipulate XML files, using JDOM is very easy and the cod ...

  6. java生成xml文件head,生成XML文件 - Glucose的个人空间 - OSCHINA - 中文开源技术交流社区...

    参照网上这篇博客所写,在此表示感谢 package com.qiux.demo; import java.io.FileOutputStream; import java.io.IOException ...

  7. java读取xml文件报“org.xml.sax.SAXParseException: Premature end of file”

    背景:java读取xml文件,xml文件内容只有"<?xml version="1.0" encoding="UTF-8"?>" ...

  8. (C++)将数据库文件导出XML文件以及解析XML文件生成数据库文件的处理方法

    将数据库文件导出XML文件以及解析XML文件生成数据库文件的处理方法 思路:将数据库所有要导出的信息通过sql语句得到,存储到结构体中,然后将结构体的内容通过自定义的xml格式导出. 此方法使用的是T ...

  9. 本地html本地xml文件怎么打开,xml文件怎么打开

    xml文件怎么打开 xml文件一般用用记事本或都是IE都可以打开. XML是可扩展标记语言(Extensible Markup Language,XML)缩写,用于标记电子文件使其具有结构性的标记语言 ...

最新文章

  1. Win10系列:JavaScript访问文件和文件夹
  2. java面试题标签_java面试笔试题 (WEB)
  3. 三大数据驱动机制,助力文娱企业打造高留存、高转化增长闭环
  4. python--通过xpath相对节点位置查找元素(续)
  5. 我的20天项目经历--至今令我难忘的技术难题
  6. FZU 1894 志愿者选拔
  7. python语言单行注释符_云计算开发学习笔记:Python3注释
  8. Kali Linux 2019.1 发布,Metasploit 更新到 5.0 版本
  9. 报错,Exception: Required request body is missing: public org.springframework.ui.ModelMap cn.yihuazt.co
  10. vs2005菜单:工具-选项-环境
  11. java框架_这篇让你吃透Java集合框架!
  12. Android UI学习之Gallery
  13. Flash上传文件(结合asp.net) (转)
  14. 使用vs2019实现mfc类库dll的开发
  15. VScode远程root权限调试
  16. html网页早发白帝城,唐.李白《早发白帝城》(快乐写字)
  17. nltk英文词性分析
  18. BZOJ 5442 [Ceoi2018]Global warming
  19. axure8屏幕滚动_Axure8原型教程:实现滚动效果(小技巧:隐藏滚动条)
  20. 磁共振神经根水成像_磁共振神经根水成像鉴别类肿瘤样椎间盘突出症与神经鞘瘤2例...

热门文章

  1. msq安装及其密码修改
  2. 【五一专属】阿里云ECS大测评#五一专属|向所有热爱分享的“技术劳动者”致敬#
  3. notepad++ 把字符串替换成回车换行
  4. java计算机毕业设计小区疫情防控管理系统源码+系统+mysql数据库+lw文档+部署
  5. 2021年市政方向-通用基础(施工员)考试题库及市政方向-通用基础(施工员)考试技巧
  6. Hadoop2.6.0安装教程_单机/伪分布式配置
  7. 卡片布局 java_Java Swing CardLayout卡片布局的实现示例
  8. unity读取本地硬盘照片
  9. 网易面试Java开发凉凉经,面试官:基础不牢,技术不够深入,无缘offer,无缘网易......
  10. Mockplus(摩客)- 简洁高效的原型图设计工具