使用Python+xml+shutil修改目标检测图片和对应xml标注文件

使用Python+xml+shutil修改目标检测图片文件名和对应xml标注文件:

python 复制代码
import os
import glob
import xml.etree.ElementTree as et
import shutil



def change_labels(source_dir):

    name_id = 18001

    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
        filename.text = "%06d.jpg" % name_id
        path = et.SubElement(root, "path")
        path.text = "/ADAS/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_ == "pedestrian" or name_ == "rider":
                n = "person"
            elif name_ == "other vehicle":
                n = "truck"
            elif name_ in ["motorcycle", "bicycle","motor","bike"] :
                n = "others"
            elif name_ in ["car","minibus","bus","truck","others","person","leftline","rightline"] :
                n = name_
            else:
                continue
            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

        file_label = file.replace(tree_.find(".//filename").text.replace(".jpg",".xml"), "%06d.xml" % name_id).replace("Annotations","new-Annotations")
        # print("------",file,tree_.find(".//filename").text.replace(".jpg",".xml"),"%06d.xml" % name_id)
        tree = et.ElementTree(root)
        tree.write(file_label, encoding="utf-8")

        if tree_.find(".//filename").text.split(".")[-1] == "jpg":
            shutil.copy(file.replace("Annotations","JPEGImages").replace(".xml",".jpg"), file.replace("Annotations","new-JPEGImages").replace(tree_.find(".//filename").text.replace(".jpg",".xml"), "%06d.jpg" % name_id))
            print(file.replace("Annotations","new-JPEGImages").replace(tree_.find(".//filename").text.replace(".jpg",".xml"), "%06d.jpg" % name_id), tree_.find(".//filename").text)

        elif tree_.find(".//filename").text.split(".")[-1] == "png":
            shutil.copy(file.replace("Annotations", "JPEGImages").replace(".xml", ".png"),
                        file.replace("Annotations", "new-JPEGImages").replace(tree_.find(".//filename").text.replace(".png",".xml"),
                                                                            "%06d.png" % name_id))
        name_id = name_id + 1

if __name__ == '__main__':
    source_dir = "Q:\\DATAS\\nighttime-5000\\Annotations"
    change_labels(source_dir)

代码解读:

1、原始图片文件目录:JPEGImages

2、原始XML标注文件目录:Annotations

3、新生成的图片文件目录:new-JPEGImages

4、新生成的XML标注文件目录:new-Annotations

相关推荐
重启编程之路1 小时前
python 基础学习socket -TCP编程
网络·python·学习·tcp/ip
云和数据.ChenGuang2 小时前
pycharm怎么将背景换成白色
ide·python·pycharm
我的xiaodoujiao2 小时前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 25--数据驱动--参数化处理 Excel 文件 2
前端·python·学习·测试工具·ui·pytest
DO_Community2 小时前
基于AI Agent模板:快速生成 SQL 测试数据
人工智能·python·sql·ai·llm·ai编程
Q_Q5110082854 小时前
python+django/flask的宠物用品系统vue
spring boot·python·django·flask·node.js·php
hmbbcsm4 小时前
练习python题目小记(五)
开发语言·python
蓝桉~MLGT4 小时前
Python学习历程——文件
python·学习·策略模式
循环过三天4 小时前
7.5、Python-匿名函数lambda
笔记·python·学习
仟濹5 小时前
【Java 基础】3 面向对象 - this
java·开发语言·python