File size: 4,786 Bytes
6c5f0dc
 
5fec869
 
 
 
b7a271e
5fec869
4c1bcfc
b7a271e
5fec869
6c5f0dc
8a5eada
5fec869
 
 
 
 
99bd3cf
6c5f0dc
5fec869
 
 
 
 
 
 
 
6c5f0dc
5fec869
 
6c5f0dc
5fec869
0d913e9
5836ff3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f19ddd2
32f63db
4c1bcfc
ae2930c
93e159e
 
c6f5943
93e159e
 
 
 
4c1bcfc
 
 
 
23731f8
6c5f0dc
5fec869
 
6c5f0dc
5fec869
 
6c5f0dc
5fec869
 
bb99b14
 
 
5fec869
 
 
bb99b14
 
 
 
 
 
 
 
 
d6d1fc2
bb99b14
 
 
 
 
 
 
d6d1fc2
bb99b14
 
 
 
 
 
 
 
29a8fb3
110f1c9
bb99b14
 
29a8fb3
bb99b14
 
 
 
61c7e0a
110f1c9
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
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
139
140
141
142
143
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("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")


geolocation_js = """
<script>
function getLocation() {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(sendLocation);
    } else {
        alert("Geolocation is not supported by this browser.");
    }
}

function sendLocation(position) {
    var latitude = position.coords.latitude;
    var longitude = position.coords.longitude;
    Streamlit.setComponentValue({"latitude": latitude, "longitude": longitude});
}
</script>
"""

# Display the JavaScript code
st.write(geolocation_js, unsafe_allow_html=True)

# Run JavaScript code to access geolocation when button is clicked
button_clicked = st.button("Get Location")
if button_clicked:
    st.write("<script>getLocation()</script>", unsafe_allow_html=True)

# Receive latitude and longitude from JavaScript
latitude_received = st.session_state.get("latitude")
longitude_received = st.session_state.get("longitude")

# Display latitude and longitude
if latitude_received is not None and longitude_received is not None:
    st.write(f"Latitude: {latitude_received}, Longitude: {longitude_received}")



def add_attendance(names):
    url = "https://ai-ml-project.glitch.me/adduserdata1"  # Change this URL to your Glitch endpoint
    success_count = 0
    print(len(names))
    
    data = {'name': name}
    response = requests.get(url, data=data)
    if response.status_code == 200:
        success_count += 1
    else:
        st.warning(f"Failed to mark attendance for {name}")

    if success_count == len(names):
        st.success("Attendance marked for all recognized faces. Have a good day!")
    else:
        st.success("Attendance marked for some faces. Check warnings for details.")

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.")