Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -2,35 +2,23 @@
|
|
| 2 |
import gradio as gr
|
| 3 |
from huggingface_hub import InferenceClient
|
| 4 |
import os
|
| 5 |
-
from PIL import Image, ImageDraw
|
| 6 |
|
| 7 |
HF_TOKEN = os.environ["HF_TOKEN"]
|
| 8 |
client = InferenceClient(token=HF_TOKEN)
|
| 9 |
|
| 10 |
-
def
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
# Пример: маска 60% ширины и 80% высоты по центру
|
| 14 |
-
left = int(w * 0.2)
|
| 15 |
-
top = int(h * 0.1)
|
| 16 |
-
right = int(w * 0.8)
|
| 17 |
-
bottom = int(h * 0.9)
|
| 18 |
-
mask = Image.new("L", (w, h), 0)
|
| 19 |
-
draw = ImageDraw.Draw(mask)
|
| 20 |
-
draw.rectangle([left, top, right, bottom], fill=255)
|
| 21 |
-
return mask
|
| 22 |
-
|
| 23 |
-
def add_curtains(image, style="classic", color="beige"):
|
| 24 |
-
if image is None:
|
| 25 |
-
return "❌ Загрузите фото окна"
|
| 26 |
|
| 27 |
-
|
| 28 |
-
#
|
| 29 |
-
mask = create_center_mask(image)
|
| 30 |
|
| 31 |
-
|
|
|
|
| 32 |
|
| 33 |
-
|
|
|
|
|
|
|
| 34 |
result = client.inpainting(
|
| 35 |
image=image,
|
| 36 |
mask_image=mask,
|
|
@@ -44,14 +32,16 @@ def add_curtains(image, style="classic", color="beige"):
|
|
| 44 |
demo = gr.Interface(
|
| 45 |
fn=add_curtains,
|
| 46 |
inputs=[
|
| 47 |
-
gr.
|
|
|
|
|
|
|
|
|
|
| 48 |
gr.Radio(["classic", "modern", "roman"], value="classic", label="Стиль штор"),
|
| 49 |
gr.Textbox(value="beige", label="Цвет (например: white, navy blue)")
|
| 50 |
],
|
| 51 |
outputs=gr.Image(label="Результат со шторами"),
|
| 52 |
title="🪟 Виртуальная примерка штор",
|
| 53 |
-
description="
|
| 54 |
)
|
| 55 |
|
| 56 |
-
|
| 57 |
-
demo.launch()
|
|
|
|
| 2 |
import gradio as gr
|
| 3 |
from huggingface_hub import InferenceClient
|
| 4 |
import os
|
|
|
|
| 5 |
|
| 6 |
HF_TOKEN = os.environ["HF_TOKEN"]
|
| 7 |
client = InferenceClient(token=HF_TOKEN)
|
| 8 |
|
| 9 |
+
def add_curtains(editor_data, style="classic", color="beige"):
|
| 10 |
+
if editor_data is None:
|
| 11 |
+
return "❌ Пожалуйста, загрузите фото и нарисуйте область окна."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
|
| 13 |
+
image = editor_data["image"] # PIL.Image
|
| 14 |
+
mask = editor_data["mask"] # PIL.Image (чёрно-белая маска)
|
|
|
|
| 15 |
|
| 16 |
+
if image is None or mask is None:
|
| 17 |
+
return "❌ Нарисуйте маску на окне."
|
| 18 |
|
| 19 |
+
prompt = f"{style} {color} curtains on the window, photorealistic, natural lighting"
|
| 20 |
+
|
| 21 |
+
try:
|
| 22 |
result = client.inpainting(
|
| 23 |
image=image,
|
| 24 |
mask_image=mask,
|
|
|
|
| 32 |
demo = gr.Interface(
|
| 33 |
fn=add_curtains,
|
| 34 |
inputs=[
|
| 35 |
+
gr.ImageEditor(
|
| 36 |
+
label="1. Загрузите фото окна\n2. Нажмите 'Edit' → выберите кисть → закрасьте область окна белым",
|
| 37 |
+
type="pil"
|
| 38 |
+
),
|
| 39 |
gr.Radio(["classic", "modern", "roman"], value="classic", label="Стиль штор"),
|
| 40 |
gr.Textbox(value="beige", label="Цвет (например: white, navy blue)")
|
| 41 |
],
|
| 42 |
outputs=gr.Image(label="Результат со шторами"),
|
| 43 |
title="🪟 Виртуальная примерка штор",
|
| 44 |
+
description="Нарисуйте маску на окне — ИИ добавит туда шторы!"
|
| 45 |
)
|
| 46 |
|
| 47 |
+
demo.launch()
|
|
|