class LOPQRetriever(BaseRetriever): def __init__(self,name,approximator): super(LOPQRetriever, self).__init__(name=name,approximator=approximator,algorithm="LOPQ") self.approximate = True self.name = name self.loaded_entries = {} self.entries = [] self.support_batching = False self.approximator = approximator self.approximator.load() self.searcher = LOPQSearcher(model=self.approximator.model) def load_index(self,numpy_matrix=None,entries=None): codes = [] ids = [] last_index = len(self.entries) for i, e in enumerate(entries): codes.append((tuple(e['codes'][0]),tuple(e['codes'][1]))) ids.append(i+last_index) self.entries.append(e) self.searcher.add_codes(codes,ids) def nearest(self,vector=None,n=12): results = [] pca_vec = self.approximator.get_pca_vector(vector) results_indexes, visited = self.searcher.search(pca_vec,quota=n) for r in results_indexes: results.append(self.entries[r.id]) return results
class LOPQRetriever(object): """ Deprecated and soon to be removed """ def __init__(self, name, approximator): self.approximate = True self.name = name self.loaded_entries = set() self.entries = [] self.support_batching = False self.approximator = approximator self.approximator.load() self.searcher = LOPQSearcher(model=self.approximator.model) def add_entries(self, entries, video_id, entry_type): codes = [] ids = [] last_index = len(self.entries) for i, e in enumerate(entries): codes.append((tuple(e[1][0]), tuple(e[1][1]))) ids.append(i + last_index) self.entries.append({"id":e[0],"type":entry_type,"video":video_id}) self.searcher.add_codes(codes, ids) def nearest(self, vector=None, n=12): results = [] pca_vec = self.approximator.get_pca_vector(vector) results_indexes, visited = self.searcher.search(pca_vec, quota=n) for r in results_indexes: results.append(self.entries[r.id]) return results