File size: 4,756 Bytes
6c5f0dc
 
5fec869
 
 
 
b7a271e
5fec869
784a4d1
 
b50b4bf
1382c28
b7a271e
 
 
 
 
 
 
5fec869
6c5f0dc
5fec869
 
 
 
 
99bd3cf
6c5f0dc
5fec869
 
 
 
 
 
 
 
6c5f0dc
5fec869
 
6c5f0dc
5fec869
426a079
6c5f0dc
b7a271e
 
 
 
6c5f0dc
784a4d1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5fec869
 
6c5f0dc
5fec869
 
6c5f0dc
5fec869
 
 
 
6c5f0dc
5fec869
 
 
 
 
 
9556539
5fec869
 
 
 
 
9556539
5fec869
 
 
 
9556539
 
 
 
 
 
 
 
 
 
5fec869
1382c28
784a4d1
9556539
c9b8627
 
28145d9
5fec869
 
 
 
 
1382c28
9556539
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
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
from huggingface_hub import Repository
import pandas as pd

# Establish connection to SQLite database
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")

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
    c.execute("INSERT INTO attendance (name, time) VALUES (?, ?)", (username, current_datetime))
    conn.commit()

def addAttendance(name):
    directory_name = "my_directory"

    # Check if the repository exists, if not, create it
    if not Repository.exists(directory_name):
        repo = Repository.create(directory_name)
        print(f"Repository '{directory_name}' created successfully!")
    else:
        repo = Repository()
    
    # Create the directory
    repo.create_directory(directory_name)
    
    # Define recognized results (example)
    recognized_results = [
        {"Name": "{name}", "Status": "Present"},
        {"Name": "Alice", "Status": "Absent"},
        {"Name": "Bob", "Status": "Present"}
    ]
    
    # Convert recognized results to DataFrame
    df = pd.DataFrame(recognized_results)
    
    # Define the path to save the Excel file
    excel_file_path = "recognized_results.xlsx"
    
    # Save DataFrame to Excel file
    df.to_excel(excel_file_path, index=False)
    
    # Define the destination path within the directory
    destination_path = os.path.join(directory_name, excel_file_path)
    
    # Move the Excel file to the destination path
    os.system(f"mv {excel_file_path} {destination_path}")
    
    print(f"Excel file '{excel_file_path}' added to directory '{directory_name}' successfully!")

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
            addAttendance(name)
            
        # 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}")
    else:
        st.warning("No faces detected in the image. Face recognition failed.")