首先需要创建数据集,该平台可以自己上传数据在线标注,需要耗费较长时间。由于本人已有标注好的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,压缩包要求的格式如下:
打包上传至数据中心即可开始训练。
EasyDL分类数据集制作可跳至:EasyDL分类训练数据集Json生成
转载请注明出处,谢谢合作。