• 广东工业智造创新大赛数据格式转VOC


    #!/usr/bin/env python
    # coding: utf-8
    # @author: lwh
    # @file: mouse_find.py
    # @time: 2021/1/06 15:54
    from os import getcwd
    from xml.etree import ElementTree as ET
    
    import os
    import json
    import math
    
    # 创建xml文件的函数
    def create_tree(image_name, h, w):
        global annotation
        # 创建树根annotation
        annotation = ET.Element('annotation')
        # 创建一级分支folder
        folder = ET.SubElement(annotation, 'folder')
        # 添加folder标签内容
        folder.text = (img_dir)
    
        # 创建一级分支filename
        filename = ET.SubElement(annotation, 'filename')
        filename.text = image_name
    
        # 创建一级分支path
        path = ET.SubElement(annotation, 'path')
    
        path.text = getcwd() + '{}{}'.format(img_dir, image_name)  # 用于返回当前工作目录
    
        # 创建一级分支source
        source = ET.SubElement(annotation, 'source')
        # 创建source下的二级分支database
        database = ET.SubElement(source, 'database')
        database.text = 'Unknown'
    
        # 创建一级分支size
        size = ET.SubElement(annotation, 'size')
        # 创建size下的二级分支图像的宽、高及depth
        width = ET.SubElement(size, 'width')
        width.text = str(w)
        height = ET.SubElement(size, 'height')
        height.text = str(h)
        depth = ET.SubElement(size, 'depth')
        depth.text = '3'
    
        # 创建一级分支segmented
        segmented = ET.SubElement(annotation, 'segmented')
        segmented.text = '0'
    
    
    # 定义一个创建一级分支object的函数
    def create_object(root, xi, yi, xa, ya, obj_name):  # 参数依次,树根,xmin,ymin,xmax,ymax
        # 创建一级分支object
        _object = ET.SubElement(root, 'object')
        # 创建二级分支
        name = ET.SubElement(_object, 'name')
        # print(obj_name)
        name.text = str(obj_name)
        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
        bndbox = ET.SubElement(_object, 'bndbox')
        xmin = ET.SubElement(bndbox, 'xmin')
        xmin.text = '%s' % xi
        ymin = ET.SubElement(bndbox, 'ymin')
        ymin.text = '%s' % yi
        xmax = ET.SubElement(bndbox, 'xmax')
        xmax.text = '%s' % xa
        ymax = ET.SubElement(bndbox, 'ymax')
        ymax.text = '%s' % ya
    
    
    def json_to_xml(json_path, xml_dir):
        with open(json_path, 'r') as load_f:
            load_list = json.load(load_f)
            xml_list = []
            for load_dict in load_list:
                img_name = load_dict["name"]
                h = load_dict["image_height"]
                w = load_dict["image_width"]
                category = load_dict["category"]
                xmin = str(math.floor(load_dict["bbox"][0]))  #向下取整,保证目标被完全框住
                ymin = str(math.floor(load_dict["bbox"][1]))  #向下取整,保证目标被完全框住
                xmax = str(math.ceil(load_dict["bbox"][2]))  #向上取整,保证目标被完全框住=
                ymax = str(math.ceil(load_dict["bbox"][3]))  #向上取整,保证目标被完全框住
                #判断是否出现该图片得xml文件
                xml_name = img_name.split(".")[0] + ".xml"
    
                # print(xml_name)
                # xml_list = os.listdir(xml_dir)
    
                if xml_name in xml_list:
                    print(xml_name)
                    xml_path = os.path.join(xml_dir, xml_name)
                    doc = ET.parse(xml_path)
                    root = doc.getroot()
                    create_object(root, xmin, ymin, xmax, ymax, category)
                    doc.write(xml_path, encoding="utf-8", xml_declaration=True)
                else:
                    xml_list.append(xml_name)
                    create_tree(img_name, h, w)
                    create_object(annotation, xmin, ymin, xmax, ymax,category)
                    tree = ET.ElementTree(annotation)
                    tree.write('{}{}.xml'.format(xml_dir, img_name.strip('.jpg')))
    
    
    
    
    if __name__ == '__main__':
        img_dir = r"F:Intelligent_manufacturing	ile_round1_train_20201231	rain_imgs"
        json_path = r"F:Intelligent_manufacturing	ile_round1_train_20201231	rain_annos.json"  # 该目录为存放json文件的路径
        xml_dir = r"F:Intelligent_manufacturing	ile_round1_train_20201231	rain_xmls"  # 该目录为放xml文件的路径
        json_to_xml(json_path, xml_dir)
  • 相关阅读:
    笑话几则
    .net 知识点滴
    LoadRunner本机录制http协议程序遇到的问题以及解决方法
    40款非常棒的 jQuery 插件和制作教程(系列二)
    50个极佳的企业网站案例
    jQuery ui effects
    9个优秀网上免费标签云生成工具
    30 +创意的登录页面设计灵感
    分享一个jQuery的时间轴插件:TimergliderJS
    36个非常有趣的互动网站设计作品范例
  • 原文地址:https://www.cnblogs.com/liuwenhua/p/14242192.html
Copyright © 2020-2023  润新知