以遥感DIOR数据集为例,其标注文件为.xml格式,例
想把某一类从中取出来并生成针对此类的mask,实现方法是将.xml转化为json后读取object中的内容,将boundingbox的值取出生成mask图,需要用到的包如下
import simplejson
import xmltodict
import numpy as np
f.open()取出.xml数据,转换为json并读取字符
xmlparse = xmltodict.parse(xmlstr)
jsonstr = simplejson.dumps(xmlparse,indent=1)
simplejson_list = simplejson.loads(jsonstr, encoding='utf-8', strict=False)
取出object信息
annotation_objs = simplejson_list['annotation']['object']
由于DIOR数据集中一张图上可能有多个目标,故需要循环查找所需类别。在上个语句中,若一张图中只有一个目标,则annotation_objs为dict类型,若有多个目标则为list,所以要针对这两种情况分别讨论,不能直接循环查找。先判断是否为list,再循环list中每个obj的信息,将名字和boundingbox取出,对mask赋值
if isinstance(annotation_objs, list): # 判断是否为List
len_obj = len(annotation_objs)
for i in range(len_obj):
obj_name = annotation_objs[i]['name']
if obj_name == obj_str:
k = k+1
obj_bnd = annotation_objs[i]['bndbox'