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) # @app.route("/") # def home(): # return render_template('index.html') # if __name__ == "__main__": # socket.run(app,host="0.0.0.0", port=7860)