Spaces:
Build error
Build error
File size: 3,886 Bytes
6c5f0dc 5fec869 b7a271e 5fec869 4c1bcfc b7a271e d25ee4b 6c5f0dc 8a5eada 5fec869 99bd3cf 6c5f0dc 5fec869 6c5f0dc 5fec869 6c5f0dc 5fec869 0d913e9 5836ff3 b437af2 1ed6b1b 93e159e b437af2 6c5f0dc 5fec869 6c5f0dc 5fec869 6c5f0dc 5fec869 bb99b14 5fec869 bb99b14 d6d1fc2 bb99b14 b437af2 bb99b14 29a8fb3 110f1c9 bb99b14 29a8fb3 bb99b14 61c7e0a 433baf8 5fec869 1382c28 61c7e0a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
import streamlit as st
from PIL import Image
import face_recognition
import cv2
import numpy as np
import os
import sqlite3
from datetime import datetime
import requests
st.title("Face Recognition based attendance system")
# Load images for face recognition
Images = []
classnames = []
directory = "photos"
myList = os.listdir(directory)
current_datetime = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
st.write("Photographs found in folder : ")
for cls in myList:
if os.path.splitext(cls)[1] in [".jpg", ".jpeg"]:
img_path = os.path.join(directory, cls)
curImg = cv2.imread(img_path)
Images.append(curImg)
st.write(os.path.splitext(cls)[0])
classnames.append(os.path.splitext(cls)[0])
# Load images for face recognition
encodeListknown = [face_recognition.face_encodings(img)[0] for img in Images]
# camera to take photo of user in question
file_name = st.camera_input("Upload image")
def add_attendance(name):
url = "https://ai-ml-project.glitch.me/adduserdata1" # Change this URL to your Glitch endpoint
data = {'name': name}
try:
response = requests.get(url, data=data, timeout=10)
if response.status_code == 200:
st.success(f"Attendance marked for {name}")
else:
st.warning(f"Failed to mark attendance for {name}. Status code: {response.status_code}")
except requests.exceptions.ConnectionError:
st.error(f"Failed to connect to the server for {name}. Please check the server.")
except requests.exceptions.Timeout:
st.error(f"Request timed out for {name}.")
except Exception as e:
st.error(f"An unexpected error occurred for {name}: {str(e)}")
if file_name is not None:
col1, col2 = st.columns(2)
test_image = Image.open(file_name)
image = np.asarray(test_image)
imgS = cv2.resize(image, (0, 0), None, 0.25, 0.25)
imgS = cv2.cvtColor(imgS, cv2.COLOR_BGR2RGB)
facesCurFrame = face_recognition.face_locations(imgS)
encodesCurFrame = face_recognition.face_encodings(imgS, facesCurFrame)
# List to store recognized names for all faces in the image
recognized_names = []
# Checking if faces are detected
if len(encodesCurFrame) > 0:
for encodeFace, faceLoc in zip(encodesCurFrame, facesCurFrame):
# Assuming that encodeListknown is defined and populated in your code
matches = face_recognition.compare_faces(encodeListknown, encodeFace)
faceDis = face_recognition.face_distance(encodeListknown, encodeFace)
# Initialize name as Unknown
name = "Unknown"
# Check if there's a match with known faces
if True in matches:
matchIndex = np.argmin(faceDis)
name = classnames[matchIndex].upper()
# Append recognized name to the list
recognized_names.append(name)
# Draw rectangle around the face
y1, x2, y2, x1 = faceLoc
y1, x2, y2, x1 = (y1 * 4), (x2 * 4), (y2 * 4) ,(x1 * 4)
image = image.copy()
cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(image, name, (x1 + 6, y2 - 6), cv2.FONT_HERSHEY_COMPLEX, 1, (255, 255, 255), 2)
# Store attendance in SQLite database
print(recognized_names)
# Display the image with recognized faces
st.image(image, use_column_width=True, output_format="PNG")
st.write("Length : {recognizes_names}")
# Display recognized names
st.write("Recognized Names:")
for i, name in enumerate(recognized_names):
st.write(f"Face {i+1}: {name}")
add_attendance(name)
else:
st.warning("No faces detected in the image. Face recognition failed.")
|