xml转txt,适应各种图片格式,如jpg,png,jpeg,PNG,JPEG等

ops/2024/12/22 14:09:55/
xmlns="http://www.w3.org/2000/svg" style="display: none;">

xml转txt,适应各种图片格式,如jpg,png,jpeg,PNG,JPEG等

import xml.etree.ElementTree as ET
import os
import cv2
import numpy as np
import globclasses = []def convert(size, box):dw = 1. / (size[0])dh = 1. / (size[1])x = (box[0] + box[1]) / 2.0 - 1y = (box[2] + box[3]) / 2.0 - 1w = box[1] - box[0]h = box[3] - box[2]x = x * dww = w * dwy = y * dhh = h * dhreturn (x, y, w, h)def get_image_file(imgpath, imgname_without_ext):# 匹配多种图像格式extensions = ['jpg', 'jpeg', 'png', 'JPG', 'JPEG', 'PNG']for ext in extensions:imgfile = os.path.join(imgpath, f'{imgname_without_ext}.{ext}')if os.path.exists(imgfile):return imgfilereturn Nonedef convert_annotation(xmlpath, xmlname):with open(xmlpath, "r", encoding='utf-8') as in_file:txtname = xmlname[:-4] + '.txt'txtfile = os.path.join(txtpath, txtname)tree = ET.parse(in_file)root = tree.getroot()imgfile = get_image_file(imgpath, xmlname[:-4])if imgfile is None:print(f'No matching image file for {xmlname}')returnimg = cv2.imdecode(np.fromfile(imgfile, np.uint8), cv2.IMREAD_COLOR)h, w = img.shape[:2]res = []for obj in root.iter('object'):cls = obj.find('name').textif cls not in classes:classes.append(cls)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)res.append(str(cls_id) + " " + " ".join([str(a) for a in bb]))# 即使 res 为空也要创建 .txt 文件with open(txtfile, 'w+') as f:f.write('\n'.join(res))if __name__ == "__main__":imgpath = r"VOCdevkit\JPEGImages"  #图片文件夹路径xmlpath = r"Annotations"           #xml格式文件夹txtpath = r"VOCdevkit\txt"         #txt格式文件夹if not os.path.exists(txtpath):os.makedirs(txtpath, exist_ok=True)list = os.listdir(xmlpath)error_file_list = []for i in range(0, len(list)):try:path = os.path.join(xmlpath, list[i])if ('.xml' in path):convert_annotation(path, list[i])print(f'file {list[i]} convert success.')else:print(f'file {list[i]} is not xml format.')except Exception as e:print(f'file {list[i]} convert error.')print(f'error message:\n{e}')error_file_list.append(list[i])print(f'this file convert failure\n{error_file_list}')print(f'Dataset Classes:{classes}')

注意需要改的的地方如下:
改为自己相应的路径

    imgpath = r"VOCdevkit\JPEGImages"  #图片文件夹路径xmlpath = r"Annotations"           #xml格式文件夹txtpath = r"VOCdevkit\txt"         #txt格式文件夹

在这里插入图片描述


http://www.ppmy.cn/ops/105689.html

相关文章

Ajax的$.post(),$.get(),$.ajax 方法请求都是默认异步请求

. p o s t ( ) , .post(), .post(),.get(),$.ajax 方法请求都是默认异步请求,所以如果要用到返回的结果,则要考虑异步问题,不然可能会变量出现未定义之类的情况。 改成同步的方法: …

Training language models to follow instructionswith human feedback

Abstract 将语言模型做得更大并不会自动提高它们遵循用户意图的能力。例如,大型语言模型可能会生成不真实、有毒或对用户不有帮助的输出。换句话说,这些模型并未与用户对齐(aligned)。本文展示了一种通过人类反馈来对齐语言模型与…

yolo训练策略--使用 Python 和 OpenCV 进行图像亮度增强与批量文件复制之(图像增强是按梯度变化优化)

接上个博客: https://blog.csdn.net/weixin_43269994/article/details/141753412优化如下函数: def augment_and_copy_files(base_folder, image_filename, num_augmentations2, vgain_range(1, 1.5), process_labelsTrue, process_annotationsTrue):b…

[B站大学]Zotero7教程

参考资料: https://www.bilibili.com/video/BV1PSvUetEQX 2. 账号注册与同步 本节内容参考zotero中文社区文档:https://zotero-chinese.com/user-guide/sync 2.1 数据同步 首先注册一个Zotero官方账户。登录账号密码。 2.2 文件同步 按照文档,推荐…

ElasticSearch学习笔记(三)RestClient操作文档、DSL查询文档、搜索结果排序

文章目录 前言5 RestClient操作文档5.4 删除文档5.4 修改文档5.5 批量导入文档 6 DSL查询文档6.1 准备工作6.2 全文检索查询6.3 精准查询6.4 地理坐标查询6.5 复合查询6.5.1 相关性算分6.5.2 布尔查询 7 搜索结果处理7.1 排序7.1.1 普通字段排序7.1.2 地理坐标排序 前言 Elast…

小程序中使用page-container来做弹窗

<page-container></page-container>&#xff1a;小程序自带弹窗组件&#xff1b; 值描述show是否显示容器组件&#xff1b;overlay是否显示遮罩层&#xff1b;position弹出位置&#xff0c;可选值为 top bottom right center&#xff1b;round是否显示圆角

安全可靠的国产自研数据库PolarDB V2.0,让数据库开发像“搭积木”一样简单

安全可靠的国产自研数据库&#xff0c;让数据库开发像“搭积木”一样简单。点此查看详情&#xff01; 一、PolarDB V2.0 产品方案介绍 2023年12月26日&#xff0c;中国信息安全测评中心与国家保密科技测评中心共同发布《安全可靠测评结果公告&#xff08;2023年第1号&#xf…

AMP网站的SEO 关于“备用网页”应该如何处理?

AMP网站的SEO 关于“备用网页”应该如何处理&#xff1f; 谷歌Search Console的“网页索引编制”报告中&#xff0c;如果有“备用网页&#xff08;有适当的规范标记&#xff09;”的提示&#xff0c;应该怎么处理呢&#xff1f; 相应网页被标记为另一网页的备用网页&#xff…