Spaces:
Runtime error
Runtime error
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 | |
def test_connect(): | |
print("Connected") | |
emit("my response", {"data": "Connected"}) | |
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 | |
def home(): | |
return render_template("index.html") | |
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) | |