Rooni commited on
Commit
f8dd596
·
1 Parent(s): c632d1b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +72 -36
app.py CHANGED
@@ -1,52 +1,88 @@
1
  import gradio as gr
2
  import openai
3
  import os
4
- import requests
5
  from PIL import Image
 
6
  from io import BytesIO
7
 
8
- # Получаем API ключ из переменных среды
9
- api_key = os.getenv("API_KEY")
10
 
11
- # Убедитесь, что API ключ установлен
12
- if api_key is None:
13
- raise ValueError("API_KEY не найден. Установите переменную среды API_KEY с вашим ключом.")
14
-
15
- openai.api_key = api_key
 
 
 
 
 
 
 
 
16
 
17
- # Функция для генерации изображения с помощью DALL-E 3 API
18
- def generate_image(prompt):
19
- # Создаем задачу для генерации изображения
20
- response = openai.Image.create(prompt=prompt, n=1)
 
 
 
 
 
 
 
 
 
 
 
21
 
22
- # Получаем файловый ID из ответа
23
- file_id = response['data'][0]['id']
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
 
25
- # Получаем список изображений для данного файла
26
- images = openai.Image.list(file_id=file_id)
 
27
 
28
- # Получаем первое изображение из списка
29
- image_url = images['data'][0]['url']
30
 
31
- # Загружаем изображение по URL и конвертируем в формат, пригодный для Gradio
32
- response = requests.get(image_url)
33
- image = Image.open(BytesIO(response.content))
 
 
 
 
 
 
 
 
 
 
34
 
35
- return image
 
 
 
36
 
37
- with gr.Blocks() as demo:
38
- gr.Markdown("# Генератор изображений DALL-E 3")
39
-
40
- with gr.Tabs():
41
- with gr.TabItem("Базовые настройки"):
42
- with gr.Column():
43
- prompt_input = gr.Textbox(label="Введите в��ш запрос (prompt)", placeholder="Например: 'собака в космическом костюме'")
44
- generate_button = gr.Button("Сгенерировать изображение")
45
- output_image = gr.Image(label="Сгенерированное изображение")
46
- generate_button.click(fn=generate_image, inputs=prompt_input, outputs=output_image)
47
-
48
- with gr.TabItem("Расширенные настройки"):
49
- gr.Markdown("## Скоро...")
50
- # Здесь могут быть добавлены дополнительные настройки
51
 
52
  demo.launch()
 
1
  import gradio as gr
2
  import openai
3
  import os
 
4
  from PIL import Image
5
+ import requests
6
  from io import BytesIO
7
 
8
+ # Загрузим API ключ из переменных окружения
9
+ openai.api_key = os.getenv("API_KEY")
10
 
11
+ # Функция для генерации изображения
12
+ def generate_image(prompt, seed, sampling, cfg, width, height):
13
+ response = openai.Image.create(
14
+ prompt=prompt,
15
+ n=1,
16
+ size=f"{width}x{height}",
17
+ seed=seed,
18
+ sampling=sampling,
19
+ cfg_scale=cfg
20
+ )
21
+ image_url = response['data'][0]['url']
22
+ image = Image.open(requests.get(image_url, stream=True).raw)
23
+ return image
24
 
25
+ # Функция для улучшения качества изображения
26
+ def upscale_image(image, upscale_factor):
27
+ # Преобразуем PIL Image в Bytes, чтобы отправить его обратно в Gradio UI
28
+ buffered = BytesIO()
29
+ image.save(buffered, format="JPEG")
30
+ img_str = buffered.getvalue()
31
+
32
+ response = openai.Image.modify(
33
+ image=img_str,
34
+ n=1,
35
+ size=f"{image.width * upscale_factor}x{image.height * upscale_factor}"
36
+ )
37
+ upscaled_image_url = response['data'][0]['url']
38
+ upscaled_image = Image.open(requests.get(upscaled_image_url, stream=True).raw)
39
+ return upscaled_image
40
 
41
+ # Создаем интерфейс с вкладками
42
+ with gr.Blocks() as demo:
43
+ gr.Markdown("<style>footer { display: none; }</style>") # Скрываем footer
44
+ with gr.Tabs():
45
+ with gr.TabItem("Базовые настройки"):
46
+ with gr.Row():
47
+ prompt_input = gr.Textbox(label="Prompt", lines=3, placeholder="Введите описание изображения")
48
+ with gr.TabItem("Расширенные настройки"):
49
+ with gr.Row():
50
+ seed_input = gr.Number(label="Seed", value=0)
51
+ sampling_input = gr.Dropdown(label="Sampling Method", choices=["ancestral", "ddim"])
52
+ cfg_input = gr.Slider(label="CFG Scale", minimum=1, maximum=20, value=7)
53
+ width_input = gr.Number(label="Width", value=256)
54
+ height_input = gr.Number(label="Height", value=256)
55
+ with gr.TabItem("Настройки апскейлинга"):
56
+ with gr.Row():
57
+ upscale_factor_input = gr.Slider(label="Upscale Factor", minimum=2, maximum=6, value=2)
58
 
59
+ with gr.Row():
60
+ generate_button = gr.Button("Генерация")
61
+ upscale_button = gr.Button("Улучшить качество", visible=False)
62
 
63
+ original_image_output = gr.Image(label="Сгенерированное изображение", visible=False)
64
+ upscaled_image_output = gr.Image(label="Улучшенное изображение", visible=False)
65
 
66
+ # Обработчики событий кнопок
67
+ def generate_button_click():
68
+ image = generate_image(
69
+ prompt_input.value,
70
+ seed_input.value,
71
+ sampling_input.value,
72
+ cfg_input.value,
73
+ width_input.value,
74
+ height_input.value
75
+ )
76
+ original_image_output.update(value=image, visible=True)
77
+ upscale_button.update(visible=True)
78
+ return image
79
 
80
+ def upscale_button_click(image):
81
+ upscaled_image = upscale_image(image, upscale_factor_input.value)
82
+ upscaled_image_output.update(value=upscaled_image, visible=True)
83
+ return upscaled_image
84
 
85
+ generate_button.click(fn=generate_button_click, inputs=[], outputs=[original_image_output])
86
+ upscale_button.click(fn=upscale_button_click, inputs=[original_image_output], outputs=[upscaled_image_output])
 
 
 
 
 
 
 
 
 
 
 
 
87
 
88
  demo.launch()