当前位置: 移动技术网 > IT编程>开发语言>JavaScript > 目标检测VOC数据集标注XML文件转EasyDL数据集标注Json格式

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

2020年07月20日  | 移动技术网IT编程  | 我要评论

 

    前段时间,需要使用百度大脑的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,压缩包要求的格式如下:

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

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网