ImgGen / app.py
Rooni's picture
Update app.py
28786bc
raw
history blame
4.61 kB
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()