XML标签格式转换为YOLO TXT格式
针对的是多边形(<polygon>)来描述对象的边界,而不是传统的矩形框(<bndbox>)
import xml.etree.ElementTree as ET
import os
from pathlib import Path# 解析VOC格式的XML文件,提取目标框的标签和坐标
def parse_voc_xml(xml_file):tree = ET.parse(xml_file)root = tree.getroot()# 获取图像的宽度和高度size = root.find('size')img_width = int(size.find('width').text)img_height = int(size.find('height').text)bboxes = []for obj in root.findall('object'):label = obj.find('name').text # 获取目标的标签polygon = obj.find('polygon') # 获取多边形的坐标# 获取多边形的所有顶点坐标x_coords = []y_coords = []for i in range(1, 5): # 假设最多4个点(也可以扩展)x_coords.append(int(polygon.find(f'x{i}').text))y_coords.append(int(polygon.find(f'y{i}').text))# 计算边界框(最小矩形框)的坐标xmin = min(x_coords)xmax = max(x_coords)ymin = min(y_coords)ymax = max(y_coords)# 将 VOC 格式的坐标转换为 YOLO 格式x_center = (xmin + xmax) / 2y_center = (ymin + ymax) / 2width = xmax - xminheight = ymax - ymin# 归一化坐标x_center /= img_widthy_center /= img_heightwidth /= img_widthheight /= img_heightbboxes.append((label, x_center, y_center, width, height))return bboxes, img_width, img_height# 将标签保存为 YOLO 格式
def save_yolo_labels(image_filename, bboxes, output_dir):# YOLO 标签文件的路径txt_filename = os.path.join(output_dir, Path(image_filename).stem + '.txt')with open(txt_filename, 'w') as f:for label, x_center, y_center, width, height in bboxes:# YOLO 格式为:<class_id> <x_center> <y_center> <width> <height># 假设标签的类别是数字(如果是字符串,则需要将类别转换为数字映射)f.write(f"{label} {x_center} {y_center} {width} {height}\n")# 主函数:将 VOC XML 文件转换为 YOLO 格式
def convert_voc_to_yolo(voc_xml_dir, output_dir, class_mapping):# 如果输出目录不存在,则创建if not os.path.exists(output_dir):os.makedirs(output_dir)# 遍历所有 XML 文件for xml_file in Path(voc_xml_dir).glob('*.xml'):print(f"Processing {xml_file}")# 解析 VOC XML 文件bboxes, img_width, img_height = parse_voc_xml(xml_file)# 将标签转化为 YOLO 格式,且需要使用数字类别而不是字符串bboxes = [(class_mapping[label], x_center, y_center, width, height) for label, x_center, y_center, width, height in bboxes]# 保存 YOLO 格式的标签save_yolo_labels(xml_file.stem + '.jpg', bboxes, output_dir) # 假设图像文件与XML文件同名,后缀为 .jpg# 主程序入口
if __name__ == "__main__":# 输入目录:包含VOC XML标注文件的目录voc_xml_dir = './original/labels' # 替换为 VOC XML 文件目录路径# 输出目录:YOLO 格式标签文件的存储目录output_dir = './original/save' # 替换为 YOLO 标签文件存储目录路径# 类别映射:将VOC中的标签名映射为数字类别class_mapping = {'car': 0, 'truck': 1,'bus': 2,'motorcycle': 3,'van': 4,'freight_car': 5,}# 转换 VOC 格式标签为 YOLO 格式convert_voc_to_yolo(voc_xml_dir, output_dir, class_mapping)
# 'car', 'truck', 'bus', 'motorcycle', 'van', 'freight_car'
相关文章:
XML标签格式转换为YOLO TXT格式
针对的是多边形(<polygon>)来描述对象的边界,而不是传统的矩形框(<bndbox>) import xml.etree.ElementTree as ET import os from pathlib import Path# 解析VOC格式的XML文件,提取目标框的标…...
# OpenCV实现人脸与微笑检测:从图像到视频的实战应用
OpenCV实现人脸与微笑检测:从图像到视频的实战应用 在计算机视觉领域,人脸检测和微笑检测是两个非常有趣且实用的任务。它们广泛应用于智能监控、社交媒体分析、人机交互等多个场景。本文将通过两个代码示例,详细介绍如何使用OpenCV实现人脸…...
【ubuntu24.04】挂载windows的共享文件夹
挂载windows的共享文件夹 ubutnu直接挂载windows共享文件夹,这样就能直接访问到windows里下载的文件了。 在 Ubuntu 中挂载 Windows 共享文件夹通常使用 CIFS 协议,下面给出一个常用的方法: 1. 安装 cifs-utils 首先,确保系统…...
基于Python的Django框架的个人博客管理系统
标题:基于Python的Django框架的个人博客管理系统 内容:1.摘要 本文围绕基于Python的Django框架构建个人博客管理系统展开。背景方面,随着互联网发展,个人博客成为信息分享与交流重要平台,传统博客管理系统在功能与灵活性上存在不足。目的是开…...
Kubernetes可视化面板——KubePi(Kubernetes Visualization Panel - kubepi)
Kubernetes可视化管理面板——KubePi 在云计算和容器化的大潮下,Kubernetes 已成为管理容器集群的事实标准。然而,面对复杂的集群管理和运维工作,一个直观、易用的可视化工具显得至关重要。KubePi 正是为此而生——一款专为简化 Kubernetes …...
【区块链安全 | 第二十三篇】单位和全局可用变量(一)
文章目录 单位和全局可用变量(Units and Globally Available Variables)以太单位(Ether Units)时间单位(Time Units)保留关键字 单位和全局可用变量(Units and Globally Available Variables&am…...
6内存泄露问题的讨论
1.关注 内存泄露 是要融入到 DNA 中的事情 内存泄露是一个非常害怕, 非常严重的事情!! (不仅仅是内存泄露,包括文件描述符泄露等同类问题,都是非常严重的) 这种问题,不容易第一时间发现 2.实际场景中:特别是选择性关闭文件描述符 (也是记得要关闭文件描…...
权重参数矩阵
目录 1. 权重参数矩阵的定义与作用 2. 权重矩阵的初始化与训练 3. 权重矩阵的解读与分析 (1) 可视化权重分布 (2) 统计指标分析 4. 权重矩阵的常见问题与优化 (1) 过拟合与欠拟合 (2) 梯度问题 (3) 权重对称性问题 5. 实际应用示例 案例1:全连接网络中的…...
Ludic:用Python构建HTML,告别JavaScript的繁琐开发
在现代Web开发中,构建动态网页和应用程序往往需要同时处理前端JavaScript和后端逻辑,这种复杂性让开发者倍感压力。Ludic框架的诞生,为开发者提供了一种全新的解决方案——通过Python的类型系统和组件化设计,让HTML生成变得简洁高…...
【现代深度学习技术】现代卷积神经网络06:残差网络(ResNet)
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重…...
SpringBoot分布式项目订单管理实战:Mybatis最佳实践全解
一、架构设计与技术选型 典型分布式订单系统架构: [网关层] → [订单服务] ←→ [分布式缓存]↑ ↓ [用户服务] [支付服务]↓ ↓ [MySQL集群] ← [分库分表中间件]技术栈组合: Spring Boot 3.xMybatis-Plus 3.5.xShardingSpher…...
《异常检测——从经典算法到深度学习》30. 在线服务系统中重复故障的可操作和可解释的故障定位
《异常检测——从经典算法到深度学习》 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3 基于One-Class SVM的异常检测算法4 基于高斯概率密度异常检测算法5 Opprentice——异常检测经典算法最终篇6 基于重构概率的 VAE 异常检测7 基于条件VAE异常检测8 Donut: …...
题解:蓝桥杯 2023 省 B 接龙数列 - dp + 哈希map
题解:蓝桥杯 2023 省 B 接龙数列 题目传送门 P9242 [蓝桥杯 2023 省 B] 接龙数列 一、题目描述 给定一个长度为N的整数数列,我们需要计算最少删除多少个数,可以使剩下的序列成为接龙序列。接龙序列的定义是:对于序列中相邻的两…...
RAG 优化:高效解析并接入图文、表格密集型文档
写在前面 检索增强生成 (Retrieval-Augmented Generation, RAG) 已成为构建智能问答、文档摘要、内容创作等应用的利器。然而,标准的 RAG 流程往往假设输入是纯文本。当我们面对现实世界中更常见的文档——那些充斥着大量图片、图表和表格的报告、手册、论文或网页时,传统的…...
nut-ui下拉选的实现方式:nut-menu
nut-ui下拉选的实现方式:nut-menu 官方文档:https://nutui.jd.com/h5/vue/4x/#/zh-CN/component/menu 案例截图: nut-tab选项卡组件实现: 官方组件地址:https://nutui.jd.com/h5/vue/4x/#/zh-CN/component/tabs nut…...
HTML中数字和字母不换行显示
HTML中数字和字母不换行显示的默认行为及如何通过CSS的word-wrap和word-break属性进行调整。 在HTML中标签中的数字和字母默认是不换行的,如果要将他们换行,在CSS中添加”word-wrap: break-word;” 即可解决 语法:word-wrap: normal|break-w…...
鸿蒙NEXT小游戏开发:扫雷
1. 引言 本文将介绍如何使用鸿蒙NEXT框架开发一个简单的扫雷游戏。通过本案例,您将学习到如何利用鸿蒙NEXT的组件化特性、状态管理以及用户交互设计来构建一个完整的游戏应用。 2. 环境准备 电脑系统:windows 10 工程版本:API 12 真机&…...
【doris】Apache Doris简介
目录 1. 概述2. 技术特点2.1 高性能查询2.2 实时数据导入2.3 易于使用2.4 高可扩展性2.5 数据模型2.6 容错性 3. 适用场景4. 部署与架构4.1 部署方式4.2 架构特点 5. 优势 1. 概述 1.Apache Doris(原名Palo)最早诞生于百度广告报表业务,2017…...
LangChain4j 入门(二)
LangChain 整合 SpringBoot 下述代码均使用 阿里云百炼平台 提供的模型。 创建项目,引入依赖 通过 IDEA 创建 SpringBoot 项目,并引入 Spring Web 依赖,SpringBoot 推荐使用 3.x 版本。 引入 LangChain4j 和 WebFlux 依赖 <!--阿里云 D…...
小智机器人关键函数解析:MqttProtocol::SendAudio()对输入的音频数据进行加密处理,通过UDP发送加密后的音频数据
MqttProtocol::SendAudio()对输入的音频数据进行加密处理,通过UDP发送加密后的音频数据。 源码: void MqttProtocol::SendAudio(const std::vector<uint8_t>& data) {// 使用互斥锁保护临界区,确保同一时间只有一个线程可以访问该…...
npm i 失败
当npm i 失败 且提示下面的错误 尝试降低npm 的版本 npm install npm6.14.15 -g...
音视频基础(音视频的录制和播放原理)
文章目录 一、录制原理**1. 音视频数据解析****2. 音频处理流程****3. 视频处理流程****4. 同步控制****5. 关键技术点****总结** 二、播放原理**1. 音视频数据解析****2. 音频处理流程****3. 视频处理流程****4. 同步控制****5. 关键技术点****总结** 一、录制原理 这张图展示…...
CoAP Shell 笔记
CoAP Shell 笔记 1. 概述 CoAP (Constrained Application Protocol) 是一种专为物联网 (IoT) 中资源受限的节点和网络设计的 RESTful Web 传输协议。CoAP Shell 是一个基于命令行的交互式工具,用于与支持 CoAP 的服务器进行交互。 2. 主要功能 协议支持ÿ…...
回溯(子集型):分割回文串
一、多维递归 -> 回溯 1.1:17. 电话号码的字母组合(力扣hot100) 代码: mapping ["","", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv&qu…...
2022年蓝桥杯第十三届CC++大学B组真题及代码
目录 1A:九进制转十进制 2B:顺子日期(存在争议) 3C:刷题统计 解析代码(模拟) 4D:修剪灌木 解析代码(找规律) 5E:X进制减法 解析代码1&…...
1.oracle修改配置文件
1.找到oracle的安装路径 D:\app\baozi\product\11.2.0\dbhome_1\NETWORK\ADMIN ,修改下面的两个文件。如果提示没有权限,可以先把这两个文件复制到桌面,修改完后,在复制回来。 2.查看自己电脑的主机名, 右击 - 此电脑 …...
通义万相2.1 你的视频创作之路
通义万相2.1的全面介绍 一、核心功能与技术特点 通义万相2.1是阿里巴巴达摩院研发的多模态生成式AI模型,以视频生成为核心,同时支持图像、3D内容及中英文文字特效生成。其核心能力包括: 复杂动作与物理规律建模 能够稳定生成包含人体旋转、…...
Muduo网络库实现 [四] - Channel模块
设计思路 具体来说每一个套接字都会对应一个 Channel 对象,用于对它的事件进行管理。可以对于描述符的监控事件在用户态更容易维护,以及触发事件后的操作流程更加的清晰 Channel模块是用于对一个描述符所需要监控的事件以及事件触发之后要执行的回调函…...
“自动驾驶背后的数学” 专栏导读
专栏链接: 自动驾驶背后的数学 专栏以“自动驾驶背后的数学”为主题,从基础到深入,再到实际应用和未来展望,全面解析自动驾驶技术中的数学原理。开篇用基础数学工具搭建自动驾驶的整体框架,吸引儿童培养兴趣࿰…...
XSS 攻击(详细)
目录 引言 一、XSS 攻击简介 二、XSS 攻击类型 1.反射型 XSS 2.存储型 XSS 3.基于 DOM 的 XSS 4.Self - XSS 三、XSS 攻击技巧 1.基本变形 2.事件处理程序 3.JS 伪协议 4.编码绕过 5.绕过长度限制 6.使用标签 四、XSS 攻击工具与平台 1.XSS 攻击平台 2.BEEF 五…...
