File size: 1,331 Bytes
346b427
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import numpy as np
import cv2

import gradio as gr
from huggingface_hub import hf_hub_download

from scgan.config import Config
from scgan.generate_images import ImgGenerator


def download_weights(repo_id):
    char_map_path = hf_hub_download(repo_id, "char_map.pkl")
    weights_path = hf_hub_download(repo_id, "model_checkpoint_epoch_200.pth.tar")
    return char_map_path, weights_path


def get_text_from_image(img):
    COLOR_MIN = np.array([0, 0, 0],np.uint8)
    COLOR_MAX = np.array([250,250,160],np.uint8)

    img = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
    text_mask = cv2.inRange(img, COLOR_MIN, COLOR_MAX).astype(bool)
    img = cv2.cvtColor(img, cv2.COLOR_HSV2RGB)

    bg = np.ones(img.shape, dtype=np.uint8) * 255
    bg[text_mask] = img[text_mask]
    return bg


def predict(text):
    imgs, texts = GENERATOR.generate(word_list=[text])
    image_on_white = get_text_from_image(imgs[0])
    return image_on_white


CHAR_MAP_PATH, WEIGHTS_PATH = download_weights("sberbank-ai/scrabblegan-peter")

GENERATOR = ImgGenerator(
    checkpt_path=WEIGHTS_PATH,
    config=Config,
    char_map_path=CHAR_MAP_PATH
)

gr.Interface(
    predict,
    inputs=gr.Textbox(label="Type your text to generate it on an image"),
    outputs=gr.Image(label="Generated image"),
    title="Peter handwritten image generation",
).launch()