目标检测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,压缩包要求的格式如下:
打包上传至数据中心即可开始训练。
转载请注明出处,谢谢合作。
本文地址:https://blog.csdn.net/qq_41672428/article/details/107451834
上一篇: LVS-nat模式-原理介绍