dineshsai07's picture
Add files using upload-large-folder tool
0ccacae verified
import os.path as osp
import numpy as np
import numpy.random as npr
import PIL
import cv2
import torch
import torchvision
import xml.etree.ElementTree as ET
import json
import copy
import math
def singleton(class_):
instances = {}
def getinstance(*args, **kwargs):
if class_ not in instances:
instances[class_] = class_(*args, **kwargs)
return instances[class_]
return getinstance
@singleton
class get_estimator(object):
def __init__(self):
self.estimator = {}
def register(self, estimf):
self.estimator[estimf.__name__] = estimf
def __call__(self, cfg):
if cfg is None:
return None
t = cfg.type
return self.estimator[t](**cfg.args)
def register():
def wrapper(class_):
get_estimator().register(class_)
return class_
return wrapper
@register()
class PickFileEstimator(object):
"""
This is an estimator that filter load_info
using the provided filelist
"""
def __init__(self,
filelist = None,
repeat_n = 1):
"""
Args:
filelist: a list of string gives the name of images
we would like to visualize, evaluate or train.
repeat_n: int, times these images will be repeated
"""
self.filelist = filelist
self.repeat_n = repeat_n
def __call__(self, load_info):
load_info_new = []
for info in load_info:
if os.path.basename(info['image_path']).split('.')[0] in self.filelist:
load_info_new.append(info)
return load_info_new * self.repeat_n
@register()
class PickIndexEstimator(object):
"""
This is an estimator that filter load_info
using the provided indices
"""
def __init__(self,
indexlist = None,
**kwargs):
"""
Args:
indexlist: [] of int.
the indices to be filtered out.
"""
self.indexlist = indexlist
def __call__(self, load_info):
load_info_new = [load_info[i] for i in self.indexlist]
return load_info_new