FaceRecognition / app.py
ryefoxlime's picture
Rename FaceRecognition.py to app.py
697706a
from deepface import DeepFace
import cv2
import time
import streamlit as st
from PIL import Image
windowsHolder = st.empty()
value = st.empty()
def main():
cap = cv2.VideoCapture(0)
while True:
time.sleep(0.5)
_, img = cap.read()
if img is None:
break
#cv2.imshow("Window", img)
windowsHolder.image(img, channels="BGR")
extract_faces(img)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
return
def extract_faces(raw_img):
test = DeepFace.extract_faces(raw_img, detector_backend="mtcnn", align=True)
if test:
faces = []
for face_obj in test:
facial_area = face_obj["facial_area"]
faces.append(
(
facial_area["x"],
facial_area["y"],
facial_area["w"],
facial_area["h"],
)
)
detected_faces = []
for x, y, w, h in faces:
detected_face = raw_img[int(y) : int(y + h), int(x) : int(x + w)]
detected_faces.append(detected_face)
recognition(detected_face)
print("Face detected")
time.sleep(0.6)
return
def recognition(img):
print("Starting recognition")
dfs = DeepFace.find(
img_path=img,
db_path="/Users/futuregadgetlab/Desktop/DB",
detector_backend="mtcnn",
model_name="VGG-Face",
distance_metric="euclidean_l2",
enforce_detection=False,
)
found_non_empty_df = False
for df in dfs:
if len(df) != 0:
for _, row in df.iterrows():
if row["VGG-Face_euclidean_l2"] < 0.6:
print("Matched!")
with value.container():
st.write("Matched! Welcome to expo 2023")
st.balloons()
found_non_empty_df = True
break
if found_non_empty_df:
break # Exit the outer loop if a match is found in any DataFrame
if not found_non_empty_df:
print("SIke")
with value.container():
st.warning("You don't exist, my friend!")
time.sleep(1)
if __name__ == "__main__":
main()