| 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 |