105 lines
3.2 KiB
Python
105 lines
3.2 KiB
Python
# -*- coding:utf-8 -*-
|
|
from traceback import format_exc
|
|
from ahserver.serverenv import ServerEnv
|
|
from appPublic.registerfunction import RegisterFunction
|
|
from appPublic.log import exception
|
|
import json
|
|
|
|
|
|
async def status_handler(request, params_kw, *args, **kwargs):
|
|
import sys, os
|
|
sys.path.insert(0, os.getcwd())
|
|
from workers.face_model import health_check
|
|
health = health_check()
|
|
return json.dumps({
|
|
"service": "face-service",
|
|
"model": health["model"],
|
|
"model_loaded": health["loaded"],
|
|
"det_size": health["det_size"],
|
|
"endpoints": ["/api/status", "/api/detect", "/api/recognize", "/api/compare"]
|
|
}, indent=2, ensure_ascii=False)
|
|
|
|
|
|
async def detect_handler(request, params_kw, *args, **kwargs):
|
|
import sys, os, time
|
|
sys.path.insert(0, os.getcwd())
|
|
from workers.face_model import detect
|
|
try:
|
|
images = params_kw.get("images", [])
|
|
if not images:
|
|
return json.dumps({"error": "images list required"})
|
|
|
|
start = time.time()
|
|
all_results = []
|
|
for img in images:
|
|
result = detect(img)
|
|
all_results.append(result)
|
|
elapsed = round(time.time() - start, 4)
|
|
|
|
return json.dumps({
|
|
"status": "SUCCEEDED",
|
|
"results": all_results,
|
|
"elapsed": elapsed
|
|
}, ensure_ascii=False)
|
|
except Exception as e:
|
|
exception(f"{e}, {format_exc()}")
|
|
return json.dumps({"error": str(e)})
|
|
|
|
|
|
async def recognize_handler(request, params_kw, *args, **kwargs):
|
|
import sys, os, time
|
|
sys.path.insert(0, os.getcwd())
|
|
from workers.face_model import recognize
|
|
try:
|
|
images = params_kw.get("images", [])
|
|
if not images:
|
|
return json.dumps({"error": "images list required"})
|
|
|
|
start = time.time()
|
|
all_results = []
|
|
for img in images:
|
|
result = recognize(img)
|
|
all_results.append(result)
|
|
elapsed = round(time.time() - start, 4)
|
|
|
|
return json.dumps({
|
|
"status": "SUCCEEDED",
|
|
"results": all_results,
|
|
"elapsed": elapsed
|
|
}, ensure_ascii=False)
|
|
except Exception as e:
|
|
exception(f"{e}, {format_exc()}")
|
|
return json.dumps({"error": str(e)})
|
|
|
|
|
|
async def compare_handler(request, params_kw, *args, **kwargs):
|
|
import sys, os
|
|
sys.path.insert(0, os.getcwd())
|
|
from workers.face_model import compare
|
|
try:
|
|
embedding1 = params_kw.get("embedding1")
|
|
embedding2 = params_kw.get("embedding2")
|
|
|
|
if not embedding1 or not embedding2:
|
|
return json.dumps({"error": "embedding1 and embedding2 required"})
|
|
|
|
result = compare(embedding1, embedding2)
|
|
|
|
return json.dumps({
|
|
"status": "SUCCEEDED",
|
|
**result
|
|
}, ensure_ascii=False)
|
|
except Exception as e:
|
|
exception(f"{e}, {format_exc()}")
|
|
return json.dumps({"error": str(e)})
|
|
|
|
|
|
def load_face_service():
|
|
"""Register API handlers"""
|
|
env = ServerEnv()
|
|
rf = RegisterFunction()
|
|
rf.register("status", status_handler)
|
|
rf.register("detect", detect_handler)
|
|
rf.register("recognize", recognize_handler)
|
|
rf.register("compare", compare_handler)
|