import cv2 import numpy as np import pickle as pickle import LFUtilities import ImageRecognitionSettings as settings #from BEBLIDRescorerDB import BEBLIDRescorerDB from BEBLIDRescorer import BEBLIDRescorer import SearcherParameters from FAISSSearchEngine import FAISSSearchEngine import FeatureExtractor as fe import BEBLIDExtractorQ as lf from line_profiler_pycharm import profile class Searcher: def __init__(self): # self.dataset = h5py.File(settings.dataset_file, 'r')['rmac'][...] # np.save('/media/Data/data/beni_culturali/deploy/dataset', self.dataset) self.search_engine = FAISSSearchEngine() self.rescorer = BEBLIDRescorer() def get_id(self, idx): return self.search_engine.get_id(idx) def add(self, img_file, id): self.save(True) desc = fe.extract(img_file) #orb = lf.extract(img_file) self.search_engine.add(desc, id) #self.rescorer.add(orb) self.save() print('added ' + id) def remove(self, id): self.save(True) self.search_engine.remove(id) #self.rescorer.remove(idx) self.save() print('removed ' + id) def search_by_id(self, query_id, k=10, search_deep_level=1): kq = k if search_deep_level > 0: kq = SearcherParameters.SEARCH_DEEP_K[search_deep_level] res = self.search_engine.search_by_id(query_id, kq) if search_deep_level > 0: res_lf = self.rescorer.rescore_by_id(query_id, res) res = res_lf if res_lf else res[:k] return res @profile def search_by_img(self, query_img, k=10, search_deep_level=1): kq = k if search_deep_level: kq = SearcherParameters.SEARCH_DEEP_K[search_deep_level] query_desc = fe.extract(query_img) res = self.search_engine.search_by_img(query_desc, kq) if search_deep_level > 0: query_lf = lf.extract(query_img) res_lf = self.rescorer.rescore_by_img(query_lf, res) #res = res_lf if res_lf else res[:k] res = res_lf if res_lf else res[:k] res = [result for result in res if result[1] >= SearcherParameters.GEM_THRESHOLD] return res def save(self, is_backup=False): self.search_engine.save(is_backup) #self.rescorer.save(is_backup)