# -*- coding: utf-8 -*- """配送视频门头/交付时刻检测推理服务(ONNX + ASR)。""" import logging import os from fastapi import FastAPI from fastapi.responses import JSONResponse from pydantic import BaseModel from app.asr import asr_available from app.pipeline import get_registry, run_analyze from app.schemas import AnalyzeRequest, HealthResponse logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(name)s %(message)s") app = FastAPI(title="snapshot-infer", version="2.0.0") def _camel_json(model: BaseModel) -> JSONResponse: return JSONResponse(content=model.model_dump(by_alias=True, exclude_none=True)) @app.get("/health") def health(): reg = get_registry() body = HealthResponse( status="ok" if reg.ready else "degraded", model_version=reg.version, onnx_storefront_loaded=reg.storefront.loaded if reg.storefront else False, onnx_handover_loaded=reg.handover.loaded if reg.handover else False, asr_available=asr_available(), ) return _camel_json(body) @app.post("/analyze") def analyze(req: AnalyzeRequest): return _camel_json(run_analyze(req))