|
import gradio as gr |
|
|
|
from transformers import AutoModelForConditionalGeneration, AutoTokenizer |
|
|
|
|
|
|
|
prompt = gr.inputs.Textbox(label="Промпт") |
|
model_list = [ |
|
"DALL-E 2", |
|
"VQGAN+CLIP", |
|
"BigGAN", |
|
"StyleGAN2", |
|
"VQGAN", |
|
"CLIP", |
|
"VQGAN+CLIP-Vanilla", |
|
"VQGAN+CLIP-Cutout", |
|
"VQGAN+CLIP-RandomizedCutout", |
|
] |
|
model = gr.widgets.ToggleButtons(options=model_list, label="Модель") |
|
|
|
|
|
|
|
negative_prompt = gr.inputs.Textbox(label="Отрицательный промпт") |
|
sampling_method = gr.inputs.RadioButtons(options=["greedy", "top-k", "nucleus"], label="Метод выборки") |
|
sampling_steps = gr.inputs.Number(min=1, max=100, label="Количество шагов выборки") |
|
cfg_scale = gr.inputs.Number(min=0.1, max=1.0, label="Масштаб CFG") |
|
seed = gr.inputs.Number(min=0, max=2**31 - 1, label="Случайное число") |
|
|
|
|
|
|
|
upscale_algorithm = gr.inputs.RadioButtons(options=["bicubic", "lanczos"], label="Алгоритм увеличения") |
|
|
|
|
|
|
|
def generate_image(prompt, model, negative_prompt, sampling_method, sampling_steps, cfg_scale, seed): |
|
if model == "DALL-E 2": |
|
model = AutoModelForConditionalGeneration.from_pretrained("google/dalle-2-1024") |
|
tokenizer = AutoTokenizer.from_pretrained("google/dalle-2-1024") |
|
elif model == "VQGAN+CLIP": |
|
model = AutoModelForConditionalGeneration.from_pretrained("openai/vqgan-clip") |
|
tokenizer = AutoTokenizer.from_pretrained("openai/vqgan-clip") |
|
elif model == "BigGAN": |
|
model = AutoModelForConditionalGeneration.from_pretrained("karras2022/biggan-deep-256") |
|
tokenizer = AutoTokenizer.from_pretrained("karras2022/biggan-deep-256") |
|
elif model == "StyleGAN2": |
|
model = AutoModelForConditionalGeneration.from_pretrained("NVlabs/stylegan2-ada") |
|
tokenizer = AutoTokenizer.from_pretrained("NVlabs/stylegan2-ada") |
|
elif model == "VQGAN": |
|
model = AutoModelForConditionalGeneration.from_pretrained("vqgan/vqgan_imagenet_f16_1024") |
|
tokenizer = AutoTokenizer.from_pretrained("vqgan/vqgan_imagenet_f16_1024") |
|
elif model == "CLIP": |
|
model = AutoModelForConditionalGeneration.from_pretrained("openai/clip") |
|
tokenizer = AutoTokenizer.from_pretrained("openai/clip") |
|
elif model == "VQGAN+CLIP-Vanilla": |
|
model = AutoModelForConditionalGeneration.from_pretrained("vqgan/vqgan_imagenet_f16_1024_clip_vanilla") |
|
tokenizer = AutoTokenizer.from_pretrained("vqgan/vqgan_imagenet_f16_1024_clip_vanilla") |
|
elif model == "VQGAN+CLIP-Cutout": |
|
model = AutoModelForConditionalGeneration.from_pretrained("vqgan/vqgan_imagenet_f16_1024_clip_cutout") |
|
tokenizer = AutoTokenizer.from_pretrained("vqgan/vqgan_imagenet_f16_1024_clip_cutout") |
|
elif model == "VQGAN+CLIP-RandomizedCutout": |
|
model = AutoModelForConditionalGeneration.from_pretrained("vqgan/vqgan_imagenet_f16_1024_clip_randomized_cutout") |
|
tokenizer = AutoTokenizer.from_pretrained("vqgan/vqgan_imagenet_f16_1024_clip_randomized_cutout") |
|
|
|
prompt = f"{prompt} {negative_prompt}" |
|
|
|
image = model.generate( |
|
text=prompt, |
|
sampling_method=sampling_method, |
|
sampling_steps=sampling_steps, |
|
cfg_scale=cfg_scale, |
|
seed=seed, |
|
) |
|
|
|
return image |
|
|
|
|
|
|
|
def upscale_image(image, upscale_algorithm): |
|
if upscale_algorithm == "bicubic": |
|
image = cv2.resize(image, dsize=(image.shape[1] * 2, image.shape[0] * 2), interpolation=cv2.INTER_CUBIC) |
|
elif upscale_algorithm == "lanczos": |
|
image = cv2.resize(image, dsize=(image.shape[1] * 2, image.shape[0] * 2), interpolation=cv2.INTER_LANCZOS4) |
|
return image |
|
|
|
|
|
|
|
def show_image(image): |
|
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) |
|
cv2.imshow("Image", image) |
|
cv2.waitKey(0) |
|
|
|
|
|
|
|
def main(): |
|
image = generate_image(prompt.value, model.value, negative_prompt.value, sampling_method.value, sampling_steps.value, cfg_scale.value, seed.value) |
|
|
|
|
|
|
|
if upscale_algorithm.value != "none": |
|
image = upscale_image(image, upscale_algorithm.value) |
|
|
|
|
|
|
|
show_image(image) |
|
|
|
if __name__ == "__main__": |
|
main() |
|
|