import cv2 import numpy as np import pickle as pickle import LFUtilities import ImageRecognitionSettings as settings from BEBLIDRescorerDB import BEBLIDRescorerDB #from BEBLIDRescorerGPU import BEBLIDRescorerGPU from FAISSSearchEngine import FAISSSearchEngine import FeatureExtractor as fe import BEBLIDExtractor as lf class Searcher: K_REORDERING = 1000 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 = BEBLIDRescorerDB() 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, rescorer=False): kq = k if rescorer: kq = self.K_REORDERING res = self.search_engine.search_by_id(query_id, kq) if rescorer: res_lf = self.rescorer.rescore_by_id(query_id, res) res = res_lf if res_lf else res[:k] return res def search_by_img(self, query_img, k=10, rescorer=False): kq = k if rescorer: kq = self.K_REORDERING query_desc = fe.extract(query_img) res = self.search_engine.search_by_img(query_desc, kq) if rescorer: 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] return res def save(self, is_backup=False): self.search_engine.save(is_backup) #self.rescorer.save(is_backup)