def __init__(self, root, relpath2data=None, *, reads=True, prt=False, fltr='json', slt='json', extdata=None): """ :param root: 文件根目录 :param relpath2data: {jsonfile: lmdict, ...},其中 lmdict 为一个labelme文件格式的标准内容 如果未传入data具体值,则根据目录里的情况自动初始化获得data的值 210602周三16:26,为了工程等一些考虑,删除了 is_labelme_json_data 的检查 尽量通过 fltr、slt 的机制选出正确的 json 文件 """ super().__init__(root, relpath2data, reads=reads, prt=prt, fltr=fltr, slt=slt, extdata=extdata) # 已有的数据已经读取了,这里要补充空labelme标注 if self.pathgs: for stem, suffixs in tqdm(self.pathgs.data.items(), f'{self.__class__.__name__}优化数据', disable=not prt): f = File(stem, suffix=slt) if reads and not f: self.rp2data[f.relpath(self.root)] = LabelmeDict.gen_data( File(stem, suffix=suffixs[0]))
def __init__(self, root, relpath2data=None, *, reads=True, prt=False, fltr=None, slt=None, extdata=None): """ :param root: 数据所在根目录 :param dict[str, readed_data] relpath2data: {relpath: data1, 'a/1.txt': data2, ...} 如果未传入data具体值,则根据目录里的情况自动初始化获得data的值 relpath是对应的File标注文件的相对路径字符串 data1, data2 是读取的标注数据,根据不同情况,会存成不同格式 如果是json则直接保存json内存对象结构 如果是txt可能会进行一定的结构化解析存储 :param extdata: 可以存储一些扩展信息内容 :param fltr: filter的缩写,PathGroups 的过滤规则。一般用来进行图片匹配。 None,没有过滤规则,就算不存在slt格式的情况下,也会保留分组 'json'等字符串规则, 使用 select_group_which_hassuffix,必须含有特定后缀的分组 judge(k, v),自定义函数规则 :param slt: select的缩写,要选中的标注文件后缀格式 如果传入slt参数,该 Basic 基础类只会预设好 file 参数,数据部分会置 None,需要后续主动读取 >> BasicLabelData('textGroup/aabb', {'a.json': ..., 'a/1.json': ...}) >> BasicLabelData('textGroup/aabb', slt='json') >> BasicLabelData('textGroup/aabb', fltr='jpg', slt='json') # 只获取有对应jpg图片的json文件 >> BasicLabelData('textGroup/aabb', fltr='jpg|png', slt='json') """ # 1 基础操作 root = Dir(root) self.root, self.rp2data, self.extdata = root, relpath2data or {}, extdata or {} self.pathgs = None if relpath2data is not None or slt is None: return # 2 如果没有默认data数据,以及传入slt参数,则需要使用默认文件关联方式读取标注 relpath2data = {} gs = PathGroups.groupby(Dir(root).select_files('**/*')) if isinstance(fltr, str): gs = gs.select_group_which_hassuffix(fltr) elif callable(fltr): gs = gs.select_group(fltr) self.pathgs = gs # 3 读取数据 for stem, suffixs in tqdm(gs.data.items(), f'{self.__class__.__name__}读取数据', disable=not prt): f = File(stem, suffix=slt) if reads and f: # dprint(f) # 空json会报错:json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) relpath2data[f.relpath(self.root)] = f.read() else: relpath2data[f.relpath(self.root)] = None self.rp2data = relpath2data