Spaces:
Sleeping
Sleeping
| import os | |
| os.environ["DEEPFACE_HOME"] = "/tmp/deepface" # Hugging Face allows writing to /tmp | |
| import os | |
| os.environ["STREAMLIT_CONFIG_DIR"] = "/tmp/.streamlit" | |
| os.environ["STREAMLIT_CACHE_DIR"] = "/tmp/.streamlit/cache" | |
| from deepface import DeepFace | |
| import streamlit as st | |
| from database import Database | |
| from config import VECTOR_DB_PATH | |
| from PIL import Image | |
| import numpy as np | |
| import pandas as pd | |
| # Initialize face database | |
| face_db = Database(db_path=VECTOR_DB_PATH) | |
| # Helper function to extract face | |
| def extract_face(img): | |
| face_dict = DeepFace.detection.extract_faces(img, detector_backend='yolov8',normalize_face=False) | |
| return face_dict | |
| def register_user(name, image): | |
| if image is not None: | |
| # image = image.convert("RGB") # Ensure RGB format | |
| # face_dict = extract_face(np.array(image)) | |
| face_db.add_to_collection(image, {"name": name}) | |
| return f"β User '{name}' registered successfully!" | |
| return "β Failed to register user." | |
| def verify_user_image(image): | |
| if image is not None: | |
| # image = image.convert("RGB") # Ensure RGB format | |
| # face_dict = extract_face(np.array(image)) | |
| return face_db.verify(image) | |
| return "β Failed to verify user." | |
| # Streamlit UI | |
| st.set_page_config(page_title="Face Recognition App", layout="centered") | |
| st.title("π§ Face Recognition App") | |
| tab1, tab2,tab3 = st.tabs(["Verify","Register","Delete"]) | |
| with tab1: | |
| st.subheader("Verify User") | |
| # verify_image = st.file_uploader("Upload or Capture Image", type=["jpg", "jpeg", "png"], key="verify") | |
| verify_image=st.camera_input("capture the webcam image") | |
| if verify_image: | |
| image = Image.open(verify_image).convert("RGB") | |
| face_dict=extract_face(np.array(image)) | |
| st.image(face_dict[0]['face'], caption="Uploaded Image", use_container_width=True) | |
| if st.button("Verify"): | |
| status = verify_user_image(face_dict[0]['face']) | |
| # st.info(status) | |
| st.json(status,expanded=2) | |
| with tab2: | |
| st.subheader("Register New User") | |
| name = st.text_input("Enter your name") | |
| uploaded_image = st.camera_input("Upload or Capture Image") | |
| if uploaded_image: | |
| image = Image.open(uploaded_image).convert("RGB") | |
| face_dict=extract_face(np.array(image)) | |
| st.image(face_dict[0]['face'], caption="Uploaded Image", use_container_width=True) | |
| if st.button("Register"): | |
| status = register_user(name, face_dict[0]['face']) | |
| st.success(status) | |
| with tab3: | |
| st.subheader("Delete User") | |
| record_id=st.text_input("enter the record id") | |
| if st.button(label="Delete"): | |
| status=face_db.delete_record(id=record_id) | |
| st.info(status) | |