from pathlib import Path import os import streamlit as st import datetime from deepface import DeepFace DISTANCE_METRIC = "cosine" # cosine, euclidean, euclidean_l2 MODEL_NAME = 'ArcFace' # VGG-Face, Facenet, OpenFace, DeepFace, DeepID, Dlib, ArcFace or Ensemble DETECTOR_BACKEND = "opencv" # Retinaface, mtcnn, opencv, ssd or dlib def face_verfication(image_array): """ Checking user's face image with user face history images If one check is True -> True """ result = False verifications = DeepFace.verify(img1_path=image_array, model_name=MODEL_NAME, distance_metric=DISTANCE_METRIC, detector_backend=DETECTOR_BACKEND) print(f"Verification detail: {verifications}") for k, verification in verifications.items(): if verification["verified"]: result = True break return result def save_user_image(username, image, input_time): print("Save new user image >>>") save_dir = f"img/user_image/{username}" save_file_path = f"img/user_image/{username}/{username}_{int(input_time)}.jpg" # Create folder if not exist if not os.path.exists(save_dir): print("Path not exist") os.makedirs(save_dir) # Save image with open(save_file_path, mode='wb') as w: w.write(image.getbuffer()) return save_file_path def read_user_image(username): print("Read user image >>>") list_image_path = [] image_dir = f"img/user_image/{username}" # Create folder if not exist if not os.path.exists(image_dir): os.makedirs(image_dir) for x in os.listdir(image_dir): if x.lower().endswith(".jpg") or x.lower().endswith(".png") or \ x.lower().endswith(".jpeg"): image_path = os.path.join(image_dir, x) list_image_path.append(image_path) return list_image_path username = "dora" verification = False # This should be removed after @Thao adds the function # user historical data verification # @Dora: This is to put the function face verification if not (verification): # # Upload photo st.info('Please upload your photo') img_file_buffer = st.camera_input("Take a picture") input_time = datetime.datetime.now().timestamp() if img_file_buffer is not None: print("We have imgage") list_history_image = read_user_image(username) image_path = save_user_image(username, img_file_buffer, input_time) print(f"Image path after saving: {image_path}") if not list_history_image: verification = True else: img_arr = [[image_path, x] for x in list_history_image] verification = face_verfication(img_arr) print(f"Face verification: {verification}") print(f"Verification: {verification}")