from flask import * from PIL import Image import face_recognition import cv2 import numpy as np import csv from datetime import datetime ################# from flask_socketio import SocketIO,emit import base64 ################## cnt =1 app = Flask (__name__ ) ################# app.config['SECRET_KEY'] = 'secret!' socket = SocketIO(app,async_mode="eventlet") ####################### ###################### # def base64_to_image(base64_string): # # Extract the base64 encoded binary data from the input string # base64_data = base64_string.split(",")[1] # # Decode the base64 data to bytes # image_bytes = base64.b64decode(base64_data) # # Convert the bytes to numpy array # image_array = np.frombuffer(image_bytes, dtype=np.uint8) # # Decode the numpy array as an image using OpenCV # image = cv2.imdecode(image_array, cv2.IMREAD_COLOR) # return image # @socket.on("connect") # def test_connect(): # print("Connected") # emit("my response", {"data": "Connected"}) # @socket.on("image") # def receive_image(image): # global cnt # s = True # while s : # # Decode the base64-encoded image data # image = base64_to_image(image) # known_faces_names = ["Sarwan Sir", "Vikas","Lalit","Jasmeen","Anita Ma'am"] # known_face_encodings = [] # # Load known face encodings # sir_image = face_recognition.load_image_file("photos/sir.jpeg") # sir_encoding = face_recognition.face_encodings(sir_image)[0] # vikas_image = face_recognition.load_image_file("photos/vikas.jpg") # vikas_encoding = face_recognition.face_encodings(vikas_image)[0] # lalit_image = face_recognition.load_image_file("photos/lalit.jpg") # lalit_encoding = face_recognition.face_encodings(lalit_image)[0] # jasmine_image = face_recognition.load_image_file("photos/jasmine.jpg") # jasmine_encoding = face_recognition.face_encodings(jasmine_image)[0] # maam_image = face_recognition.load_image_file("photos/maam.png") # maam_encoding = face_recognition.face_encodings(maam_image)[0] # known_face_encodings = [sir_encoding, vikas_encoding,lalit_encoding,jasmine_encoding,maam_encoding] # students = known_faces_names.copy() # face_locations = [] # face_encodings = [] # face_names = [] # # now = datetime.now() # # current_date = now.strftime("%Y-%m-%d") # # csv_file = open(f"{current_date}.csv", "a+", newline="") # # # csv_writer = csv.writer(csv_file) # small_frame = cv2.resize(image, (0, 0), fx=0.25, fy=0.25) # rgb_small_frame = small_frame[:, :, ::-1] # # # emit("result",{"name":"level " +str(cnt),"score":str(len(face_encodings))}) # face_locations = face_recognition.face_locations(rgb_small_frame) # face_encodings = face_recognition.face_encodings(small_frame, face_locations) # face_names = [] # emit("result",{"name":"level2 " +str(cnt),"score":str(len(face_encodings))}) # cnt = cnt +1 # for face_encoding in face_encodings: # # emit("result",{"name":"in for ","score":"34"}) # matches = face_recognition.compare_faces(known_face_encodings, face_encoding) # name = "" # face_distance = face_recognition.face_distance(known_face_encodings, face_encoding) # best_match_index = np.argmin(face_distance) # if matches[best_match_index]: # name = known_faces_names[best_match_index] # face_names.append(name) # s = False # break # emit("result",{"name":str(name),"score":"myScore"}) # # for name in face_names: # # if name in known_faces_names and name in students and name not in existing_names: # # students.remove(name) # # print(students) # # print(f"Attendance recorded for {name}") # # current_time = now.strftime("%H-%M-%S") # # csv_writer.writerow([name, current_time, "Present"]) # # existing_names.add(name) # Add the name to the set of existing names @app.route ("/") def home(): return render_template("index.html") @app.route('/table') def show_table(): # Get the current date current_date = datetime.now().strftime("%Y-%m-%d") # Read the CSV file to get attendance data attendance=[] try: with open(f"{current_date}.csv", newline="") as csv_file: csv_reader = csv.reader(csv_file) attendance = list(csv_reader) except FileNotFoundError: pass # Render the table.html template and pass the attendance data return render_template('attendance.html', attendance=attendance) if __name__ == '__main__': socket.run(app,host="0.0.0.0", port=7860) ########################################################################### # @app.route('/table') # def show_table(): # # Get the current date # current_date = datetime.now().strftime("%Y-%m-%d") # # Read the CSV file to get attendance data # attendance=[] # try: # with open(f"{current_date}.csv", newline="") as csv_file: # csv_reader = csv.reader(csv_file) # attendance = list(csv_reader) # except FileNotFoundError: # pass # # Render the table.html template and pass the attendance data # return render_template('attendance.html', attendance=attendance) # if __name__ == "__main__": # socket.run(app,host="0.0.0.0", port=7860)