# -*- 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)