import faiss import numpy as np import pickle import os class SimilaritySearchEngine: def __init__(self): base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) embeddings_path = os.path.join(base_dir, 'data', 'embeddings.pkl') with open(embeddings_path, 'rb') as f: data = pickle.load(f) self.embeddings = data['embeddings'] # Convert Windows paths to Linux paths self.image_paths = [os.path.normpath(path).replace('\\', '/') for path in data['image_paths']] dimension = len(self.embeddings[0]) self.index = faiss.IndexFlatL2(dimension) self.index.add(np.array(self.embeddings)) def search_similar_images(self, query_embedding, top_k=5): distances, indices = self.index.search(np.array([query_embedding]), top_k) return [self.image_paths[idx] for idx in indices[0]], distances[0]