Rohit001's picture
Update app.py
1a619ea
raw
history blame
No virus
3.13 kB
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)
@socket.on("connect")
def test_connect():
print("Connected")
emit("my response", {"data": "Connected"})
@socket.on("image")
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')
@app.route("/")
def home():
return render_template("index.html")
@app.route("/camera", methods=['POST',"GET"])
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
@app.route("/login")
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)
@app.route("/sign", methods=('GET', 'POST'))
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")