Rooni commited on
Commit
7d9be07
·
1 Parent(s): 2c3b898

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +92 -73
app.py CHANGED
@@ -1,88 +1,107 @@
1
  import gradio as gr
2
- import torch
3
- from PIL import Image
4
 
5
- # Список моделей
6
- models = [
7
- "CLIP",
 
 
 
8
  "DALL-E 2",
9
- "VQGAN + CLIP",
 
 
10
  "VQGAN",
11
- "Dreams",
12
- "VQGAN-CLIP-ADA",
13
- "DALL-E Mini",
14
- "VQGAN-CLIP-Ada-Mini",
15
- "DALL-E Mini-Fusion",
16
- "VQGAN-CLIP-Ada-Mini-Fusion",
17
- "DALL-E 2 Mini",
18
- "VQGAN-CLIP-Ada-Mini-2",
19
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
20
 
21
  # Функция генерации изображения
22
- def generate_image(prompt, negative_prompt, model):
23
- if model == "CLIP":
24
- from clip import clip
25
- image = clip.generate(prompt, negative_prompt)
26
- elif model == "DALL-E 2":
27
- from d2l import d2l
28
- image = d2l.generate_image(prompt, negative_prompt)
29
- elif model == "VQGAN + CLIP":
30
- from vqgan_clip import vqgan_clip
31
- image = vqgan_clip.generate(prompt, negative_prompt)
 
 
 
 
32
  elif model == "VQGAN":
33
- from vqgan import vqgan
34
- image = vqgan.generate(prompt, negative_prompt)
35
- elif model == "Dreams":
36
- from dreams import dreams
37
- image = dreams.generate(prompt, negative_prompt)
38
- elif model == "VQGAN-CLIP-ADA":
39
- from vqgan_clip_ada import vqgan_clip_ada
40
- image = vqgan_clip_ada.generate(prompt, negative_prompt)
41
- elif model == "DALL-E Mini":
42
- from dall_e_mini import dall_e_mini
43
- image = dall_e_mini.generate(prompt, negative_prompt)
44
- elif model == "VQGAN-CLIP-Ada-Mini":
45
- from vqgan_clip_ada_mini import vqgan_clip_ada_mini
46
- image = vqgan_clip_ada_mini.generate(prompt, negative_prompt)
47
- elif model == "DALL-E Mini-Fusion":
48
- from dall_e_mini_fusion import dall_e_mini_fusion
49
- image = dall_e_mini_fusion.generate(prompt, negative_prompt)
50
- elif model == "VQGAN-CLIP-Ada-Mini-Fusion":
51
- from vqgan_clip_ada_mini_fusion import vqgan_clip_ada_mini_fusion
52
- image = vqgan_clip_ada_mini_fusion.generate(prompt, negative_prompt)
53
- elif model == "DALL-E 2 Mini":
54
- from dall_e_2_mini import dall_e_2_mini
55
- image = dall_e_2_mini.generate(prompt, negative_prompt)
56
- elif model == "VQGAN-CLIP-Ada-Mini-2":
57
- from vqgan_clip_ada_mini_2 import vqgan_clip_ada_mini_2
58
- image = vqgan_clip_ada_mini_2.generate(prompt, negative_prompt)
59
-
60
- image = Image.fromarray(image)
61
  return image
62
 
63
  # Функция улучшения качества изображения
64
- def improve_image(image):
65
- from improve_image import improve_image
66
- image = improve_image(image)
 
 
 
67
  return image
68
 
69
- # Интерфейс gradio
70
- app = gr.Interface(
71
- generate_image,
72
- title="Gradio Image Generator",
73
- description="Генератор изображений с помощью ИИ",
74
- inputs=[
75
- gr.Textbox(label="Текстовый запрос"),
76
- gr.Textbox(label="Отрицательный текстовый запрос"),
77
- gr.Dropdown(choices=models, label="Модель"),
78
- ],
79
- outputs=[
80
- gr.Image(label="Сгенерированное изображение")
81
- ],
82
- buttons=[
83
- gr.Button("Улучшить качество", fn=improve_image)
84
- ]
85
- )
 
 
 
86
 
87
  if __name__ == "__main__":
88
- app.launch()
 
1
  import gradio as gr
 
 
2
 
3
+ from transformers import AutoModelForConditionalGeneration, AutoTokenizer
4
+
5
+ # Базовые настройки
6
+
7
+ prompt = gr.inputs.Textbox(label="Промпт")
8
+ model_list = [
9
  "DALL-E 2",
10
+ "VQGAN+CLIP",
11
+ "BigGAN",
12
+ "StyleGAN2",
13
  "VQGAN",
14
+ "CLIP",
15
+ "VQGAN+CLIP-Vanilla",
16
+ "VQGAN+CLIP-Cutout",
17
+ "VQGAN+CLIP-RandomizedCutout",
 
 
 
 
18
  ]
19
+ model = gr.widgets.ToggleButtons(options=model_list, label="Модель")
20
+
21
+ # Расширенные настройки
22
+
23
+ negative_prompt = gr.inputs.Textbox(label="Отрицательный промпт")
24
+ sampling_method = gr.inputs.RadioButtons(options=["greedy", "top-k", "nucleus"], label="Метод выборки")
25
+ sampling_steps = gr.inputs.Number(min=1, max=100, label="Количество шагов выборки")
26
+ cfg_scale = gr.inputs.Number(min=0.1, max=1.0, label="Масштаб CFG")
27
+ seed = gr.inputs.Number(min=0, max=2**31 - 1, label="Случайное число")
28
+
29
+ # Улучшение качества
30
+
31
+ upscale_algorithm = gr.inputs.RadioButtons(options=["bicubic", "lanczos"], label="Алгоритм увеличения")
32
 
33
  # Функция генерации изображения
34
+
35
+ def generate_image(prompt, model, negative_prompt, sampling_method, sampling_steps, cfg_scale, seed):
36
+ if model == "DALL-E 2":
37
+ model = AutoModelForConditionalGeneration.from_pretrained("google/dalle-2-1024")
38
+ tokenizer = AutoTokenizer.from_pretrained("google/dalle-2-1024")
39
+ elif model == "VQGAN+CLIP":
40
+ model = AutoModelForConditionalGeneration.from_pretrained("openai/vqgan-clip")
41
+ tokenizer = AutoTokenizer.from_pretrained("openai/vqgan-clip")
42
+ elif model == "BigGAN":
43
+ model = AutoModelForConditionalGeneration.from_pretrained("karras2022/biggan-deep-256")
44
+ tokenizer = AutoTokenizer.from_pretrained("karras2022/biggan-deep-256")
45
+ elif model == "StyleGAN2":
46
+ model = AutoModelForConditionalGeneration.from_pretrained("NVlabs/stylegan2-ada")
47
+ tokenizer = AutoTokenizer.from_pretrained("NVlabs/stylegan2-ada")
48
  elif model == "VQGAN":
49
+ model = AutoModelForConditionalGeneration.from_pretrained("vqgan/vqgan_imagenet_f16_1024")
50
+ tokenizer = AutoTokenizer.from_pretrained("vqgan/vqgan_imagenet_f16_1024")
51
+ elif model == "CLIP":
52
+ model = AutoModelForConditionalGeneration.from_pretrained("openai/clip")
53
+ tokenizer = AutoTokenizer.from_pretrained("openai/clip")
54
+ elif model == "VQGAN+CLIP-Vanilla":
55
+ model = AutoModelForConditionalGeneration.from_pretrained("vqgan/vqgan_imagenet_f16_1024_clip_vanilla")
56
+ tokenizer = AutoTokenizer.from_pretrained("vqgan/vqgan_imagenet_f16_1024_clip_vanilla")
57
+ elif model == "VQGAN+CLIP-Cutout":
58
+ model = AutoModelForConditionalGeneration.from_pretrained("vqgan/vqgan_imagenet_f16_1024_clip_cutout")
59
+ tokenizer = AutoTokenizer.from_pretrained("vqgan/vqgan_imagenet_f16_1024_clip_cutout")
60
+ elif model == "VQGAN+CLIP-RandomizedCutout":
61
+ model = AutoModelForConditionalGeneration.from_pretrained("vqgan/vqgan_imagenet_f16_1024_clip_randomized_cutout")
62
+ tokenizer = AutoTokenizer.from_pretrained("vqgan/vqgan_imagenet_f16_1024_clip_randomized_cutout")
63
+
64
+ prompt = f"{prompt} {negative_prompt}"
65
+
66
+ image = model.generate(
67
+ text=prompt,
68
+ sampling_method=sampling_method,
69
+ sampling_steps=sampling_steps,
70
+ cfg_scale=cfg_scale,
71
+ seed=seed,
72
+ )
73
+
 
 
 
74
  return image
75
 
76
  # Функция улучшения качества изображения
77
+
78
+ def upscale_image(image, upscale_algorithm):
79
+ if upscale_algorithm == "bicubic":
80
+ image = cv2.resize(image, dsize=(image.shape[1] * 2, image.shape[0] * 2), interpolation=cv2.INTER_CUBIC)
81
+ elif upscale_algorithm == "lanczos":
82
+ image = cv2.resize(image, dsize=(image.shape[1] * 2, image.shape[0] * 2), interpolation=cv2.INTER_LANCZOS4)
83
  return image
84
 
85
+ # Функция отображения изображения
86
+
87
+ def show_image(image):
88
+ image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
89
+ cv2.imshow("Image", image)
90
+ cv2.waitKey(0)
91
+
92
+ # Основная функция
93
+
94
+ def main():
95
+ image = generate_image(prompt.value, model.value, negative_prompt.value, sampling_method.value, sampling_steps.value, cfg_scale.value, seed.value)
96
+
97
+ # Если выбрано улучшение качества изображения
98
+
99
+ if upscale_algorithm.value != "none":
100
+ image = upscale_image(image, upscale_algorithm.value)
101
+
102
+ # Отображение изображения
103
+
104
+ show_image(image)
105
 
106
  if __name__ == "__main__":
107
+ main()