Spaces:
Sleeping
Sleeping
| 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 facewrapper.facewrapper import ttv_version | |
| from facewrapper.facewrapper import ttv_get_hwid | |
| from facewrapper.facewrapper import ttv_init | |
| from facewrapper.facewrapper import ttv_init_offline | |
| from facewrapper.facewrapper import ttv_extract_feature | |
| from facewrapper.facewrapper import ttv_compare_feature | |
| app = Flask(__name__) | |
| app.config['SITE'] = "http://0.0.0.0:8000/" | |
| app.config['DEBUG'] = False | |
| licenseKey = os.environ.get("LICENSE_KEY") | |
| licensePath = "license.txt" | |
| modelFolder = os.path.abspath(os.path.dirname(__file__)) + '/facewrapper/dict' | |
| version = ttv_version() | |
| print("version: ", version.decode('utf-8')) | |
| ret = ttv_init(modelFolder.encode('utf-8'), licenseKey.encode('utf-8')) | |
| if ret != 0: | |
| print(f"online init failed: {ret}"); | |
| hwid = ttv_get_hwid() | |
| print("hwid: ", hwid.decode('utf-8')) | |
| ret = ttv_init_offline(modelFolder.encode('utf-8'), licensePath.encode('utf-8')) | |
| if ret != 0: | |
| print(f"offline init failed: {ret}") | |
| exit(-1) | |
| else: | |
| print(f"offline init ok") | |
| else: | |
| print(f"online init ok") | |
| def compare_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 | |
| file2 = request.files['image2'] | |
| image2 = cv2.imdecode(np.fromstring(file2.read(), np.uint8), cv2.IMREAD_COLOR) | |
| if image2 is None: | |
| result = "image2: 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 | |
| faceRect1 = np.zeros([4], dtype=np.int32) | |
| feature1 = np.zeros([2048], dtype=np.uint8) | |
| featureSize1 = np.zeros([1], dtype=np.int32) | |
| ret = ttv_extract_feature(image1, image1.shape[1], image1.shape[0], faceRect1, feature1, featureSize1) | |
| if ret <= 0: | |
| if ret == -1: | |
| result = "license error!" | |
| elif ret == -2: | |
| result = "init error!" | |
| elif ret == 0: | |
| result = "image1: no face detected!" | |
| status = "ok" | |
| response = jsonify({"status": status, "data": {"result": result}}) | |
| response.status_code = 200 | |
| response.headers["Content-Type"] = "application/json; charset=utf-8" | |
| return response | |
| faceRect2 = np.zeros([4], dtype=np.int32) | |
| feature2 = np.zeros([2048], dtype=np.uint8) | |
| featureSize2 = np.zeros([1], dtype=np.int32) | |
| ret = ttv_extract_feature(image2, image2.shape[1], image2.shape[0], faceRect2, feature2, featureSize2) | |
| if ret <= 0: | |
| if ret == -1: | |
| result = "license error!" | |
| elif ret == -2: | |
| result = "init error!" | |
| elif ret == 0: | |
| result = "image2: no face detected!" | |
| status = "ok" | |
| response = jsonify({"status": status, "data": {"result": result}}) | |
| response.status_code = 200 | |
| response.headers["Content-Type"] = "application/json; charset=utf-8" | |
| return response | |
| similarity = ttv_compare_feature(feature1, feature2) | |
| if similarity > 0.7: | |
| result = "same" | |
| else: | |
| result = "different" | |
| status = "ok" | |
| response = jsonify( | |
| { | |
| "status": status, | |
| "data": { | |
| "result": result, | |
| "similarity": float(similarity), | |
| "face1": {"x1": int(faceRect1[0]), "y1": int(faceRect1[1]), "x2": int(faceRect1[2]), "y2" : int(faceRect1[3])}, | |
| "face2": {"x1": int(faceRect2[0]), "y1": int(faceRect2[1]), "x2": int(faceRect2[2]), "y2" : int(faceRect2[3])}, | |
| } | |
| }) | |
| response.status_code = 200 | |
| response.headers["Content-Type"] = "application/json; charset=utf-8" | |
| return response | |
| def coompare_face_base64(): | |
| content = request.get_json() | |
| imageBase641 = content['image1'] | |
| image1 = cv2.imdecode(np.frombuffer(base64.b64decode(imageBase641), dtype=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 | |
| imageBase642 = content['image2'] | |
| image2 = cv2.imdecode(np.frombuffer(base64.b64decode(imageBase642), dtype=np.uint8), cv2.IMREAD_COLOR) | |
| if image2 is None: | |
| result = "image2: 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 | |
| faceRect1 = np.zeros([4], dtype=np.int32) | |
| feature1 = np.zeros([2048], dtype=np.uint8) | |
| featureSize1 = np.zeros([1], dtype=np.int32) | |
| ret = ttv_extract_feature(image1, image1.shape[1], image1.shape[0], faceRect1, feature1, featureSize1) | |
| if ret <= 0: | |
| if ret == -1: | |
| result = "license error!" | |
| elif ret == -2: | |
| result = "init error!" | |
| elif ret == 0: | |
| result = "image1: no face detected!" | |
| status = "ok" | |
| response = jsonify({"status": status, "data": {"result": result}}) | |
| response.status_code = 200 | |
| response.headers["Content-Type"] = "application/json; charset=utf-8" | |
| return response | |
| faceRect2 = np.zeros([4], dtype=np.int32) | |
| feature2 = np.zeros([2048], dtype=np.uint8) | |
| featureSize2 = np.zeros([1], dtype=np.int32) | |
| ret = ttv_extract_feature(image2, image2.shape[1], image2.shape[0], faceRect2, feature2, featureSize2) | |
| if ret <= 0: | |
| if ret == -1: | |
| result = "license error!" | |
| elif ret == -2: | |
| result = "init error!" | |
| elif ret == 0: | |
| result = "image2: no face detected!" | |
| status = "ok" | |
| response = jsonify({"status": status, "data": {"result": result}}) | |
| response.status_code = 200 | |
| response.headers["Content-Type"] = "application/json; charset=utf-8" | |
| return response | |
| similarity = ttv_compare_feature(feature1, feature2) | |
| if similarity > 0.7: | |
| result = "same" | |
| else: | |
| result = "different" | |
| status = "ok" | |
| response = jsonify( | |
| { | |
| "status": status, | |
| "data": { | |
| "result": result, | |
| "similarity": float(similarity), | |
| "face1": {"x1": int(faceRect1[0]), "y1": int(faceRect1[1]), "x2": int(faceRect1[2]), "y2" : int(faceRect1[3])}, | |
| "face2": {"x1": int(faceRect2[0]), "y1": int(faceRect2[1]), "x2": int(faceRect2[2]), "y2" : int(faceRect2[3])}, | |
| } | |
| }) | |
| 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) | |