Astridkraft commited on
Commit
15b22c9
·
verified ·
1 Parent(s): 9640862

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +12 -23
app.py CHANGED
@@ -414,39 +414,27 @@ def enhanced_composite_with_sam(original_image, inpaint_result, original_mask,
414
  # Original BBox-Bereich ausgeschnitten werden und
415
  mask_cropped = original_mask.crop(bbox_coords)
416
  print(f"🔍 [MASK] Mask-Crop Size: {mask_cropped.size}")
417
-
418
- # der Randbereich des BBox-Ausschnittes muß für Übergänge weich gezeichnet werden
 
 
419
  soft_mask = mask_cropped.filter(ImageFilter.GaussianBlur(3))
420
 
421
- # DEBUG: Prüfe welche Werte die Maske hat
422
- # DEBUG: Prüfe soft_mask
423
  print(f"🔍 Soft-Mask unique values PRE: {np.unique(np.array(soft_mask))[:20]}")
424
  print(f"🔍 Soft-Mask Min/Max: {np.array(soft_mask).min()}, {np.array(soft_mask).max()}")
425
-
426
-
427
-
428
- # Binarisieren für klare Alpha-Werte (nur 0 oder 255)
429
- #threshold = 0
430
- #alpha_mask = soft_mask.point(lambda x: 255 if x > threshold else 0)
431
- #print(f"🔍 Alpha-Mask unique values: {np.unique(np.array(alpha_mask))}")
432
-
433
-
434
-
435
- # Alpha-Compositing mit präziser SAM-Maske
436
- # damit wird auf den neu generirten BBox-Bereich in Originalgröße eine Folie gezogen
437
- #edited_rgba = edited_region_fullsize.convert("RGBA")
438
- # Dadurch werden in die Folie der weichen SAM-Maske wieder an den Stellen schwarze/transparente Löcher
439
- # gerissen wo der Hintergrund innerhalb der BBox bleiben muß! In den Löchern bleibt das Originalbild!
440
- #mask_inverted = Image.eval(soft_mask, lambda x: 255 - x) #invertieren
441
 
442
  alpha_mask = soft_mask
443
 
444
- #mask_alpha = mask_inverted.convert("L")
445
-
446
  rgb_only = edited_region_fullsize.convert("RGB")
 
 
 
447
  edited_rgba = rgb_only.convert("RGBA")
448
 
449
- # Jetzt Alpha setzen
 
 
450
  edited_rgba.putalpha(alpha_mask)
451
 
452
  # DEBUG: Prüfe wirklich was drin ist
@@ -489,6 +477,7 @@ def enhanced_composite_with_sam(original_image, inpaint_result, original_mask,
489
  return final_image.convert("RGB")
490
 
491
 
 
492
  def auto_detect_face_area(image):
493
  """Optimierten Vorschlag für Gesichtsbereich ohne externe Bibliotheken"""
494
  width, height = image.size
 
414
  # Original BBox-Bereich ausgeschnitten werden und
415
  mask_cropped = original_mask.crop(bbox_coords)
416
  print(f"🔍 [MASK] Mask-Crop Size: {mask_cropped.size}")
417
+
418
+ # Die gesamte Maske wird weichgezeichnet für natürliche Alpha-Übergänge
419
+ # GaussianBlur erzeugt Graustufenwerte (0-255) statt binärer Maske (0 oder 255)
420
+ #soft_mask ist eine Maske mit Zahlen. 255-weiß, 0-schwarz
421
  soft_mask = mask_cropped.filter(ImageFilter.GaussianBlur(3))
422
 
 
 
423
  print(f"🔍 Soft-Mask unique values PRE: {np.unique(np.array(soft_mask))[:20]}")
424
  print(f"🔍 Soft-Mask Min/Max: {np.array(soft_mask).min()}, {np.array(soft_mask).max()}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
425
 
426
  alpha_mask = soft_mask
427
 
428
+ # rgb_only ist das von Inpaint generierte reine Farbbild in Original-BBox-Größe
 
429
  rgb_only = edited_region_fullsize.convert("RGB")
430
+
431
+ # Mit dieser Konvertierung bekommt jeder Pixel die Möglichkeit transparent zu werden! Vorher gab es nur 3 Werte zu einem Pixel (RGB) jetzt 4 -der A-Wert
432
+ # Der 4te Wert ist standardmäßig =255 deckend im Alpha-Kanal, im RGB-Bild ist es weiß
433
  edited_rgba = rgb_only.convert("RGBA")
434
 
435
+ # Jetzt Alpha setzen. D.h. der 4te Wert jedes Pixels wird mit den Werten aus der SAM-Maske überschrieben. A=255 da wo segmentiert
436
+ # und A=0 (transparent) da wo nicht segmentiert! Da wo transparent sieht man natürlich das Original!
437
+ # putalpha macht das Inpaint-bild an den Stellen transparent an denen die SAM-Maske schwarz ist!
438
  edited_rgba.putalpha(alpha_mask)
439
 
440
  # DEBUG: Prüfe wirklich was drin ist
 
477
  return final_image.convert("RGB")
478
 
479
 
480
+
481
  def auto_detect_face_area(image):
482
  """Optimierten Vorschlag für Gesichtsbereich ohne externe Bibliotheken"""
483
  width, height = image.size