Update app.py
Browse files
app.py
CHANGED
|
@@ -197,6 +197,7 @@ def text_to_image(prompt, steps, guidance_scale, progress=gr.Progress()):
|
|
| 197 |
traceback.print_exc()
|
| 198 |
return None
|
| 199 |
|
|
|
|
| 200 |
def img_to_image(image, prompt, neg_prompt, strength, steps, guidance_scale, face_preserve, bbox_x1, bbox_y1, bbox_x2, bbox_y2, progress=gr.Progress()):
|
| 201 |
try:
|
| 202 |
if image is None:
|
|
@@ -208,15 +209,14 @@ def img_to_image(image, prompt, neg_prompt, strength, steps, guidance_scale, fac
|
|
| 208 |
print(f"Gesicht beibehalten: {face_preserve}")
|
| 209 |
start_time = time.time()
|
| 210 |
|
| 211 |
-
# Statusmeldung anzeigen zur Zeitüberbrückung
|
| 212 |
progress(0, desc="Generierung läuft - CPU benötigt bis zu 20 Minuten!")
|
| 213 |
|
| 214 |
# --- Progress-Balken zur Überbrückung für 0te Step von CONTROLNET---
|
| 215 |
progress(0.05, desc="ControlNet: Pose-Erkennung...")
|
| 216 |
|
| 217 |
-
# Parameter-Tuning für ControlNet
|
| 218 |
adj_strength = min(0.85, strength * 1.3)
|
| 219 |
-
#adj_strength = min(0.85, strength)
|
| 220 |
actual_steps_from_strength = int(steps * adj_strength)
|
| 221 |
controlnet_steps = min(25, actual_steps_from_strength)
|
| 222 |
|
|
@@ -224,12 +224,10 @@ def img_to_image(image, prompt, neg_prompt, strength, steps, guidance_scale, fac
|
|
| 224 |
|
| 225 |
# CONTROLNET-STRENGTH BERECHNEN: 50% der Inpaint-Strength
|
| 226 |
controlnet_strength = adj_strength * 0.5
|
| 227 |
-
print(f"🎯 ControlNet Step-Kalkulation: UI={steps}, Adj-Strength={adj_strength:.3f}, Echte Steps={actual_steps_from_strength}, ControlNet-Steps={controlnet_steps}")
|
| 228 |
print(f"🎯 ControlNet Strength: {controlnet_strength:.3f} (50% von Inpaint-Strength {adj_strength:.3f})")
|
| 229 |
|
| 230 |
-
|
| 231 |
-
|
| 232 |
-
controlnet_image = controlnet_processor.generate_with_controlnet(
|
| 233 |
image=image,
|
| 234 |
prompt=prompt,
|
| 235 |
negative_prompt=neg_prompt,
|
|
@@ -237,16 +235,20 @@ def img_to_image(image, prompt, neg_prompt, strength, steps, guidance_scale, fac
|
|
| 237 |
guidance_scale=guidance_scale,
|
| 238 |
controlnet_strength=controlnet_strength,
|
| 239 |
progress=progress,
|
| 240 |
-
keep_environment=face_preserve
|
| 241 |
)
|
| 242 |
|
|
|
|
|
|
|
|
|
|
| 243 |
#Progress-Balken zur Überbrückung für 0ten Step von Inpaint
|
| 244 |
progress(0.3, desc="ControlNet fertig, starte Inpaint...")
|
| 245 |
|
| 246 |
-
# ---
|
| 247 |
pipe = load_img2img()
|
| 248 |
-
|
| 249 |
-
|
|
|
|
| 250 |
|
| 251 |
# --- PARAMETER-TUNING ---
|
| 252 |
adj_guidance = min(guidance_scale, 12.0)
|
|
@@ -279,8 +281,6 @@ def img_to_image(image, prompt, neg_prompt, strength, steps, guidance_scale, fac
|
|
| 279 |
if bbox_coords:
|
| 280 |
mask = create_face_mask(img_resized, bbox_coords, face_preserve)
|
| 281 |
if mask:
|
| 282 |
-
#mask.show() # Zeigt die Maske zum Überprüfen
|
| 283 |
-
#print(f"Maske Größe: {mask.size}, Bereich: {bbox_coords}")
|
| 284 |
print("Maske erfolgreich erstellt")
|
| 285 |
else:
|
| 286 |
print("Keine gültigen Koordinaten - keine Maske angewendet")
|
|
@@ -297,11 +297,11 @@ def img_to_image(image, prompt, neg_prompt, strength, steps, guidance_scale, fac
|
|
| 297 |
# NEUE Callback-Implementierung
|
| 298 |
callback = ImageToImageProgressCallback(progress, int(steps), adj_strength)
|
| 299 |
|
| 300 |
-
# --- PIPELINE-AUFRUF MIT
|
| 301 |
result = pipe(
|
| 302 |
prompt=prompt,
|
| 303 |
negative_prompt=neg_prompt,
|
| 304 |
-
image=img_resized, #
|
| 305 |
mask_image=mask,
|
| 306 |
strength=adj_strength,
|
| 307 |
num_inference_steps=int(steps),
|
|
@@ -338,6 +338,7 @@ def img_to_image(image, prompt, neg_prompt, strength, steps, guidance_scale, fac
|
|
| 338 |
return None
|
| 339 |
|
| 340 |
|
|
|
|
| 341 |
def update_bbox_from_image(image):
|
| 342 |
"""Aktualisiert die Bounding-Box-Koordinaten wenn ein Bild hochgeladen wird"""
|
| 343 |
if image is None:
|
|
|
|
| 197 |
traceback.print_exc()
|
| 198 |
return None
|
| 199 |
|
| 200 |
+
|
| 201 |
def img_to_image(image, prompt, neg_prompt, strength, steps, guidance_scale, face_preserve, bbox_x1, bbox_y1, bbox_x2, bbox_y2, progress=gr.Progress()):
|
| 202 |
try:
|
| 203 |
if image is None:
|
|
|
|
| 209 |
print(f"Gesicht beibehalten: {face_preserve}")
|
| 210 |
start_time = time.time()
|
| 211 |
|
| 212 |
+
# Statusmeldung anzeigen zur Zeitüberbrückung
|
| 213 |
progress(0, desc="Generierung läuft - CPU benötigt bis zu 20 Minuten!")
|
| 214 |
|
| 215 |
# --- Progress-Balken zur Überbrückung für 0te Step von CONTROLNET---
|
| 216 |
progress(0.05, desc="ControlNet: Pose-Erkennung...")
|
| 217 |
|
| 218 |
+
# Parameter-Tuning für ControlNet
|
| 219 |
adj_strength = min(0.85, strength * 1.3)
|
|
|
|
| 220 |
actual_steps_from_strength = int(steps * adj_strength)
|
| 221 |
controlnet_steps = min(25, actual_steps_from_strength)
|
| 222 |
|
|
|
|
| 224 |
|
| 225 |
# CONTROLNET-STRENGTH BERECHNEN: 50% der Inpaint-Strength
|
| 226 |
controlnet_strength = adj_strength * 0.5
|
|
|
|
| 227 |
print(f"🎯 ControlNet Strength: {controlnet_strength:.3f} (50% von Inpaint-Strength {adj_strength:.3f})")
|
| 228 |
|
| 229 |
+
# ControlNet Modul aufrufen - MIT ZWEI RÜCKGABEWERTEN
|
| 230 |
+
controlnet_output, inpaint_input = controlnet_processor.generate_with_controlnet(
|
|
|
|
| 231 |
image=image,
|
| 232 |
prompt=prompt,
|
| 233 |
negative_prompt=neg_prompt,
|
|
|
|
| 235 |
guidance_scale=guidance_scale,
|
| 236 |
controlnet_strength=controlnet_strength,
|
| 237 |
progress=progress,
|
| 238 |
+
keep_environment=face_preserve
|
| 239 |
)
|
| 240 |
|
| 241 |
+
print(f"✅ ControlNet Output erhalten: {type(controlnet_output)}")
|
| 242 |
+
print(f"✅ Inpaint Input erhalten: {type(inpaint_input)}")
|
| 243 |
+
|
| 244 |
#Progress-Balken zur Überbrückung für 0ten Step von Inpaint
|
| 245 |
progress(0.3, desc="ControlNet fertig, starte Inpaint...")
|
| 246 |
|
| 247 |
+
# --- INPAINT PIPELINE ---
|
| 248 |
pipe = load_img2img()
|
| 249 |
+
|
| 250 |
+
# JETZT: inpaint_input verwenden (Conditioning Image für Inpaint)
|
| 251 |
+
img_resized = inpaint_input.convert("RGB").resize((IMG_SIZE, IMG_SIZE))
|
| 252 |
|
| 253 |
# --- PARAMETER-TUNING ---
|
| 254 |
adj_guidance = min(guidance_scale, 12.0)
|
|
|
|
| 281 |
if bbox_coords:
|
| 282 |
mask = create_face_mask(img_resized, bbox_coords, face_preserve)
|
| 283 |
if mask:
|
|
|
|
|
|
|
| 284 |
print("Maske erfolgreich erstellt")
|
| 285 |
else:
|
| 286 |
print("Keine gültigen Koordinaten - keine Maske angewendet")
|
|
|
|
| 297 |
# NEUE Callback-Implementierung
|
| 298 |
callback = ImageToImageProgressCallback(progress, int(steps), adj_strength)
|
| 299 |
|
| 300 |
+
# --- PIPELINE-AUFRUF MIT KORREKTEM INPUT ---
|
| 301 |
result = pipe(
|
| 302 |
prompt=prompt,
|
| 303 |
negative_prompt=neg_prompt,
|
| 304 |
+
image=img_resized, # JETZT: inpaint_input (Conditioning Image)
|
| 305 |
mask_image=mask,
|
| 306 |
strength=adj_strength,
|
| 307 |
num_inference_steps=int(steps),
|
|
|
|
| 338 |
return None
|
| 339 |
|
| 340 |
|
| 341 |
+
|
| 342 |
def update_bbox_from_image(image):
|
| 343 |
"""Aktualisiert die Bounding-Box-Koordinaten wenn ein Bild hochgeladen wird"""
|
| 344 |
if image is None:
|