Update controlnet_module.py
Browse files- controlnet_module.py +42 -26
controlnet_module.py
CHANGED
|
@@ -1315,53 +1315,69 @@ class ControlNetProcessor:
|
|
| 1315 |
# ============================================================
|
| 1316 |
# ABSCHLIESSENDE STATISTIK
|
| 1317 |
# ============================================================
|
| 1318 |
-
print("📊 FINALE MASKEN-STATISTIK")
|
| 1319 |
|
| 1320 |
-
#
|
| 1321 |
-
#expanded_pixels = np.sum(mask_array > 128) - current_white
|
| 1322 |
-
#print(f" 📈 Maske um {expanded_pixels:,} Pixel erweitert")
|
| 1323 |
-
#print(f" 📏 Neue Kanten: ~{25//2}px von Original-Maske entfernt")
|
| 1324 |
-
|
| 1325 |
-
# Weiße Pixel zählen
|
| 1326 |
final_white = np.sum(mask_array > 128)
|
| 1327 |
-
final_coverage = final_white / bbox_area if bbox_area > 0 else 0
|
| 1328 |
-
final_array = np.array(mask_original)
|
| 1329 |
white_pixels = np.sum(final_array > 0)
|
| 1330 |
total_pixels = final_array.size
|
| 1331 |
-
white_ratio = white_pixels / total_pixels * 100 if total_pixels >0 else 0
|
| 1332 |
|
| 1333 |
-
# Original-BBox Fläche (vor Crop)
|
| 1334 |
original_bbox_width = original_bbox[2] - original_bbox[0]
|
| 1335 |
original_bbox_height = original_bbox[3] - original_bbox[1]
|
| 1336 |
original_face_area = original_bbox_width * original_bbox_height
|
| 1337 |
coverage_ratio = white_pixels / original_face_area if original_face_area > 0 else 0
|
| 1338 |
-
|
| 1339 |
-
|
| 1340 |
-
|
| 1341 |
-
|
| 1342 |
-
|
| 1343 |
-
|
| 1344 |
-
|
| 1345 |
-
print(f"
|
| 1346 |
-
|
| 1347 |
-
|
| 1348 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1349 |
if coverage_ratio < 0.7:
|
| 1350 |
print(f" ⚠️ WARNUNG: Geringe Gesichtsabdeckung ({coverage_ratio:.1%})")
|
| 1351 |
elif coverage_ratio > 1.3:
|
| 1352 |
print(f" ⚠️ WARNUNG: Sehr hohe Gesichtsabdeckung ({coverage_ratio:.1%})")
|
| 1353 |
elif 0.8 <= coverage_ratio <= 1.2:
|
| 1354 |
print(f" ✅ OPTIMALE Gesichtsabdeckung ({coverage_ratio:.1%})")
|
| 1355 |
-
|
| 1356 |
print("#" * 80)
|
| 1357 |
print(f"✅ SAM 2 SEGMENTIERUNG ABGESCHLOSSEN")
|
| 1358 |
print(f"📐 Finale Maskengröße: {mask_original.size}")
|
| 1359 |
print(f"🎛️ Verwendeter Modus: {mode}")
|
| 1360 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1361 |
print(f"👤 Kopfabdeckung: {coverage_ratio:.1%} der BBox")
|
| 1362 |
print("#" * 80)
|
| 1363 |
-
|
| 1364 |
-
|
| 1365 |
return mask_original, raw_mask_original, inpaint_binary_original
|
| 1366 |
|
| 1367 |
#Maske, Raw_mask und Binärmaske in Originalgröße zurück!
|
|
|
|
| 1315 |
# ============================================================
|
| 1316 |
# ABSCHLIESSENDE STATISTIK
|
| 1317 |
# ============================================================
|
| 1318 |
+
print("📊 FINALE MASKEN-STATISTIK FÜR FEHLERANALYSE")
|
| 1319 |
|
| 1320 |
+
# Berechnungen (bleiben gleich)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1321 |
final_white = np.sum(mask_array > 128)
|
| 1322 |
+
final_coverage = final_white / bbox_area if bbox_area > 0 else 0
|
| 1323 |
+
final_array = np.array(mask_original)
|
| 1324 |
white_pixels = np.sum(final_array > 0)
|
| 1325 |
total_pixels = final_array.size
|
| 1326 |
+
white_ratio = white_pixels / total_pixels * 100 if total_pixels > 0 else 0
|
| 1327 |
|
|
|
|
| 1328 |
original_bbox_width = original_bbox[2] - original_bbox[0]
|
| 1329 |
original_bbox_height = original_bbox[3] - original_bbox[1]
|
| 1330 |
original_face_area = original_bbox_width * original_bbox_height
|
| 1331 |
coverage_ratio = white_pixels / original_face_area if original_face_area > 0 else 0
|
| 1332 |
+
|
| 1333 |
+
# Fehlende Variablen für den else-Fall definieren
|
| 1334 |
+
if not use_crop_strategy:
|
| 1335 |
+
crop_size = "N/A"
|
| 1336 |
+
crop_x1 = crop_y1 = crop_x2 = crop_y2 = "N/A"
|
| 1337 |
+
|
| 1338 |
+
# Strukturierte Ausgabe
|
| 1339 |
+
print(f" 🖼️ Bildgröße: {original_image.size[0]}×{original_image.size[1]} | "
|
| 1340 |
+
f"Crop-Strategie: {'JA' if use_crop_strategy else 'NEIN'}")
|
| 1341 |
+
print(f" 📦 Original-BBox: {original_bbox} | "
|
| 1342 |
+
f"Fläche: {original_face_area:,} px² ({original_bbox_width}×{original_bbox_height})")
|
| 1343 |
+
print(f" 🎯 SAM-Ergebnis: Beste Maske #{best_mask_idx+1} | Score: {best_score:.3f} | "
|
| 1344 |
+
f"Konfidenz: {max_val:.3f} | Verfügbare Masken: {num_masks}")
|
| 1345 |
+
print(f" 👤 Gesichtsabdeckung: {coverage_ratio:.1%} der BBox "
|
| 1346 |
+
f"({'OPTIMAL' if 0.8 <= coverage_ratio <= 1.2 else 'UNTER' if coverage_ratio < 0.7 else 'ÜBER'})")
|
| 1347 |
+
print(f" 📐 Maskenpixel: {white_pixels:,} weiß ({white_ratio:.1f}%) | "
|
| 1348 |
+
f"{total_pixels-white_pixels:,} schwarz ({100-white_ratio:.1f}%)")
|
| 1349 |
+
print(f" ⚙️ Postprocessing: {num_features} Komponenten → 1 behalten | "
|
| 1350 |
+
f"Operationen: MORPH_CLOSE, MORPH_OPEN, DILATE, GAUSSIAN_BLUR, GAMMA")
|
| 1351 |
+
if use_crop_strategy:
|
| 1352 |
+
print(f" 🔄 Crop-Größe: {crop_size}×{crop_size}px | "
|
| 1353 |
+
f"Position: [{crop_x1},{crop_y1},{crop_x2},{crop_y2}]")
|
| 1354 |
+
print(f" 📏 Crop-interne Abdeckung: {final_coverage:.1%} (technisch)")
|
| 1355 |
+
else:
|
| 1356 |
+
print(f" 🔄 Direktverarbeitung auf Originalgröße")
|
| 1357 |
+
print(f" 🎛️ Modus: {mode} | Threshold: {dynamic_threshold:.3f}")
|
| 1358 |
+
|
| 1359 |
+
# Warnungen
|
| 1360 |
if coverage_ratio < 0.7:
|
| 1361 |
print(f" ⚠️ WARNUNG: Geringe Gesichtsabdeckung ({coverage_ratio:.1%})")
|
| 1362 |
elif coverage_ratio > 1.3:
|
| 1363 |
print(f" ⚠️ WARNUNG: Sehr hohe Gesichtsabdeckung ({coverage_ratio:.1%})")
|
| 1364 |
elif 0.8 <= coverage_ratio <= 1.2:
|
| 1365 |
print(f" ✅ OPTIMALE Gesichtsabdeckung ({coverage_ratio:.1%})")
|
| 1366 |
+
|
| 1367 |
print("#" * 80)
|
| 1368 |
print(f"✅ SAM 2 SEGMENTIERUNG ABGESCHLOSSEN")
|
| 1369 |
print(f"📐 Finale Maskengröße: {mask_original.size}")
|
| 1370 |
print(f"🎛️ Verwendeter Modus: {mode}")
|
| 1371 |
+
|
| 1372 |
+
if use_crop_strategy:
|
| 1373 |
+
print(f"👤 Crop={crop_size}×{crop_size}px, Heuristik-Score={best_score:.3f}")
|
| 1374 |
+
else:
|
| 1375 |
+
print(f"👤 Direktverarbeitung, Heuristik-Score={best_score:.3f}")
|
| 1376 |
+
|
| 1377 |
print(f"👤 Kopfabdeckung: {coverage_ratio:.1%} der BBox")
|
| 1378 |
print("#" * 80)
|
| 1379 |
+
|
| 1380 |
+
|
| 1381 |
return mask_original, raw_mask_original, inpaint_binary_original
|
| 1382 |
|
| 1383 |
#Maske, Raw_mask und Binärmaske in Originalgröße zurück!
|