import os import numpy as np import torch import open_clip import faiss from PIL import Image CARDS_FOLDER = "/images/cards" EMBEDDINGS_FILE = "/pythonService/embeddings.npy" IDS_FILE = "/pythonService/ids.npy" FAISS_FILE = "/pythonService/card_index.faiss" device = "cuda" if torch.cuda.is_available() else "cpu" model, _, preprocess = open_clip.create_model_and_transforms( 'ViT-L-14', pretrained='laion2b_s32b_b82k' ) model = model.to(device).eval() # ---- load existing or initialize ---- if os.path.exists(FAISS_FILE): print("Loading existing FAISS index...") index = faiss.read_index(FAISS_FILE) embeddings = np.load(EMBEDDINGS_FILE) ids = np.load(IDS_FILE) else: print("Creating new FAISS index...") embeddings = np.zeros((0, 1024), dtype='float32') # 1024 for ViT-L-14 ids = np.array([], dtype=' 0: new_embeddings = np.vstack(new_embeddings).astype('float32') faiss.normalize_L2(new_embeddings) # add to FAISS index.add(new_embeddings) # append to numpy arrays embeddings = np.vstack([embeddings, new_embeddings]) ids = np.concatenate([ids, np.array(new_ids)]) # save everything np.save(EMBEDDINGS_FILE, embeddings) np.save(IDS_FILE, ids) faiss.write_index(index, FAISS_FILE) print(f"Added {len(new_files)} cards. Total now:", index.ntotal) else: print("No new cards found — nothing to update.")