欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

目标检测VOC数据集标注XML文件转EasyDL数据集标注Json格式

程序员文章站 2023-04-03 23:25:31
前段时间,需要使用百度大脑的EasyDL AI平台快速搭建一个目标检测模型。 平台地址:EasyDL平台 首先需要创建数据集,该平台可以自己上传数据在线标注,需要耗费较长时间。由于本人已有标注好的VOC格式的目标检测数据集,所以就想能不能直接利用起来在平台上训练。经发现可以上传有标注信息的本地数据集。 按照其示例标注json格式对VOC格式数据集中的Xml文件进行转换,代码如下:import osimport xml.etree.cElementTree ......

 

    前段时间,需要使用百度大脑的EasyDL AI平台快速搭建一个目标检测模型。

    平台地址:EasyDL平台


    首先需要创建数据集,该平台可以自己上传数据在线标注,需要耗费较长时间。由于本人已有标注好的VOC格式的目标检测数据集,所以就想能不能直接利用起来在平台上训练。经发现可以上传有标注信息的本地数据集。

    按照其示例标注json格式对VOC格式数据集中的Xml文件进行转换,代码如下:

import os
import xml.etree.cElementTree as ET
import json

#解析Xml中标注框的label和bbox
def get_bbox(xmlname):
    sig_xml_box = []
    label_name=[]
    tree = ET.parse(xmlname)
    root = tree.getroot()
    for i in root:  # 遍历一级节点
        if i.tag == 'object':
            for j in i:
                if j.tag == 'name':
                    cls_name = j.text
                    label_name.append(cls_name)
                if j.tag == 'bndbox':
                    bbox = []
                    xmin = 0
                    ymin = 0
                    xmax = 0
                    ymax = 0
                    for r in j:
                        if r.tag == 'xmin':
                            xmin = eval(r.text)
                        if r.tag == 'ymin':
                            ymin = eval(r.text)
                        if r.tag == 'xmax':
                            xmax = eval(r.text)
                        if r.tag == 'ymax':
                            ymax = eval(r.text)
                    bbox.append(xmin)
                    bbox.append(ymin)
                    bbox.append(xmax)
                    bbox.append(ymax)
                    sig_xml_box.append(bbox)
    return label_name, sig_xml_box

#获得转换Json文件
def get_json(xml_dir):
    xml_list = os.listdir(xml_dir)
    for xml_name in xml_list:
        json_name = xml_name.split('.')[0]+'.json'
        json_path = os.path.join(json_dir,json_name)
        xml_path =os.path.join(xml_dir,xml_name)
        label_name,sigxml_bbox = get_bbox(xml_path)
        ann_js = {}
        annotations = []
        for index, box in enumerate(sigxml_bbox):
            anno = {}
            anno['name'] = label_name[index]
            anno['x1'] = box[0]
            anno['y1'] = box[1]
            anno['x2'] = box[2]
            anno['y2'] = box[3]
            annotations.append(anno)
        ann_js['labels'] = annotations
        json.dump(ann_js, open(json_path, 'w'), indent=4)  # indent=4 更加美观显示

    然后将原图和Json文件打包为Zip,压缩包要求的格式如下:

目标检测VOC数据集标注XML文件转EasyDL数据集标注Json格式

     打包上传至数据中心即可开始训练。

     转载请注明出处,谢谢合作。

本文地址:https://blog.csdn.net/qq_41672428/article/details/107451834