Linh Vuu
added files
c44d66d
raw
history blame
2.89 kB
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}")