Files
mingxi_platform/mingxi-vision/engine/loader.py
T

44 lines
1.4 KiB
Python
Raw Normal View History

import asyncio
from typing import Optional
from .base import BaseInferenceEngine
_engine: Optional[BaseInferenceEngine] = None
# 懒初始化,确保在事件循环启动后创建
_inference_lock: Optional[asyncio.Lock] = None
def get_engine() -> BaseInferenceEngine:
if _engine is None:
raise RuntimeError("推理引擎未初始化,请先调用 init_engine()")
return _engine
def get_inference_lock() -> asyncio.Lock:
global _inference_lock
if _inference_lock is None:
_inference_lock = asyncio.Lock()
return _inference_lock
def init_engine(model_path: str, runtime: str = "ultralytics") -> BaseInferenceEngine:
global _engine
if runtime == "onnx":
from .onnx_adapter import OnnxRuntimeAdapter
_engine = OnnxRuntimeAdapter(model_path)
else:
from .ultralytics_adapter import UltralyticsAdapter
_engine = UltralyticsAdapter(model_path)
print(f"[mingxi-vision] 加载模型: {model_path}")
_engine.warmup()
print(f"[mingxi-vision] 引擎就绪: {_engine.__class__.__name__} · {_engine.model_version}")
return _engine
def reload_engine(model_path: str, runtime: str = "ultralytics") -> BaseInferenceEngine:
"""热重载模型,调用方必须持有推理锁"""
global _engine
_engine = None # 释放旧引用,让 GC 回收显存
return init_engine(model_path, runtime)