Update controlnet_module.py
Browse files- controlnet_module.py +50 -14
controlnet_module.py
CHANGED
|
@@ -830,13 +830,23 @@ class ControlNetProcessor:
|
|
| 830 |
needs_transform_back = True
|
| 831 |
transform_offset = (crop_x1, crop_y1)
|
| 832 |
|
| 833 |
-
else: #use_crop_strategy=False (Bild <=512)
|
| 834 |
-
|
| 835 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 836 |
|
| 837 |
# ============================================================
|
| 838 |
-
# SAM-AUSFÜHRUNG
|
| 839 |
# ============================================================
|
|
|
|
| 840 |
print("-" * 60)
|
| 841 |
print(f"📦 BOUNDING BOX DETAILS FÜR SAM:")
|
| 842 |
print(f" Bild-Größe für SAM: {image.size}")
|
|
@@ -931,20 +941,36 @@ class ControlNetProcessor:
|
|
| 931 |
# ============================================================
|
| 932 |
# HEURISTIK (zur Bestimmung der besten Maske)
|
| 933 |
# ============================================================
|
| 934 |
-
print("🤔 HEURISTIK AUF
|
| 935 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 936 |
|
| 937 |
-
#
|
| 938 |
-
|
| 939 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 940 |
|
| 941 |
-
|
| 942 |
-
|
| 943 |
-
|
| 944 |
-
|
|
|
|
| 945 |
|
|
|
|
|
|
|
| 946 |
|
| 947 |
-
best_mask_idx = 0
|
| 948 |
best_score = -1
|
| 949 |
|
| 950 |
for i, mask_np in enumerate(all_masks_crop):
|
|
@@ -1023,7 +1049,13 @@ class ControlNetProcessor:
|
|
| 1023 |
# 3. BBOX-ÜBERLAPPUNG (20%)
|
| 1024 |
bbox_mask = np.zeros((image.height, image.width), dtype=np.uint8)
|
| 1025 |
|
| 1026 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1027 |
|
| 1028 |
overlap = np.sum(mask_binary & bbox_mask)
|
| 1029 |
|
|
@@ -1073,6 +1105,10 @@ class ControlNetProcessor:
|
|
| 1073 |
max_val = mask_np.max()
|
| 1074 |
print(f"🔍 Maximaler SAM-Konfidenzwert der besten Maske: {max_val:.3f}")
|
| 1075 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1076 |
# ============================================================
|
| 1077 |
# THRESHOLD-BESTIMMUNG Wahrscheinlichkeiten -> Binär (0,1)
|
| 1078 |
# ============================================================
|
|
|
|
| 830 |
needs_transform_back = True
|
| 831 |
transform_offset = (crop_x1, crop_y1)
|
| 832 |
|
| 833 |
+
else: #use_crop_strategy=False (Bild <=512)
|
| 834 |
+
print("🎯 SCHRITT 2: VERWENDE ORIGINALBILD UND ORIGINAL-BBOX FÜR SAM")
|
| 835 |
+
print(f" Originalbild-Größe: {original_image.size}")
|
| 836 |
+
print(f" Original-BBox: [{x1}, {y1}, {x2}, {y2}]")
|
| 837 |
+
|
| 838 |
+
# Keine Bildverbesserung für 512x512 - Original verwenden
|
| 839 |
+
image = original_image
|
| 840 |
+
|
| 841 |
+
# Für SAM verwenden wir die Original-BBox (keine Transformation)
|
| 842 |
+
sam_bbox = (x1, y1, x2, y2)
|
| 843 |
+
print(f" ✅ SAM verwendet Original-BBox-Koordinaten")
|
| 844 |
+
|
| 845 |
|
| 846 |
# ============================================================
|
| 847 |
+
# SAM-AUSFÜHRUNG mit relativen Koordinaten für Bild<=512 und Bild>512
|
| 848 |
# ============================================================
|
| 849 |
+
|
| 850 |
print("-" * 60)
|
| 851 |
print(f"📦 BOUNDING BOX DETAILS FÜR SAM:")
|
| 852 |
print(f" Bild-Größe für SAM: {image.size}")
|
|
|
|
| 941 |
# ============================================================
|
| 942 |
# HEURISTIK (zur Bestimmung der besten Maske)
|
| 943 |
# ============================================================
|
| 944 |
+
print("🤔 HEURISTIK AUF Original- GRÖSSE BERECHNEN")
|
| 945 |
|
| 946 |
+
if use_crop_strategy:
|
| 947 |
+
# BBox-Information für Heuristik (IN CROP-KOORDINATEN!)
|
| 948 |
+
bbox_center = ((x1 + x2) // 2, (y1 + y2) // 2)
|
| 949 |
+
bbox_area = (x2 - x1) * (y2 - y1)
|
| 950 |
+
|
| 951 |
+
print(f" CROP-BBox: [{x1}, {y1}, {x2}, {y2}]")
|
| 952 |
+
print(f" CROP-BBox-Größe: {x2-x1}×{y2-y1}px = {bbox_area:,}px²")
|
| 953 |
+
print(f" CROP-BBox-Zentrum: {bbox_center}")
|
| 954 |
+
print(f" Crop-Bildgröße: {image.width}×{image.height}")
|
| 955 |
|
| 956 |
+
else: #Heuristik für Original-Fall, Original-BBox
|
| 957 |
+
print(" ✅ Original-Fall: Heuristik mit Original-BBox")
|
| 958 |
+
|
| 959 |
+
# Original-BBox-Koordinaten verwenden (nicht transformiert)
|
| 960 |
+
bbox_center = ((original_bbox[0] + original_bbox[2]) // 2,
|
| 961 |
+
(original_bbox[1] + original_bbox[3]) // 2)
|
| 962 |
+
bbox_area = (original_bbox[2] - original_bbox[0]) * (original_bbox[3] - original_bbox[1])
|
| 963 |
|
| 964 |
+
print(f" ORIGINAL-BBox: {original_bbox}")
|
| 965 |
+
print(f" ORIGINAL-BBox-Größe: {original_bbox[2]-original_bbox[0]}×{original_bbox[3]-original_bbox[1]}px = {bbox_area:,}px²")
|
| 966 |
+
print(f" ORIGINAL-BBox-Zentrum: {bbox_center}")
|
| 967 |
+
print(f" Original-Bildgröße: {image.width}×{image.height}")
|
| 968 |
+
|
| 969 |
|
| 970 |
+
# Heuristik-BBox für alle weiteren Berechnungen verwenden
|
| 971 |
+
# (bbox_center und bbox_area sind jetzt korrekt für beide Fälle)
|
| 972 |
|
| 973 |
+
best_mask_idx = 0
|
| 974 |
best_score = -1
|
| 975 |
|
| 976 |
for i, mask_np in enumerate(all_masks_crop):
|
|
|
|
| 1049 |
# 3. BBOX-ÜBERLAPPUNG (20%)
|
| 1050 |
bbox_mask = np.zeros((image.height, image.width), dtype=np.uint8)
|
| 1051 |
|
| 1052 |
+
if use_crop_strategy:
|
| 1053 |
+
bbox_mask[y1:y2, x1:x2] = 1
|
| 1054 |
+
else:
|
| 1055 |
+
# Original-Fall: Müssen BBox auf aktuelle Bildgröße transformieren
|
| 1056 |
+
# Da Bild = Original, können wir original_bbox direkt verwenden
|
| 1057 |
+
bbox_mask[original_bbox[1]:original_bbox[3], original_bbox[0]:original_bbox[2]] = 1
|
| 1058 |
+
|
| 1059 |
|
| 1060 |
overlap = np.sum(mask_binary & bbox_mask)
|
| 1061 |
|
|
|
|
| 1105 |
max_val = mask_np.max()
|
| 1106 |
print(f"🔍 Maximaler SAM-Konfidenzwert der besten Maske: {max_val:.3f}")
|
| 1107 |
|
| 1108 |
+
|
| 1109 |
+
|
| 1110 |
+
|
| 1111 |
+
|
| 1112 |
# ============================================================
|
| 1113 |
# THRESHOLD-BESTIMMUNG Wahrscheinlichkeiten -> Binär (0,1)
|
| 1114 |
# ============================================================
|