Spaces:
Build error
Build error
File size: 3,745 Bytes
6c5f0dc 5fec869 b7a271e 5fec869 b50b4bf 6c5f0dc b7a271e 5fec869 6c5f0dc 5fec869 99bd3cf 6c5f0dc 5fec869 6c5f0dc 5fec869 6c5f0dc 5fec869 426a079 6c5f0dc b7a271e 5fec869 6c5f0dc 5fec869 6c5f0dc 5fec869 6c5f0dc 5fec869 6c5f0dc 5fec869 c9b8627 5fec869 c9b8627 5fec869 9a846d7 c9b8627 5fec869 c9b8627 28145d9 5fec869 cce60dd 5fec869 28145d9 |
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 |
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
conn = sqlite3.connect('attendance.db')
c = conn.cursor()
# Create a table for storing attendance if it doesn't exist
c.execute('''CREATE TABLE IF NOT EXISTS attendance
(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, time TEXT)''')
st.title("AIMLJan24 - Face Recognition")
# Load images for face recognition
Images = []
classnames = []
directory = "photos"
myList = os.listdir(directory)
current_datetime = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
if not os.path.isdir('Attendance'):
os.makedirs('Attendance')
if f'Attendance-{current_datetime}.csv' not in os.listdir('Attendance'):
with open(f'Attendance/Attendance-{current_datetime}.csv', 'w') as f:
f.write('Name,Time')
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):
username = name
print(current_datetime)
# Insert data into the attendance table
c.execute("INSERT INTO attendance (name, time) VALUES (?, ?)", (username, current_datetime))
conn.commit()
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)
# Display the image with recognized faces
st.image(image, use_column_width=True, output_format="PNG")
# Display recognized names
st.write("Recognized Names:")
for i, name in enumerate(recognized_names):
st.write(f"Face {i+1}: {name}")
if len(recognized_names) > 0:
add_attendance(recognized_names)
else:
st.warning("No faces detected in the image. Face recognition failed.") |