"""FastAPI 入口""" from __future__ import annotations import sys from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from loguru import logger from app import __version__ from app.api.routes import router from app.config import settings from app.core import warmup def _setup_logging(): logger.remove() logger.add( sys.stdout, level=settings.log_level, format="{time:HH:mm:ss} | {level:<7} | {message}", colorize=True, ) def create_app() -> FastAPI: _setup_logging() app = FastAPI( title="ry-ocr", description="本地发票识别服务(PaddleOCR + FastAPI)", version=__version__, docs_url="/docs", redoc_url="/redoc", ) app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"], ) app.include_router(router) @app.on_event("startup") def _startup(): logger.info("ry-ocr v{} 启动中...", __version__) # 启动预热 OCR(首次 predict 较慢,提前触发) warmup() logger.info("服务已就绪: http://{}:{}", settings.app_host, settings.app_port) return app app = create_app()