ANSELME
Upload 18 files
b01aff7 verified
raw
history blame contribute delete
No virus
5.31 kB
import streamlit as st
import time
import cv2
import pickle
import face_recognition
from Preparing_local import prepare_test_img, test
from PIL import Image
import os
# Define the path to the 'db' directory
db_folder = 'db'
# Create the 'db' directory if it doesn't exist
if not os.path.exists(db_folder):
os.makedirs(db_folder)
t0= time.time()
# print("Hello")
# Declaring variables
path = "db"
def main():
# Loading the mode
#@st.cache
def load_model():
with open ('encoded_faces.pickle', 'rb') as f_in:
encoded_trains = pickle.load(f_in)
return encoded_trains
encoded_trains = load_model()
# Start of the project
st.title("Attendance Management System Using Face Recognition")
st.sidebar.title("Take Attendance")
app_mode = st.sidebar.selectbox("Choose Mode",
["Attend from image", "Attend using camera", "Training","Add New Student"])
if app_mode == "Attend from image":
attendance_file = st.file_uploader("Choose attendance file",type =['csv'])
uploaded_file = st.file_uploader("Upload a picture of a student to mark the attendance", type=['jpg', 'jpeg', 'png'])
if attendance_file is not None and uploaded_file is not None:
test_img, encoded_tests, face_test_locations = prepare_test_img(uploaded_file)
df = test(encoded_tests, face_test_locations, test_img, encoded_trains, attendance_file)
t1 = time.time() - t0
st.write("Time elapsed: ", t1)
# test_img = cv2.resize(test_img,(0,0),None,0.50,0.50)
st.image(test_img)
st.write(df)
elif app_mode == "Attend using camera":
attendance_file = st.file_uploader("Choose attendance file",type =['csv'])
picture = st.camera_input("Take a picture")
if picture is not None and attendance_file is not None:
test_img, encoded_tests, face_test_locations = prepare_test_img(picture)
df = test(encoded_tests, face_test_locations, test_img, encoded_trains, attendance_file)
t1 = time.time() - t0
st.write("Time elapsed: ", t1)
#test_img = cv2.resize(test_img,(0,0),None,0.50,0.50)
st.image(test_img)
st.write(df)
elif app_mode == "Training":
st.subheader('Training Steps:')
st.markdown("1. Get a photo of every Student with **only one face** in the picture.")
st.markdown('2. Put all the photos in the **db** folder')
st.markdown("3. Press **Train The Model** Button")
if st.button("Train The Model"):
import Training
encoded_trains, images = Training.training(path)
st.write(images)
st.write(len(encoded_trains))
output_file = 'encoded_faces.pickle'
with open(output_file, 'wb') as f_out:
pickle.dump(encoded_trains, f_out)
elif app_mode == "Attend Live":
st.title("Webcam Live Feed")
attendance_file = st.file_uploader("Choose attendance file",type =['csv'])
if attendance_file is not None:
run = st.checkbox('Run')
FRAME_WINDOW = st.image([])
camera = cv2.VideoCapture(2)
while run:
_, test_img = camera.read()
test_img = cv2.cvtColor(test_img, cv2.COLOR_BGR2RGB)
test_img_small = cv2.resize(test_img,(0,0),None,0.5,0.5)
face_test_locations = face_recognition.face_locations(test_img_small, model = "hog")
encoded_tests = face_recognition.face_encodings(test_img_small)
df = test(encoded_tests, face_test_locations, test_img, encoded_trains, attendance_file)
#st.image(test_img)
FRAME_WINDOW.image(test_img)
#st.write(df)
elif app_mode == "Add New Student":
st.title("Register Here")
Name = st.text_input('Enter Your Name:')
def load_image(image_file):
img = Image.open(image_file)
return img
image_file = st.camera_input("Take a picture")
if image_file is not None:
# TO See details
file_details = Name
st.write("Your Name:"+file_details)
st.image(load_image(image_file), width=250)
#Saving upload
with open(os.path.join("db",Name+'.jpg'),"wb") as f:
f.write((image_file).getbuffer())
st.success("File Saved successfully")
st.write("Now,Please click on Register Button")
if st.button("Register"):
import Training
encoded_trains, images = Training.training(path)
st.write(images)
st.write(len(encoded_trains))
output_file = 'encoded_faces.pickle'
with open(output_file, 'wb') as f_out:
pickle.dump(encoded_trains, f_out)
else:
st.write('Stopped')
if __name__=='__main__':
main()