Spaces:
Sleeping
Sleeping
Update sam_module.py
Browse files- sam_module.py +34 -15
sam_module.py
CHANGED
|
@@ -682,41 +682,60 @@ def create_sam_mask(self, image, bbox_coords, mode):
|
|
| 682 |
|
| 683 |
num_masks = outputs.pred_masks.shape[2]
|
| 684 |
print(f" SAM lieferte {num_masks} verschiedene Masken")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 685 |
|
| 686 |
# Extrahiere alle Masken
|
| 687 |
-
|
|
|
|
| 688 |
|
| 689 |
for i in range(num_masks):
|
| 690 |
single_mask = outputs.pred_masks[:, :, i, :, :]
|
| 691 |
-
|
|
|
|
| 692 |
single_mask,
|
| 693 |
-
size=(
|
| 694 |
mode='bilinear',
|
| 695 |
align_corners=False
|
| 696 |
).squeeze()
|
| 697 |
|
| 698 |
-
|
| 699 |
-
|
| 700 |
-
|
| 701 |
-
#
|
| 702 |
-
|
| 703 |
-
|
| 704 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 705 |
|
| 706 |
# ============================================================
|
| 707 |
# HEURISTIK
|
| 708 |
# ============================================================
|
| 709 |
print("🤔 SCHRITT 6: MASKENAUSWAHL MIT MODUS-SPEZIFISCHER HEURISTIK")
|
|
|
|
|
|
|
|
|
|
|
|
|
| 710 |
|
| 711 |
-
bbox_center = ((x1 + x2) // 2, (y1 + y2) // 2)
|
| 712 |
-
bbox_area = (x2 - x1) * (y2 - y1)
|
| 713 |
-
print(f" Erwartetes BBox-Zentrum: {bbox_center}")
|
| 714 |
-
print(f" Erwartete BBox-Fläche: {bbox_area:,} Pixel")
|
| 715 |
|
| 716 |
best_mask_idx = 0
|
| 717 |
best_score = -1
|
| 718 |
|
| 719 |
-
for i, mask_np in enumerate(
|
| 720 |
mask_max = mask_np.max()
|
| 721 |
|
| 722 |
# Grundlegende Filterung
|
|
|
|
| 682 |
|
| 683 |
num_masks = outputs.pred_masks.shape[2]
|
| 684 |
print(f" SAM lieferte {num_masks} verschiedene Masken")
|
| 685 |
+
|
| 686 |
+
#============
|
| 687 |
+
#Doppelte Berechnung: CROP und Original damit Heuristik
|
| 688 |
+
# auf Original berechnet werden kann und Weiterverarbeitung auf Crop
|
| 689 |
+
#==============
|
| 690 |
|
| 691 |
# Extrahiere alle Masken
|
| 692 |
+
all_masks_crop = []
|
| 693 |
+
all_masks_original = []
|
| 694 |
|
| 695 |
for i in range(num_masks):
|
| 696 |
single_mask = outputs.pred_masks[:, :, i, :, :]
|
| 697 |
+
#Für Heuristik SAM-Masken auf Original-Bildgröße
|
| 698 |
+
resized_mask_original = F.interpolate(
|
| 699 |
single_mask,
|
| 700 |
+
size=(original_image.height, original_image.width),
|
| 701 |
mode='bilinear',
|
| 702 |
align_corners=False
|
| 703 |
).squeeze()
|
| 704 |
|
| 705 |
+
mask_np_original = resized_mask_original.sigmoid().cpu().numpy()
|
| 706 |
+
all_masks_original.append(mask_np_original)
|
| 707 |
+
|
| 708 |
+
# 2. FÜR VERARBEITUNG: Auf CROP-GRÖSSE interpolieren
|
| 709 |
+
resized_mask_crop = F.interpolate(
|
| 710 |
+
single_mask,
|
| 711 |
+
size=(image.height, image.width), # CROP-Größe!
|
| 712 |
+
mode='bilinear',
|
| 713 |
+
align_corners=False
|
| 714 |
+
).squeeze()
|
| 715 |
+
mask_np_crop = resized_mask_crop.sigmoid().cpu().numpy()
|
| 716 |
+
all_masks_crop.append(mask_np_crop)
|
| 717 |
+
|
| 718 |
+
# Debug-Info
|
| 719 |
+
mask_binary_crop = (mask_np_crop > 0.5).astype(np.uint8)
|
| 720 |
+
mask_binary_original = (mask_np_original > 0.5).astype(np.uint8)
|
| 721 |
+
print(f" Maske {i+1}: Crop={np.sum(mask_binary_crop):,}px, "
|
| 722 |
+
f"Original={np.sum(mask_binary_original):,}px")
|
| 723 |
+
|
| 724 |
|
| 725 |
# ============================================================
|
| 726 |
# HEURISTIK
|
| 727 |
# ============================================================
|
| 728 |
print("🤔 SCHRITT 6: MASKENAUSWAHL MIT MODUS-SPEZIFISCHER HEURISTIK")
|
| 729 |
+
|
| 730 |
+
bbox_center = ((original_bbox[0] + original_bbox[2]) // 2,
|
| 731 |
+
(original_bbox[1] + original_bbox[3]) // 2)
|
| 732 |
+
bbox_area = (original_bbox[2] - original_bbox[0]) * (original_bbox[3] - original_bbox[1])
|
| 733 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 734 |
|
| 735 |
best_mask_idx = 0
|
| 736 |
best_score = -1
|
| 737 |
|
| 738 |
+
for i, mask_np in enumerate(all_masks_original):
|
| 739 |
mask_max = mask_np.max()
|
| 740 |
|
| 741 |
# Grundlegende Filterung
|