import cv2 import yaml import numpy as np import os import sys ROOT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) sys.path.insert(0, ROOT_DIR) from components import load_component from utils import evaluation_utils import argparse parser = argparse.ArgumentParser() parser.add_argument( "--config_path", type=str, default="configs/sgm_config.yaml", help="number of processes.", ) parser.add_argument( "--img1_path", type=str, default="demo_1.jpg", help="number of processes." ) parser.add_argument( "--img2_path", type=str, default="demo_2.jpg", help="number of processes." ) args = parser.parse_args() if __name__ == "__main__": with open(args.config_path, "r") as f: demo_config = yaml.load(f) extractor = load_component( "extractor", demo_config["extractor"]["name"], demo_config["extractor"] ) img1, img2 = cv2.imread(args.img1_path), cv2.imread(args.img2_path) size1, size2 = np.flip(np.asarray(img1.shape[:2])), np.flip( np.asarray(img2.shape[:2]) ) kpt1, desc1 = extractor.run(args.img1_path) kpt2, desc2 = extractor.run(args.img2_path) matcher = load_component( "matcher", demo_config["matcher"]["name"], demo_config["matcher"] ) test_data = { "x1": kpt1, "x2": kpt2, "desc1": desc1, "desc2": desc2, "size1": size1, "size2": size2, } corr1, corr2 = matcher.run(test_data) # draw points dis_points_1 = evaluation_utils.draw_points(img1, kpt1) dis_points_2 = evaluation_utils.draw_points(img2, kpt2) # visualize match display = evaluation_utils.draw_match(dis_points_1, dis_points_2, corr1, corr2) cv2.imwrite("match.png", display)