【python脚本】修改目标检测的xml标签(VOC)类别名

需求:

在集成多个数据集一同训练时,可能会存在不同数据集针对同一种目标有不同的类名,可以通过python脚本修改数据内的类名映射,实现统一数据集标签名的目的。

代码:

# -*- coding: utf-8 -*-
# @Time : 2023/9/11 10:58
# @Author : CLW
# @FileName: change_xml_label.py
# @Software: PyCharm

import os
import xml.etree.ElementTree as ET

'''
算法功能:
针对目录下的所有voc格式的xml标签文件,将类别的名称修改为指定名称
要求:label_dict的key值表示修改前的标签名,该key对应的value值表示修改后的标签名
e.x. 需要将xml文件中'workwear'的名称替换为'reflectivevest',那么可以这样设置:
    label_dict['workwear'] = 'reflectivevest'
'''

'''
####################    输入参数设置(开始)    #################### 
'''
org_label_dir = r'D:\dataset\pretrain_GW'
new_label_dir = r'D:\dataset\pretrain_GW'
label_dict = {}
label_dict['head'] = '头'
label_dict['hand'] = '手'


'''
####################    输入参数设置(结束)    #################### 
'''

def change_xml_label(xml_path, output_path, label_dict):
    if not os.path.getsize(xml_path):
        print("内容为空的xml:",xml_path)
    tree = ET.parse(xml_path)
    root = tree.getroot()
    for obj in root.iter('object'):
        cls = obj.find('name').text
        if cls in label_dict.keys():
            obj.find('name').text = label_dict[cls]

    tree.write(output_path, encoding="utf-8", xml_declaration=True)  # 输出新的xml文件

if __name__ == "__main__":
    # 遍历xml
    for root, dir, files in os.walk(org_label_dir):
        for file in files:
            if file[-3:] == 'xml':
                print(os.path.join(root, file))
                change_xml_label(os.path.join(root, file), os.path.join(new_label_dir, file),label_dict)

参数说明:

org_label_dir:xml标签的目录。
new_label_dir:输出的新xml标签的目录。
label_dict:标签类名的映射字典,key值为修改前的类名,value值为修改后的类名。

操作案例:

先使用labelImg查看修改前的标签:
在这里插入图片描述
然后修改脚本中的对应参数,案例中类名修改如下:
label_dict[‘head’] = ‘头’
label_dict[‘SF6’] = ‘sf6’

执行完成后,用labelImg工具打开新生成的标签:
在这里插入图片描述

如图,修改标签类别名成功!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【测试】PostMan介绍_安装

1、介绍 1.1简介 Postman是一款非常流行的API调试工具,用于构建和使用 API 的 API 平台。Postman 简化了 API 生命周期的每个步骤并简化了协作它能够模拟用户发起的各类HTTP请求,将请求数据发送至服务端,并获取对应的响应结果。通过Postman…

Discourse 安装后安全配置考虑

防火墙 防火墙是肯定要装机器上的,并且端口只开放了 443 和 22。 22 的端口还只限制了部分 IP 段的访问,通常只允许给内部网络的 SSH。 Web 服务应该只走 443,80 端口的做好自动重定向到 443。 CloudFlare 可以用一个 CloudFlare 的负载…

教育小程序的性能优化:从前端到后端的综合提升策略

随着教育小程序的普及,其性能直接影响用户体验和教学效果。本文将从前端到后端,详细探讨教育小程序的性能优化策略,帮助开发者打造高效、流畅的教育应用。 一、前端性能优化策略 代码优化 减少HTTP请求:合并CSS、JavaScript文件…

动手学深度学习4.5 权重衰减-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记,以及对课后练习的一些思考,自留回顾,也供同学之人交流参考。 本节课程地址:权重衰退_哔哩哔哩_bilibili 本节教材地址:4.5. 权重衰减 — 动手学深度学习 2.0.0 do…

对比表征学习(一)Contrastive Representation Learning

对比表征学习(二)Sentence Embedding 主要参考翁莉莲的Blog,本文主要聚焦于对比损失函数 对比表示学习(Contrastive Representation Learning)可以用来优化嵌入空间,使相似的数据靠近,不相似的数…

src挖掘技巧--别人能挖到,你不来看看吗?

漏洞类型:拒绝服务漏洞 原理:通过控制修改验证码的长和宽,请求大量资源,导致拒绝服务漏洞,可以通过数据包的返回量值和返回时间来判断是否存在该漏洞。 实战报告 在获取验证码的时候进行抓包 右键打开验证码图片&am…

关于Linux软链你必须知道的实用知识点(非常详细)零基础入门到精通,收藏这一篇就够了

