def get_generator(self, bg_img_conf): """ generator :param bg_img_conf: :return: """ gen_probability = [] all_generator = [] for item in bg_img_conf: t = item['type'] probability = float(item['probability']) if t == 'from_dir': bg_img_dir = item['dir'] img_path_list = [os.path.join(bg_img_dir, img) for img in os.listdir(bg_img_dir) if ('.DS' not in img)] dir_img_gen = DirImageGen(img_path_list) all_generator.append(dir_img_gen) elif t == 'from_generate': width_range = eval(item['width_range']) height_range = eval(item['height_range']) gauss_img_gen = GenrateGaussImage(width_range=width_range, height_range=height_range) all_generator.append(gauss_img_gen) gen_probability.append(probability) value_list = gen_probability len_gen = len(all_generator) while True: index = Random.random_choice(list(value_list)) if index <= len_gen and all_generator[index]: np_img = all_generator[index].get_next.__next__() np_img = np_img[..., ::-1] img = Image.fromarray(np_img, mode='RGB') yield img
def get_generator(self, corpus_list): _all_generator = [] gen_probability_list = [] for corpus in corpus_list: gen_probability_list.append(float(corpus['probability'])) with open(corpus['path'], 'r') as fp: if corpus['type'] == 'line': data = fp.readlines() data = self._replace_useless(data) generator = RandomCorpusGen(data, eval(corpus['len_range'])) _all_generator.append(generator) elif corpus['type'] == 'word': data = fp.readline() data = self._replace_useless(data) generator = RandomCharacterGen(list(data), eval(corpus['len_range'])) _all_generator.append(generator) while True: index = Random.random_choice(gen_probability_list) if _all_generator[index]: yield _all_generator[index].get_next.__next__()
def pick(strategy_list) -> Strategy: """ 选择一个策略 :return: """ strategy_values = [] for strategy in strategy_list: strategy_values.append(float(strategy['probability'])) index = Random.random_choice(list(strategy_values)) strategy_name = strategy_list[index]['name'] strategy = get_strategy_by_name(strategy_name) log.info("pick strategy: {strategy}".format(strategy=strategy_name)) return strategy