Ganesh / app.py
Surya152002's picture
Update app.py
3ac844f
import streamlit as st
import cv2
import numpy as np
import face_recognition
import os
def load_known_faces():
known_faces = []
known_names = []
# Assuming you have a folder named "database" containing subfolders with student faces
database_path = "database"
for folder_name in os.listdir(database_path):
folder_path = os.path.join(database_path, folder_name)
if os.path.isdir(folder_path):
for file_name in os.listdir(folder_path):
file_path = os.path.join(folder_path, file_name)
# Load the image and encode the face
image = face_recognition.load_image_file(file_path)
face_encoding = face_recognition.face_encodings(image)[0]
known_faces.append(face_encoding)
known_names.append(folder_name)
return known_faces, known_names
def detect_and_match_face(frame, known_faces, known_names):
# Find faces in the frame
face_locations = face_recognition.face_locations(frame)
face_encodings = face_recognition.face_encodings(frame, face_locations)
for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings):
# Check if the face matches any known faces
matches = face_recognition.compare_faces(known_faces, face_encoding)
name = "Unknown"
# If a match is found, use the name of the first matching face
if True in matches:
first_match_index = matches.index(True)
name = known_names[first_match_index]
# Draw a rectangle around the face and display the name
cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(frame, name, (left + 6, bottom - 6), font, 0.5, (255, 255, 255), 1)
return frame
def main():
st.title("Face Recognition App")
# Login system
username = st.sidebar.text_input("Username")
password = st.sidebar.text_input("Password", type="password")
if username == "your_username" and password == "your_password":
st.sidebar.success("Logged In")
st.write("Welcome, {}".format(username))
known_faces, known_names = load_known_faces()
# OpenCV webcam setup
video_capture = cv2.VideoCapture(0)
while True:
# Read each frame from the webcam
ret, frame = video_capture.read()
# Detect and match faces in the frame
frame_with_faces = detect_and_match_face(frame, known_faces, known_names)
# Display the frame with faces
st.image(frame_with_faces, channels="BGR", use_column_width=True)
# Break the loop if the user clicks the 'Stop' button
if st.button("Stop"):
break
# Release the webcam
video_capture.release()
else:
st.sidebar.warning("Incorrect username or password")
if __name__ == "__main__":
main()