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

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +95 -0
app.py ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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)")
14
+ 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():
57
+ with gr.Column():
58
+ input_image = gr.Image(
59
+ label="Schritt 1: Dein Zimmerfoto",
60
+ type="pil"
61
+ )
62
+ prompt_text = gr.Textbox(
63
+ label="Schritt 2: Was soll eingefügt werden?",
64
+ value="modern furniture, bright lighting, minimal decor",
65
+ lines=2
66
+ )
67
+ run_button = gr.Button("Starte Staging")
68
+
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],
76
+ outputs=[result_image]
77
+ )
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
+ # ------------------------------------------------------------------------------
92
+ demo = build_app()
93
+
94
+ if __name__ == "__main__":
95
+ demo.launch()