Update controlnet_module.py
Browse files- controlnet_module.py +20 -1
controlnet_module.py
CHANGED
|
@@ -998,8 +998,26 @@ class ControlNetProcessor:
|
|
| 998 |
print(f" 🔍 Analysiere Maske {i+1} auf Crop-Größe")
|
| 999 |
|
| 1000 |
# 1. FLÄCHENBASIERTE BEWERTUNG (40%)
|
| 1001 |
-
area_ratio = mask_area_pixels / bbox_area
|
| 1002 |
print(f" 📐 Flächen-Ratio: {area_ratio:.3f} ({mask_area_pixels:,} / {bbox_area:,} Pixel)")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1003 |
|
| 1004 |
# Optimale Kopfgröße: 80-120% der BBox
|
| 1005 |
if area_ratio < 0.6:
|
|
@@ -1014,6 +1032,7 @@ class ControlNetProcessor:
|
|
| 1014 |
else:
|
| 1015 |
# Sanfte Abweichung
|
| 1016 |
area_score = 1.0 - abs(area_ratio - 1.0) * 0.5
|
|
|
|
| 1017 |
|
| 1018 |
# 2. KOMPAKTHEIT/SOLIDITÄT (30%)
|
| 1019 |
labeled_mask = measure.label(mask_binary)
|
|
|
|
| 998 |
print(f" 🔍 Analysiere Maske {i+1} auf Crop-Größe")
|
| 999 |
|
| 1000 |
# 1. FLÄCHENBASIERTE BEWERTUNG (40%)
|
| 1001 |
+
area_ratio = mask_area_pixels / bbox_area if bbox_area > 0 else 0
|
| 1002 |
print(f" 📐 Flächen-Ratio: {area_ratio:.3f} ({mask_area_pixels:,} / {bbox_area:,} Pixel)")
|
| 1003 |
+
|
| 1004 |
+
|
| 1005 |
+
optimal_min, optimal_max = 0.8, 1.2
|
| 1006 |
+
if optimal_min <= area_ratio <= optimal_max:
|
| 1007 |
+
area_score = 1.0
|
| 1008 |
+
elif area_ratio < optimal_min:
|
| 1009 |
+
area_score = area_ratio / optimal_min
|
| 1010 |
+
else:
|
| 1011 |
+
area_score = optimal_max / area_ratio # Starke Bestrafung für zu groß
|
| 1012 |
+
|
| 1013 |
+
|
| 1014 |
+
# 2. BBOX-ÜBERLAPPUNG (KORRIGIERT!)
|
| 1015 |
+
bbox_mask = np.zeros((image.height, image.width), dtype=np.uint8)
|
| 1016 |
+
bbox_mask[bbox_y1:bbox_y2, bbox_x1:bbox_x2] = 1
|
| 1017 |
+
overlap = np.sum(mask_binary & bbox_mask)
|
| 1018 |
+
bbox_overlap_ratio = overlap / bbox_area if bbox_area > 0 else 0 # WICHTIG: durch bbox_area!
|
| 1019 |
+
|
| 1020 |
+
|
| 1021 |
|
| 1022 |
# Optimale Kopfgröße: 80-120% der BBox
|
| 1023 |
if area_ratio < 0.6:
|
|
|
|
| 1032 |
else:
|
| 1033 |
# Sanfte Abweichung
|
| 1034 |
area_score = 1.0 - abs(area_ratio - 1.0) * 0.5
|
| 1035 |
+
|
| 1036 |
|
| 1037 |
# 2. KOMPAKTHEIT/SOLIDITÄT (30%)
|
| 1038 |
labeled_mask = measure.label(mask_binary)
|