Spaces:
Running
Running
File size: 3,481 Bytes
4d4dd90 40c4807 4d4dd90 40c4807 4d4dd90 40c4807 4d4dd90 2507d2f 0bc7901 4d4dd90 0bc7901 4d4dd90 40c4807 0bc7901 40c4807 4d4dd90 40c4807 4d4dd90 2507d2f 0bc7901 5e02733 0bc7901 5e02733 de8bee7 5e02733 de8bee7 0bc7901 de8bee7 5e02733 de8bee7 5e02733 de8bee7 5e02733 de8bee7 5e02733 de8bee7 5e02733 de8bee7 0bc7901 de8bee7 0bc7901 4d4dd90 0bc7901 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
import cv2
import warnings
import numpy as np
from pathlib import Path
from hloc import logger
from common.utils import (
get_matcher_zoo,
load_config,
device,
ROOT,
)
from common.api import ImageMatchingAPI
def test_all(config: dict = None):
img_path1 = ROOT / "datasets/sacre_coeur/mapping/02928139_3448003521.jpg"
img_path2 = ROOT / "datasets/sacre_coeur/mapping/17295357_9106075285.jpg"
image0 = cv2.imread(str(img_path1))[:, :, ::-1] # RGB
image1 = cv2.imread(str(img_path2))[:, :, ::-1] # RGB
matcher_zoo_restored = get_matcher_zoo(config["matcher_zoo"])
for k, v in matcher_zoo_restored.items():
if image0 is None or image1 is None:
logger.error("Error: No images found! Please upload two images.")
enable = config["matcher_zoo"][k].get("enable", True)
if enable:
logger.info(f"Testing {k} ...")
api = ImageMatchingAPI(conf=v, device=device)
api(image0, image1)
log_path = ROOT / "experiments" / "all"
log_path.mkdir(exist_ok=True, parents=True)
api.visualize(log_path=log_path)
else:
logger.info(f"Skipping {k} ...")
def test_one():
img_path1 = ROOT / "datasets/sacre_coeur/mapping/02928139_3448003521.jpg"
img_path2 = ROOT / "datasets/sacre_coeur/mapping/17295357_9106075285.jpg"
image0 = cv2.imread(str(img_path1))[:, :, ::-1] # RGB
image1 = cv2.imread(str(img_path2))[:, :, ::-1] # RGB
# sparse
conf = {
"feature": {
"output": "feats-superpoint-n4096-rmax1600",
"model": {
"name": "superpoint",
"nms_radius": 3,
"max_keypoints": 4096,
"keypoint_threshold": 0.005,
},
"preprocessing": {
"grayscale": True,
"force_resize": True,
"resize_max": 1600,
"width": 640,
"height": 480,
"dfactor": 8,
},
},
"matcher": {
"output": "matches-NN-mutual",
"model": {
"name": "nearest_neighbor",
"do_mutual_check": True,
"match_threshold": 0.2,
},
},
"dense": False,
}
api = ImageMatchingAPI(conf=conf, device=device)
api(image0, image1)
log_path = ROOT / "experiments" / "one"
log_path.mkdir(exist_ok=True, parents=True)
api.visualize(log_path=log_path)
# dense
conf = {
"matcher": {
"output": "matches-loftr",
"model": {
"name": "loftr",
"weights": "outdoor",
"max_keypoints": 2000,
"match_threshold": 0.2,
},
"preprocessing": {
"grayscale": True,
"resize_max": 1024,
"dfactor": 8,
"width": 640,
"height": 480,
"force_resize": True,
},
"max_error": 1,
"cell_size": 1,
},
"dense": True,
}
api = ImageMatchingAPI(conf=conf, device=device)
api(image0, image1)
log_path = ROOT / "experiments" / "one"
log_path.mkdir(exist_ok=True, parents=True)
api.visualize(log_path=log_path)
if __name__ == "__main__":
import argparse
config = load_config(ROOT / "common/config.yaml")
test_one()
test_all(config)
|