def gen_single_corpus(self) -> Tuple[PILImage, str]: font_text = self.corpus.sample() bg = self.bg_manager.get_bg() text_color = self.corpus.cfg.text_color_cfg.get_color(bg) text_mask = draw_text_on_bg(font_text, text_color, char_spacing=self.corpus.cfg.char_spacing) if self.cfg.corpus_effects is not None: text_mask, _ = self.cfg.corpus_effects.apply_effects( text_mask, BBox.from_size(text_mask.size)) if self.cfg.perspective_transform is not None: transformer = PerspectiveTransform(self.cfg.perspective_transform) # TODO: refactor this, now we must call get_transformed_size to call gen_warp_matrix _ = transformer.get_transformed_size(text_mask.size) ( transformed_text_mask, transformed_text_pnts, ) = transformer.do_warp_perspective(text_mask) else: transformed_text_mask = text_mask img = self.paste_text_mask_on_bg(bg, transformed_text_mask) return img, font_text.text
def main(name: str, font_dir: str): font_manager = FontManager(Path(font_dir), None, (10, 20)) font_size = st.sidebar.number_input("Font Size", min_value=30) text = st.sidebar.text_input("Input Text", "Hello World") text_color = (0, 0, 0, 255) # images = {} for font_path in font_manager.font_paths: font = font_manager._get_font(font_path, font_size) font_text = FontText(font, text, font_path) text_mask = draw_text_on_bg(font_text, text_color) st.text(Path(font_path).name) st.image(text_mask)
def gen_single_corpus(self) -> Tuple[PILImage, str, PILImage, PILImage]: font_text = self.corpus.sample() bg = self.bg_manager.get_bg() if self.cfg.text_color_cfg is not None: text_color = self.cfg.text_color_cfg.get_color(bg) # corpus text_color has higher priority than RenderCfg.text_color_cfg if self.corpus.cfg.text_color_cfg is not None: text_color = self.corpus.cfg.text_color_cfg.get_color(bg) text_mask = draw_text_on_bg(font_text, text_color, char_spacing=self.corpus.cfg.char_spacing) if self.cfg.corpus_effects is not None: text_mask, _ = self.cfg.corpus_effects.apply_effects( text_mask, BBox.from_size(text_mask.size)) if self.cfg.perspective_transform is not None: transformer = PerspectiveTransform(self.cfg.perspective_transform) # TODO: refactor this, now we must call get_transformed_size to call gen_warp_matrix _ = transformer.get_transformed_size(text_mask.size) try: ( transformed_text_mask, transformed_text_pnts, ) = transformer.do_warp_perspective(text_mask) except Exception as e: logger.exception(e) logger.error(font_text.font_path, "text", font_text.text) raise e else: transformed_text_mask = text_mask img, cropped_bg = self.paste_text_mask_on_bg(bg, transformed_text_mask) return img, font_text.text, cropped_bg, transformed_text_mask
def gen_single_corpus(self) -> Tuple[PILImage, str]: font_text = self.corpus.sample() bg = self.bg_manager.get_bg() text_color = self.corpus.cfg.text_color_cfg.get_color(bg) text_mask = draw_text_on_bg(font_text, text_color, char_spacing=self.corpus.cfg.char_spacing) if self.cfg.corpus_effects is not None: text_mask, _ = self.cfg.corpus_effects.apply_effects( text_mask, BBox.from_size(text_mask.size)) if self.cfg.perspective_transform is not None: transformer = PerspectiveTransform(self.cfg.perspective_transform) # TODO: refactor this, now we must call get_transformed_size to call gen_warp_matrix _ = transformer.get_transformed_size(text_mask.size) try: ( transformed_text_mask, transformed_text_pnts, ) = transformer.do_warp_perspective(text_mask) except Exception as e: logger.exception(e) logger.error(font_text.font_path, "text", font_text.text) raise e else: transformed_text_mask = text_mask img = self.paste_text_mask_on_bg(bg, transformed_text_mask) # After pasting the text mask on the background we draw bbox for each character on the transformed image. img = self.lay_bbox_over_image(image=img, font_text=font_text, text_color=text_color) return img, font_text.text
def gen_multi_corpus(self) -> Tuple[PILImage, str]: font_texts: List[FontText] = [it.sample() for it in self.corpus] bg = self.bg_manager.get_bg() text_color = None if self.cfg.text_color_cfg is not None: text_color = self.cfg.text_color_cfg.get_color(bg) text_masks, text_bboxes = [], [] for i in range(len(font_texts)): font_text = font_texts[i] if text_color is None: _text_color = self.corpus[i].cfg.text_color_cfg.get_color(bg) else: _text_color = text_color text_mask = draw_text_on_bg( font_text, _text_color, char_spacing=self.corpus[i].cfg.char_spacing) text_bbox = BBox.from_size(text_mask.size) if self.cfg.corpus_effects is not None: effects = self.cfg.corpus_effects[i] if effects is not None: text_mask, text_bbox = effects.apply_effects( text_mask, text_bbox) text_masks.append(text_mask) text_bboxes.append(text_bbox) text_mask_bboxes, merged_text = self.layout( font_texts, [it.copy() for it in text_bboxes], [BBox.from_size(it.size) for it in text_masks], ) if len(text_mask_bboxes) != len(text_bboxes): raise PanicError( "points and text_bboxes should have same length after layout output" ) merged_bbox = BBox.from_bboxes(text_mask_bboxes) merged_text_mask = transparent_img(merged_bbox.size) for text_mask, bbox in zip(text_masks, text_mask_bboxes): merged_text_mask.paste(text_mask, bbox.left_top) if self.cfg.perspective_transform is not None: transformer = PerspectiveTransform(self.cfg.perspective_transform) # TODO: refactor this, now we must call get_transformed_size to call gen_warp_matrix _ = transformer.get_transformed_size(merged_text_mask.size) ( transformed_text_mask, transformed_text_pnts, ) = transformer.do_warp_perspective(merged_text_mask) else: transformed_text_mask = merged_text_mask if self.cfg.layout_effects is not None: transformed_text_mask, _ = self.cfg.layout_effects.apply_effects( transformed_text_mask, BBox.from_size(transformed_text_mask.size)) img = self.paste_text_mask_on_bg(bg, transformed_text_mask) return img, merged_text