目标检测项目中,使用python+xml.etree.ElementTree修改xml格式标注文件中的类别名称

news/2024/7/10 0:19:40 标签: 目标检测, python, xml

需求:
        数据集的数据增强中,有时需要将xml标注文件中的类别做修改为新类别,或者将几个类别合并为一个类别。
 
解决方法:
        使用python+import xml.etree.ElementTree将xml标注文件中的类别名称做修改。代码如下:

python">import os
import glob
import xml.etree.ElementTree as et

def change_labels(source_dir):
    file_list = glob.glob(os.path.join(source_dir,"*.xml"))
    print(len(file_list))
    index = 1
    for file in file_list:
        print(file,index)
        index += 1
        tree_ = et.ElementTree()
        tree_.parse(file)

        root = et.Element("annotation")
        folder = et.SubElement(root, "folder")
        folder.text = "images"
        filename = et.SubElement(root, "filename")
        filename.text = tree_.find(".//filename").text
        path = et.SubElement(root, "path")
        path.text = "/home/Desktop/labels"
        source = et.SubElement(root, "source")
        database = et.SubElement(source, "database")
        database.text = "Unknown"
        size = et.SubElement(root, "size")
        width = et.SubElement(size, "width")
        width.text = tree_.find(".//width").text
        height = et.SubElement(size, "height")
        height.text = tree_.find(".//height").text
        depth = et.SubElement(size, "depth")
        depth.text = "3"
        segmented = et.SubElement(root, "segmented")
        segmented.text = "0"

        objects = tree_.findall(".//object")
        anchor = 0
        for object in objects:

            try:
                name_ = object.find("name").text
            except:
                print(file)
                print("-----------------------------------------")
                continue
            
            n = ""
            if name_ == "van" or name_ == "bus" or name_ == "truck":
                n = "car"
            else:
                n = name_
            object_ = et.SubElement(root, "object")
            name = et.SubElement(object_, "name")
            name.text = n
            pose = et.SubElement(object_, "pose")
            pose.text = "Unspecified"
            truncated = et.SubElement(object_, "truncated")
            truncated.text = "0"
            difficult = et.SubElement(object_, "difficult")
            difficult.text = "0"
            bndbox = et.SubElement(object_, "bndbox")
            xmin = et.SubElement(bndbox, "xmin")
            xmin.text = object.find(".//xmin").text
            ymin = et.SubElement(bndbox, "ymin")
            ymin.text = object.find(".//ymin").text
            xmax = et.SubElement(bndbox, "xmax")
            xmax.text = object.find(".//xmax").text
            ymax = et.SubElement(bndbox, "ymax")
            ymax.text = object.find(".//ymax").text

        tree = et.ElementTree(root)
        tree.write(file,encoding="utf-8")

if __name__ == '__main__':
    source_dir = "/home/Desktop/labels/Annotations"
    flip_images(source_dir)

 使用以上代码需要修改原图像和标注文件所在文件夹路径(source_dir),也需要修改类别,上述代码将"van”、“bus”、“truck”修改为“car”,这里可根据实际情况自行修改。亲测可用。 


http://www.niftyadmin.cn/n/4974334.html

相关文章

XXL-JOB(2)

Glue模式 任务以源码的形式去维护调度中心,支持实时编译,无需指定JobHandler。 实际上是继承自JobHandler的java类代码,在执行器中运行,可以使用Resource/Autowire注入执行器里中的其他服务. 在执行器中添加service Service p…

数据分析基础-数据可视化02-不同数据类型的可视化概念及原则

将数据空间映射到颜色空间。 数据空间:连续或分类 数据可以被划分为两个主要的数据空间:连续数据和分类数据。这两种数据空间有不同的特点和适用的分析方法。 连续数据(Continuous Data): 连续数据是指可以在某个范…

柯桥学日语就到泓畅教育吧日语复合动词汇总(7)

あふれ出すあふれだすafuredasu NLB 通同字溢れ出す 自 从容器里溢出到外部。[意译:溢出] N1ガN2カラN3ニ / ヘ ▶ 水がバケツからあふれ出した. Mizu ga baketsu kara afuredashita. 水从桶子里溢了出来。 あふれ出るあふれで…

Windows商店引入SUSE Linux Enterprise Server和openSUSE Leap

在上个月的Build 2017开发者大会上,微软宣布将SUSE,Ubuntu和Fedora引入Windows 商店,反应出微软对开放源码社区的更多承诺。 该公司去年以铂金会员身份加入Linux基金会。现在,微软针对内测者的Windows商店已经开始提供 部分Linux发…

【mysql】MySQL服务无法启动 NET HELPMSG 3534

MySQL服务无法启动 NET HELPMSG 3534 错误描述寻找原因解决方法 错误描述 mysql版本:8.1.0 mysql安装成功之后,使用net start mysql来启动mysql,然后出现了报错 MySQL服务无法启动 NET HELPMSG 3534 寻找原因 1、在cmd中,进入…

logstash常用的filter插件-grok、geoip

昨日内容回顾: (1)logstash的安装部署及常用的参数 -r: 热加载配置文件。 -t: 检查配置文件语法是否正确。 -f: 指定自定义的配置文件,若不指定,则读取pipline.yaml配置文件。 …

【Git】在idea中多分支开发如何——合并分支、处理冲突

博主简介:22级计算机科学与技术本科生一枚🌸博主主页:是瑶瑶子啦每日一言🌼: “人间总有一两风,填我十万八千梦” 目录 一、背景二、具体操作 一、背景 我当前开发的分支——hfy我想将subject分支的最新代码拉取&…

7.A+B(Ⅱ)

目录 题目 思路 注意事项 C代码 题目 Description 龙龙觉得之前的二进制加法可能对你来说太简单了,正好你也学完了“字符串处理”专题,那么就来考验一下你对大数加法的熟练程度吧?下面举一个实数加法运算的实例: 2.01 1…