Spaces:
Runtime error
Runtime error
from flask import Flask, render_template, jsonify, request | |
from flask_socketio import SocketIO, emit | |
from fire import firestore_client as fc | |
import dlib | |
import base64 | |
import cv2 | |
import numpy as np | |
import time | |
app = Flask(__name__) | |
app.config['SECRET_KEY'] = 'secret!' | |
socket = SocketIO(app, async_mode="eventlet") | |
img = None | |
hog_face_detector = dlib.get_frontal_face_detector() | |
def base64_to_img(base64_image): | |
# Remove the "data:image/jpeg;base64," prefix from the string | |
image_data = base64_image.split(',')[1] | |
# Decode the base64-encoded image data | |
decoded_data = base64.b64decode(image_data) | |
# Convert the binary data to a NumPy array | |
np_array = np.frombuffer(decoded_data, np.uint8) | |
# Decode the NumPy array to an OpenCV image | |
image = cv2.imdecode(np_array, cv2.IMREAD_COLOR) | |
return image | |
def prep_image(image,name,fc): | |
image = base64_to_img(image) | |
count = 0 | |
while count < 10: | |
time.sleep(2) | |
face_hog = hog_face_detector(image,1) | |
for face in face_hog: | |
x = face.left() | |
y = face.top() | |
w = face.right() - x | |
h = face.bottom() - y | |
crop = image[y:y+h,x:x+w] | |
crop = cv2.resize(crop, (224, 224)) | |
retval, buffer = cv2.imencode('.jpg', crop) | |
res = base64.b64encode(buffer) | |
doc= name+"_"+str(count) | |
print(res) | |
doc_ref = fc.collection("faces").document(str(doc)) | |
doc_ref.set({ | |
"img":res | |
}) | |
count += 1 | |
return(count) | |
def test_connect(): | |
print("Connected") | |
emit("my response", {"data": "Connected"}) | |
def receive_image(image): | |
global img | |
img = image['image'] | |
# Emit the received image as base64 string to the '/camera' route | |
socket.emit('forward_image', {'image': img}, namespace='/camera') | |
def home(): | |
return render_template("index.html") | |
def camera(): | |
if request.method == 'GET': | |
# image_data = request.form['image'] | |
# Process the received image data as needed | |
# Return the processed image data | |
return jsonify({'image': img}) | |
else: | |
return "Method Not Allowed", 405 | |
def login(): | |
doc_ref = fc.collection("current_users").document('user') | |
doc = doc_ref.get() | |
if doc.exists: | |
doc = doc.to_dict() | |
else: | |
print("No such document!") | |
res = doc['name'] | |
return render_template('login.html',name = res) | |
def sign(): | |
doc_ref = fc.collection("faces").document('users') | |
doc = doc_ref.get() | |
if doc.exists: | |
doc = doc.to_dict() | |
else: | |
print("No such document!") | |
res = doc['name'] | |
result = "error" | |
if request.method == "POST": | |
name = request.form.get("name") | |
res.append(name) | |
result = prep_image(img,name,fc) | |
return render_template('sign.html',data = result) | |
if __name__ == '__main__': | |
socket.run(app, debug=True,port=7860,host="0.0.0.0") | |