Spaces:
Running
Running
File size: 3,180 Bytes
4d4dd90 40c4807 4d4dd90 40c4807 4d4dd90 40c4807 4d4dd90 2507d2f 0bc7901 4d4dd90 0bc7901 4d4dd90 40c4807 0bc7901 40c4807 4d4dd90 40c4807 4d4dd90 2507d2f 0bc7901 5e02733 0bc7901 5e02733 0bc7901 5e02733 0bc7901 5e02733 0bc7901 5e02733 0bc7901 5e02733 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 |
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 = {
"dense": False,
"matcher": {
"model": {
"name": "NN-mutual",
"match_threshold": 0.2,
}
},
"feature": {
"model": {
"name": "xfeat",
"max_keypoints": 1024,
"keypoint_threshold": 0.015,
}
},
"ransac": {
"enable": True,
"estimator": "poselib",
"geometry": "homography",
"method": "RANSAC",
"reproj_threshold": 3,
"confidence": 0.9999,
"max_iter": 10000,
},
}
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 = {
"dense": True,
"matcher": {
"model": {
"name": "loftr",
"match_threshold": 0.2,
}
},
"feature": {},
"ransac": {
"enable": True,
"estimator": "poselib",
"geometry": "homography",
"method": "RANSAC",
"reproj_threshold": 3,
"confidence": 0.9999,
"max_iter": 10000,
},
}
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)
|