背景 Linux中的软链,是非常强大的工具,如果只是一知半解,在解决问题时一定会让你栽跟头或者浪费大量的时间。非常有必要提前掌握Linux软链的几个实用的知识点。 分析 软链是什么? 在Linux中,软链接(sym…

【CALayer-CALayer的基本属性 Objective-C语言】

一、接下来,我们来说这个Layer啊, 1.首先,Layer能接触到的,就是我们之前说截图啊,就是我们self.view里面,有一个layer属性, [self.view.layer renderInContext:(CGContextRef t)]; 那个里面,有一个layer属性,然后呢,是CALayer类型的, 接下来,我们就来学习一…

帆软报表点击表格给数据集传递参数案例

一、效果 有四个模块,分别是采购总金额,采购总数量,采购合同数量,采购合同申请数量通过点击单元格上的月份,展示不同的月份数据,进行单元格和表格之间的联动 二、准备好数据库表和展示数据内容 2.1 建表 …

【Java EE】网络原理——HTTP响应

目录 1.认识“状态码”(status code) 1.1 200 OK 1.2 404 Not Found 1.3 403 Forbodden 1.4 Method Not Allowed 1.5 Internal Sever Error 1.6 504 Gsteway Timeout 1.7 Move temporarily 1.8 Moved Permanently 1.9状态码小结 2.认识响应“报…

c语言 分而治之(施特拉森矩阵乘法)

给定两个大小分别为 nxn 的方阵 A 和 B&#xff0c;求它们的乘法矩阵。 朴素方法&#xff1a;以下是两个矩阵相乘的简单方法。 void multiply(int A[][N], int B[][N], int C[][N]) { for (int i 0; i < N; i) { for (int j 0; j < N; j) { …

【Python特征工程系列】利用SHAP进行特征重要性分析-决策树模型为例(案例+源码)

这是我的第290篇原创文章。 一、引言 SHAP 属于模型事后解释的方法&#xff0c;它的核心思想是计算特征对模型输出的边际贡献&#xff0c;再从全局和局部两个层面对“黑盒模型”进行解释。SHAP构建一个加性的解释模型&#xff0c;所有的特征都视为“贡献者”。 对于每个预测样…

北京证券公司港股通交易佣金手续费最低是多少?万0.8?港股通纳入规则是怎么样的?

港股通交易佣金概述 港股通的交易佣金可能会因证券公司和投资者的不同而有所差异。 北京证券公司的港股通交易佣金最低可能万分之零点八&#xff08;0.008%&#xff09;&#xff0c;但这需要投资者与证券公司客户经理了解&#xff0c;进行沟通和申请。 一般来说&#xff0c;…

树莓派部署harbor_arm64

文章目录 树莓派4b部署Harbor-arm64版本docker-compose维护命令访问harbor 192.168.1.111认用户名密码admin/Harbor12345 树莓派4b部署Harbor-arm64版本 harbor-arm版本 部署&#xff1a;参考 wget https://github.com/hzliangbin/harbor-arm64/releases/download/v1.9.3/ha…

常用压力、流量单位换算表

一、压力为单位面积所承受的力 压力&#xff1a;绝对压力 、表压力 、大气压力。相互关系&#xff1a;绝对压力表压力大气压力 绝对压力:当压力表示与完全真空的差。测量处的实际压力。 表压力:当表示其气体数值与该地域大气压力的差值。 大气压力&#xff1a;由大气重量所…

网吧|基于SprinBoot+vue的网吧管理系统(源码+数据库+文档)

网吧管理系统 目录 基于SprinBootvue的网吧管理系统 一、前言 二、系统设计 三、系统功能设计 1 管理员功能模块 2 网管功能模块 3 会员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#…

Docker搭建FRP内网穿透服务器

使用Docker搭建一个frp内网穿透 在现代网络环境中&#xff0c;由于防火墙和NAT等原因&#xff0c;内网设备无法直接被外网访问。FRP (Fast Reverse Proxy) 是一款非常流行的内网穿透工具&#xff0c;它能够帮助我们将内网服务暴露给外网。本文将介绍如何在Linux服务器上使用Do…

LitCTF2023

[LitCTF 2023]enbase64 base 64 里面有一个换表的函数 写代码 #include<stdio.h> #include<string.h> #include<stdlib.h> int main() {char *result; char Destination[65]; int v3[65];int j;int i; char Source[]"ABCDEFGHIJKLMNOPQRSTUVWXYZabcde…

多线程新手村3--多线程代码案例

1.1 单例模式 单例模式是设计模式中非常经典的一种。那么有同学肯定就会好奇了&#xff0c;什么是设计模式呢&#xff1f; 设计模式简单的说就是程序员的“棋谱”&#xff0c;我们下象棋时肯定或多或少都背过棋谱&#xff0c;例如当头炮、马后炮等&#xff0c;设计模式也是这…

防火墙技术基础篇:基于Ensp配置防火墙NAT server(服务器映射)

配置防火墙NAT server(服务器映射) 什么是NAT Server (服务器映射) NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;是一种允许多个设备共享一个公共IP地址的技术。NAT Server&#xff0c;也称为服务器映射&#xff0c;是NAT技术中的一种应…