CodeKing555 commited on
Commit
bddee0a
·
verified ·
1 Parent(s): 4c321e9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -20
app.py CHANGED
@@ -1,13 +1,11 @@
1
  import gradio as gr
2
  import torch
3
  from diffusers import StableDiffusionInpaintPipeline
 
4
 
5
  # ------------------------------------------------------------------------------
6
  # 1) PIPELINE LADEN
7
  # ------------------------------------------------------------------------------
8
- # Modell für Inpainting: runwayml/stable-diffusion-inpainting
9
- # Läuft standardmäßig auf CPU (langsam, aber kostenlos).
10
- # Wenn eine GPU verfügbar ist, kannst du pipe.to("cuda") aktivieren.
11
  MODEL_ID = "runwayml/stable-diffusion-inpainting"
12
 
13
  print("Lade Inpainting-Pipeline... (kann einen Moment dauern)")
@@ -15,42 +13,50 @@ pipe = StableDiffusionInpaintPipeline.from_pretrained(
15
  MODEL_ID,
16
  torch_dtype=torch.float32
17
  )
18
-
19
- # CPU-Modus (Garantie für kostenlos), kann aber 30+ Sek. pro Bild dauern.
20
  pipe.to("cpu")
21
 
 
 
 
22
  # ------------------------------------------------------------------------------
23
  # 2) INPAINT-FUNKTION
24
  # ------------------------------------------------------------------------------
25
  def inpaint_room(original_image, prompt):
26
  """
27
  Führt ein Inpainting auf dem gesamten Bild durch:
28
- - 'mask_image' = original_image bedeutet, dass quasi alles überschrieben werden darf.
29
- - Für echtes Home Staging (Möbel entfernen + neue einfügen) bräuchte man eine echte Maske
30
- oder ein Segmentierungsmodell. Hier nur das Minimal-Demo.
31
  """
 
32
  if original_image is None:
33
  return None
34
 
 
 
 
 
35
  result = pipe(
36
  prompt=prompt,
37
  image=original_image,
38
- mask_image=original_image, # Ganzes Bild als "Maske"
 
 
39
  ).images[0]
40
 
41
  return result
42
 
43
-
44
  # ------------------------------------------------------------------------------
45
- # 3) GRADIO INTERFACE (Blocks Layout)
46
  # ------------------------------------------------------------------------------
47
  def build_app():
48
  with gr.Blocks() as demo:
49
- gr.Markdown("## 🏠 KI-gestütztes Virtual Home Staging (Demo)")
50
  gr.Markdown(
51
- "Lade ein Foto hoch (am besten ein leeres/unmöbliertes Zimmer) "
52
- "und gib ein Stichwort / Stil an (z.B. 'modern furniture, bright decor').\n\n"
53
- "**Achtung:** Auf CPU dauert die Generierung pro Bild ggf. über 30 Sekunden."
54
  )
55
 
56
  with gr.Row():
@@ -69,7 +75,6 @@ def build_app():
69
  with gr.Column():
70
  result_image = gr.Image(label="Ergebnis")
71
 
72
- # Button-Click -> Inpainting ausführen
73
  run_button.click(
74
  fn=inpaint_room,
75
  inputs=[input_image, prompt_text],
@@ -78,14 +83,13 @@ def build_app():
78
 
79
  gr.Markdown(
80
  "**Hinweis:**\n"
81
- "- Dies ist ein reines Demo. Ohne echte Masken, also wird das gesamte Bild neu generiert.\n"
82
- "- Für professionelles Homestaging brauchst du meist einen Segmentierungsschritt.\n"
83
- "- Free CPU kann sehr langsam sein. Wenn eine Community-GPU verfügbar ist, geht's schneller."
84
  )
85
 
86
  return demo
87
 
88
-
89
  # ------------------------------------------------------------------------------
90
  # 4) START
91
  # ------------------------------------------------------------------------------
 
1
  import gradio as gr
2
  import torch
3
  from diffusers import StableDiffusionInpaintPipeline
4
+ from PIL import Image
5
 
6
  # ------------------------------------------------------------------------------
7
  # 1) PIPELINE LADEN
8
  # ------------------------------------------------------------------------------
 
 
 
9
  MODEL_ID = "runwayml/stable-diffusion-inpainting"
10
 
11
  print("Lade Inpainting-Pipeline... (kann einen Moment dauern)")
 
13
  MODEL_ID,
14
  torch_dtype=torch.float32
15
  )
16
+ # CPU-Modus (gratis, aber langsam); wenn GPU verfügbar, kannst du pipe.to("cuda") nutzen
 
17
  pipe.to("cpu")
18
 
19
+ # Reduziere die Anzahl Inference-Schritte (Default wäre ~50)
20
+ DEFAULT_STEPS = 20
21
+
22
  # ------------------------------------------------------------------------------
23
  # 2) INPAINT-FUNKTION
24
  # ------------------------------------------------------------------------------
25
  def inpaint_room(original_image, prompt):
26
  """
27
  Führt ein Inpainting auf dem gesamten Bild durch:
28
+ - 'mask_image' = original_image => Alles darf überschrieben werden.
29
+ - Wir verkleinern das Bild auf 512x512 und reduzieren num_inference_steps,
30
+ um Zeit zu sparen.
31
  """
32
+
33
  if original_image is None:
34
  return None
35
 
36
+ # 1) Bild auf 512x512 verkleinern
37
+ original_image = original_image.resize((512, 512), resample=Image.LANCZOS)
38
+
39
+ # 2) Inference-Aufruf mit weniger Schritten
40
  result = pipe(
41
  prompt=prompt,
42
  image=original_image,
43
+ mask_image=original_image,
44
+ num_inference_steps=DEFAULT_STEPS,
45
+ guidance_scale=7.5 # optionaler Wert, typisch ~7.5
46
  ).images[0]
47
 
48
  return result
49
 
 
50
  # ------------------------------------------------------------------------------
51
+ # 3) GRADIO INTERFACE
52
  # ------------------------------------------------------------------------------
53
  def build_app():
54
  with gr.Blocks() as demo:
55
+ gr.Markdown("## 🏠 KI-basiertes Virtual Home Staging (Demo, schnellere Variante)")
56
  gr.Markdown(
57
+ "Lade ein Foto hoch (leer oder wenige Möbel) "
58
+ "und gib einen Stil an (z.B. 'modern furniture, bright lighting').<br>"
59
+ "**Achtung:** Auf CPU dauert es evtl. immer noch einige Sekunden."
60
  )
61
 
62
  with gr.Row():
 
75
  with gr.Column():
76
  result_image = gr.Image(label="Ergebnis")
77
 
 
78
  run_button.click(
79
  fn=inpaint_room,
80
  inputs=[input_image, prompt_text],
 
83
 
84
  gr.Markdown(
85
  "**Hinweis:**\n"
86
+ "- Dies ist eine schnelle Demo: Das Bild wird verkleinert (512×512) und nur 20 Schritte berechnet.\n"
87
+ "- Für bessere Qualität ggf. mehr Inference-Steps und höhere Auflösungen, dann dauert es länger.\n"
88
+ "- Wenn eine Community-GPU verfügbar ist, geht es wesentlich schneller."
89
  )
90
 
91
  return demo
92
 
 
93
  # ------------------------------------------------------------------------------
94
  # 4) START
95
  # ------------------------------------------------------------------------------