Anonym26 commited on
Commit
e81e176
·
verified ·
1 Parent(s): 0eb4242

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +80 -33
app.py CHANGED
@@ -1,5 +1,6 @@
1
  import gradio as gr
2
- import requests
 
3
  from PIL import Image
4
  from io import BytesIO
5
  from dotenv import load_dotenv
@@ -9,49 +10,95 @@ import os
9
  load_dotenv()
10
  API_TOKEN = os.getenv("HF_API_TOKEN")
11
 
12
- def generate_image(prompt, model_name):
13
- API_URL = f"https://api-inference.huggingface.co/models/{model_name}"
14
- headers = {"Authorization": f"Bearer {API_TOKEN}"}
15
-
16
- response = requests.post(API_URL, headers=headers, json={"inputs": prompt})
17
- if response.status_code == 200:
18
- return Image.open(BytesIO(response.content))
19
- else:
20
- return f"Ошибка: {response.status_code}, {response.text}"
21
-
22
- models = {
23
  "Stable Diffusion v1.5": "Yntec/stable-diffusion-v1-5",
24
- "DreamBooth v2": "Yntec/stable-diffusion-v1-5",
25
- "DALL-E Mini": "Yntec/stable-diffusion-v1-5",
26
- "DeepAI Generator": "Yntec/stable-diffusion-v1-5",
27
- "Realistic Vision": "Yntec/stable-diffusion-v1-5",
28
- "Artistic AI": "Yntec/stable-diffusion-v1-5"
29
  }
30
 
31
- def handle_input(prompt):
32
- outputs = {}
33
- for name, model in models.items():
34
- outputs[name] = generate_image(prompt, model)
35
- return list(outputs.values())
36
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
 
 
 
38
  with gr.Blocks() as demo:
39
- gr.Markdown("## Демо-генерация изображений с помощью различных моделей нейросетей")
40
- with gr.Row():
41
- user_input = gr.Textbox(label="Введите описание изображения",
42
- placeholder="Например, 'Астронавт верхом на лошади'")
 
 
43
  with gr.Row():
44
- outputs = [
45
- gr.Image(label=name, interactive=False)
46
- for name in models.keys()
47
- ]
48
  generate_button = gr.Button("Сгенерировать")
49
 
50
- # Обработка клика
 
 
 
 
 
 
 
51
  generate_button.click(
52
- fn=handle_input,
53
  inputs=[user_input],
54
- outputs=outputs
55
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
56
 
57
  demo.launch()
 
1
  import gradio as gr
2
+ import asyncio
3
+ import aiohttp
4
  from PIL import Image
5
  from io import BytesIO
6
  from dotenv import load_dotenv
 
10
  load_dotenv()
11
  API_TOKEN = os.getenv("HF_API_TOKEN")
12
 
13
+ # Конфигурация API
14
+ HEADERS = {"Authorization": f"Bearer {API_TOKEN}"}
15
+ MODELS = {
 
 
 
 
 
 
 
 
16
  "Stable Diffusion v1.5": "Yntec/stable-diffusion-v1-5",
17
+ "Stable Diffusion v2.1": "stabilityai/stable-diffusion-2-1",
18
+ "Stable Diffusion v3.5 Large": "stabilityai/stable-diffusion-3.5-large",
19
+ "Midjourney": "Jovie/Midjourney",
20
+ "FLUX.1 [dev]": "black-forest-labs/FLUX.1-dev",
21
+ "Leonardo AI": "goofyai/Leonardo_Ai_Style_Illustration",
22
  }
23
 
 
 
 
 
 
24
 
25
+ # Асинхронная функция для отправки запроса к API
26
+ async def generate_image(prompt, model_name, model_url):
27
+ async with aiohttp.ClientSession() as session:
28
+ try:
29
+ async with session.post(
30
+ f"https://api-inference.huggingface.co/models/{model_url}",
31
+ headers=HEADERS,
32
+ json={"inputs": prompt},
33
+ ) as response:
34
+ if response.status == 200:
35
+ image_data = await response.read()
36
+ return model_name, Image.open(BytesIO(image_data))
37
+ elif response.status == 503:
38
+ error_data = await response.json()
39
+ print(f"Модель {model_name} перегружена: {error_data}")
40
+ return model_name, None
41
+ else:
42
+ error_data = await response.text()
43
+ print(f"Ошибка для модели {model_name}: {error_data}")
44
+ return model_name, None
45
+ except Exception as e:
46
+ print(f"Ошибка соединения с моделью {model_name}: {e}")
47
+ return model_name, None
48
+
49
+
50
+ # Обработка запросов для всех моделей
51
+ async def handle(prompt):
52
+ tasks = [
53
+ generate_image(prompt, model_name, model_url)
54
+ for model_name, model_url in MODELS.items()
55
+ ]
56
+ results = await asyncio.gather(*tasks)
57
+ outputs = {name: img for name, img in results}
58
+ return outputs
59
 
60
+
61
+ # Интерфейс Gradio
62
  with gr.Blocks() as demo:
63
+ gr.Markdown("## Генерация изображений с помощью различных моделей нейросетей")
64
+
65
+ # Поле ввода
66
+ user_input = gr.Textbox(label="Введите описание изображения", placeholder="Например, 'Астронавт верхом на лошади'")
67
+
68
+ # Вывод изображений
69
  with gr.Row():
70
+ outputs = {name: gr.Image(label=name) for name in MODELS.keys()}
71
+
72
+ # Кнопка генерации
 
73
  generate_button = gr.Button("Сгенерировать")
74
 
75
+ # Асинхронная обработка ввода
76
+ async def on_submit(prompt):
77
+ results = await handle(prompt)
78
+ # Формируем вывод для каждой модели
79
+ return [
80
+ results.get(name, None) for name in MODELS.keys()
81
+ ]
82
+
83
  generate_button.click(
84
+ fn=on_submit,
85
  inputs=[user_input],
86
+ outputs=list(outputs.values()),
87
  )
88
+ user_input.submit(
89
+ fn=on_submit,
90
+ inputs=[user_input],
91
+ outputs=list(outputs.values()),
92
+ )
93
+
94
+ # Ссылки ��а соцсети
95
+ with gr.Row():
96
+ gr.Markdown(
97
+ """
98
+ ### Поддержка проекта
99
+ - [Telegram](https://t.me/mlphys)
100
+ - [GitHub](https://github.com/freQuensy23-coder)
101
+ """
102
+ )
103
 
104
  demo.launch()