使用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 小时前
微软开源项目MarkitDown:一款将pdf/word/ppt等各类文件转换为Markdown格式的python工具
python
Unbelievabletobe8 小时前
解决了股票api接口盘后数据更新慢的问题
大数据·开发语言·python
lpd_lt9 小时前
AI Coding的常用Prompt技巧
python·ai·ai编程
小江的记录本9 小时前
【JVM虚拟机】堆内存分代模型:年轻代(Eden+Survivor)、老年代、元空间Metaspace(附《思维导图》+《面试高频考点清单》)
java·前端·jvm·后端·python·spring·面试
在繁华处9 小时前
Java从零到熟练(三):流程控制
java·开发语言·python
asdzx6710 小时前
使用 Python 快速提取 PDF 中的表格
python·pdf
无情的西瓜皮10 小时前
MCP协议实战:用Python从零搭建一个AI Agent工具服务器(保姆级教程)
服务器·人工智能·python·mcp
岁月宁静11 小时前
驾驭 AI 这匹野马:深入解析智能体 Harness 工程
vue.js·python
星恒随风12 小时前
Python 基础语法详解(一):从表达式、变量到数据类型
开发语言·笔记·python·学习
888CC++12 小时前
java 并发编程
java·开发语言·python