import os from database.utils import similarity import cv2 from vgg.vgg_face import MODEL_FACE from yolo.yoloFace import YOLO_FACE class Retriever: """Base Retriever class""" def __init__(self, thres=0.7, folder_loc="database/images", *args, **kwargs): self.thres = thres self.folder_loc = folder_loc def unlock_lock(self, *args, **kwargs): ... def __call__(self, *args, **kwargs): return self.unlock_lock(*args, **kwargs) class Naive(Retriever): def unlock_lock(self, emb): "Kind of Dynamic but very slow" for root, dirs, files in os.walk(self.folder_loc): for file in files: file_path = os.path.join(root, file) image = cv2.imread(file_path) for patch in YOLO_FACE(image): embedding = MODEL_FACE(patch) if similarity(emb, embedding) > self.thres: return True return False class BruteForceStore(Retriever): def __init__(self, *args, **kwargs): """ Watch dog integration required later Only Use when the number of images are less """ super().__init__(*args, **kwargs) self.embeddings = [] for root, dirs, files in os.walk(self.folder_loc): for file in files: file_path = os.path.join(root, file) image = cv2.imread(file_path) for patch in YOLO_FACE(image): embedding = MODEL_FACE(patch) self.embeddings.append(embedding) def unlock_lock(self, emb): """Only Use when the number of images are less""" for embedding in self.embeddings: print(f"similarity : {similarity(emb, embedding)}") if similarity(emb, embedding) > self.thres: return True return False