predpoint's picture
Upload 13 files
feb85a1
raw
history blame
1.88 kB
import sys
sys.path.append('.')
from flask import Flask, request, jsonify
from time import gmtime, strftime
import os
import base64
import json
import cv2
import numpy as np
from tensorflow.keras.preprocessing import image
from keras_facenet import FaceNet
import pickle
# create a facenet model
embedding_model = FaceNet(key = '20180402-114759',
use_prebuilt=True,
cache_folder= os.path.abspath(os.path.dirname(__file__)) + '/facenet_weights').model
clf_model = pickle.load(open(os.path.abspath(os.path.dirname(__file__)) + '/model/clf_mode.sav', 'rb'))
target_shape = (160, 160)
app = Flask(__name__)
app.config['SITE'] = "http://0.0.0.0:8000/"
app.config['DEBUG'] = False
@app.route('/api/detect_human_face', methods=['POST'])
def detect_human_face():
file1 = request.files['image1']
image1 = cv2.imdecode(np.fromstring(file1.read(), np.uint8), cv2.IMREAD_COLOR)
if image1 is None:
result = "image1: is null!"
status = "ok"
response = jsonify({"status": status, "data": {"result": result}})
response.status_code = 200
response.headers["Content-Type"] = "application/json; charset=utf-8"
return response
X = np.float32([(np.float32(image1) - 127.5) / 127.5])
X_ft = embedding_model.predict(X, batch_size=1)
anomaly_score = clf_model.decision_function(X_ft) * -1
if anomaly_score > 1:
result = "Not Human"
else:
result = "Human"
status = "ok"
response = jsonify(
{
"status": status,
"data": {
"result": result,
"anomaly_score": float(anomaly_score)
}
})
response.status_code = 200
response.headers["Content-Type"] = "application/json; charset=utf-8"
return response
if __name__ == '__main__':
port = int(os.environ.get("PORT", 8000))
app.run(host='0.0.0.0', port=port)