| import cv2 |
| import numpy as np |
| import torch |
|
|
| from PIL import Image |
| from torchvision import transforms |
|
|
| input_data = { |
| "legends": ["legend_correct.png", "legend_wrong.png"], |
| "plan_image": "wall.png", |
| "plan_obb": [ |
| 20.672607421875, |
| 20.71624755859375, |
| 42.37445068359375, |
| 20.71624755859375, |
| 42.37445068359375, |
| 111.15782165527344, |
| 20.672607421875, |
| 111.15782165527344 |
| ] |
| } |
|
|
|
|
| IMAGE_SIZE = 518 |
|
|
| device = "cuda" if torch.cuda.is_available() else "cpu" |
|
|
| image_tf = transforms.Compose([ |
| transforms.Resize((IMAGE_SIZE, IMAGE_SIZE)), |
| transforms.ToTensor(), |
| transforms.Normalize( |
| mean=[0.485, 0.456, 0.406], |
| std=[0.229, 0.224, 0.225], |
| ), |
| ]) |
|
|
| mask_tf = transforms.Compose([ |
| transforms.Resize((IMAGE_SIZE, IMAGE_SIZE)), |
| transforms.ToTensor(), |
| ]) |
|
|
|
|
| def create_full_mask(size): |
| return Image.new("L", size, 255) |
|
|
|
|
| def create_obb_mask(size, obb): |
| w, h = size |
|
|
| points = np.array(obb, dtype=np.int32).reshape(4, 2) |
|
|
| mask = np.zeros((h, w), dtype=np.uint8) |
| cv2.fillPoly(mask, [points], 255) |
|
|
| return Image.fromarray(mask) |
|
|
|
|
| def prepare(image_path, obb=None): |
| image = Image.open(image_path).convert("RGB") |
|
|
| if obb is None: |
| mask = create_full_mask(image.size) |
| else: |
| mask = create_obb_mask(image.size, obb) |
|
|
| image = image_tf(image).unsqueeze(0).to(device) |
| mask = mask_tf(mask).unsqueeze(0).to(device) |
|
|
| return image, mask |
|
|
| for legend in input_data["legends"]: |
| legend_image, legend_mask = prepare(legend) |
|
|
| plan_image, plan_mask = prepare( |
| input_data["plan_image"], |
| input_data["plan_obb"], |
| ) |
|
|
| model = torch.jit.load( |
| "dino_hatching.pt", |
| map_location=device, |
| ) |
| model.eval() |
|
|
| with torch.no_grad(): |
| logit = model( |
| legend_image, |
| legend_mask, |
| plan_image, |
| plan_mask, |
| ) |
|
|
| score = torch.sigmoid(logit).item() |
|
|
| print(f"{legend}: {score}") |
|
|
| |
| |