|
|
| import sys
|
| import os
|
| sys.path.append(os.path.join(os.getcwd(), 'src'))
|
| from inference import predict, draw_rectangles_on_mask, DEVICE
|
| from model import ResNetSegmentation
|
| from PIL import Image
|
| import torch
|
| import numpy as np
|
| import cv2
|
|
|
|
|
| TEST_IMAGE = "data/cracks.v1-cracks-f.coco/test/2056_jpg.rf.c2c86bb2aa54ac0df349c42cbdfc1315.jpg"
|
| MODEL_PATH = "best_model.pth"
|
| PROMPT = "segment crack"
|
|
|
| def test_visualization():
|
| print(f"Testing visualization on {TEST_IMAGE}...")
|
|
|
|
|
|
|
| try:
|
| image, mask = predict(TEST_IMAGE, PROMPT, MODEL_PATH)
|
| print("Inference successful.")
|
| except Exception as e:
|
| print(f"Inference failed: {e}")
|
| return
|
|
|
|
|
| print(f"Mask shape: {mask.shape}")
|
| print(f"Mask unique values: {np.unique(mask)}")
|
| print(f"Mask sum: {mask.sum()}")
|
|
|
|
|
|
|
| model = ResNetSegmentation().to(DEVICE)
|
| model.load_state_dict(torch.load(MODEL_PATH, map_location=DEVICE))
|
| model.eval()
|
|
|
| from torchvision import transforms
|
| transform = transforms.Compose([
|
| transforms.Resize((256, 256)),
|
| transforms.ToTensor(),
|
| transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
|
| ])
|
|
|
| img_pil = Image.open(TEST_IMAGE).convert("RGB")
|
| img_tensor = transform(img_pil).unsqueeze(0).to(DEVICE)
|
|
|
| with torch.no_grad():
|
| logits = model(img_tensor)
|
| probs = torch.sigmoid(logits)
|
|
|
| pred_np = probs[0, 0].cpu().numpy()
|
| print(f"Raw prediction range: {pred_np.min()} - {pred_np.max()}")
|
| threshold = 0.5
|
| print(f"Threshold used: {threshold}")
|
|
|
|
|
| mask_debug_path = "mask_debug.png"
|
| Image.fromarray(mask).save(mask_debug_path)
|
| print(f"Saved raw mask to {mask_debug_path}")
|
|
|
|
|
|
|
| mask_uint8 = np.uint8(mask)
|
| contours, _ = cv2.findContours(mask_uint8, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
|
| print(f"Found {len(contours)} contours.")
|
|
|
| for i, contour in enumerate(contours):
|
| x, y, w, h = cv2.boundingRect(contour)
|
| print(f"Contour {i}: size={len(contour)}, rect={w}x{h} at ({x},{y})")
|
|
|
| color = (0, 255, 0)
|
| marked_img = draw_rectangles_on_mask(image, mask, thickness=2, color=color)
|
|
|
|
|
| output_path = "test_visualization_debug.png"
|
| marked_img.save(output_path)
|
| print(f"Saved visualization to {output_path}")
|
|
|
| if __name__ == "__main__":
|
| test_visualization()
|
|
|