mirror of
https://github.com/hacksider/Deep-Live-Cam.git
synced 2026-07-25 11:30:51 +02:00
fix: resolve OpenVINO DLL loading on Windows for OpenVINOExecutionProvider
- Add add_openvino_libs_to_path() call in run.py before any ONNX InferenceSession creation to register openvino.dll directory - Detect and advertise OpenVINOExecutionProvider in platform_info banner and accelerator label - Prioritize openvino over dml in suggest_default_execution_provider - Configure OpenVINO EP with GPU + FP16 device options for optimal performance (~13 FPS on Intel GPU vs ~1 FPS CPU fallback) - Set thread hint to 1 when OpenVINO EP is active
This commit is contained in:
+4
-2
@@ -132,9 +132,9 @@ def suggest_max_memory() -> int:
|
||||
|
||||
|
||||
def suggest_default_execution_provider() -> str:
|
||||
"""Pick the best available provider: cuda > rocm > coreml > dml > cpu."""
|
||||
"""Pick the best available provider: cuda > rocm > coreml > openvino > dml > cpu."""
|
||||
available = encode_execution_providers(onnxruntime.get_available_providers())
|
||||
for pref in ('cuda', 'rocm', 'coreml', 'dml'):
|
||||
for pref in ('cuda', 'rocm', 'coreml', 'openvino', 'dml'):
|
||||
if pref in available:
|
||||
return pref
|
||||
return 'cpu'
|
||||
@@ -157,6 +157,8 @@ def suggest_execution_threads() -> int:
|
||||
return 1
|
||||
if 'CUDAExecutionProvider' in modules.globals.execution_providers:
|
||||
return 2
|
||||
if 'OpenVINOExecutionProvider' in modules.globals.execution_providers:
|
||||
return 1
|
||||
|
||||
# For CPU execution, use most cores but leave some for system
|
||||
return max(4, min(cpu_count - 2, 16))
|
||||
|
||||
@@ -40,6 +40,7 @@ ONNX_PROVIDERS: List[str] = _detect_onnx_providers()
|
||||
HAS_CUDA_PROVIDER: bool = "CUDAExecutionProvider" in ONNX_PROVIDERS
|
||||
HAS_COREML_PROVIDER: bool = "CoreMLExecutionProvider" in ONNX_PROVIDERS
|
||||
HAS_DML_PROVIDER: bool = "DmlExecutionProvider" in ONNX_PROVIDERS
|
||||
HAS_OPENVINO_PROVIDER: bool = "OpenVINOExecutionProvider" in ONNX_PROVIDERS
|
||||
|
||||
|
||||
def camera_backends() -> List[Tuple[int, int]]:
|
||||
@@ -65,6 +66,8 @@ def accelerator_label() -> str:
|
||||
return "CoreML (Apple Neural Engine)"
|
||||
if HAS_COREML_PROVIDER:
|
||||
return "CoreML"
|
||||
if HAS_OPENVINO_PROVIDER:
|
||||
return "OpenVINO (Intel)"
|
||||
if HAS_DML_PROVIDER:
|
||||
return "DirectML"
|
||||
return "CPU"
|
||||
|
||||
@@ -50,6 +50,14 @@ def build_provider_config(providers=None):
|
||||
"AllowLowPrecisionAccumulationOnGPU": 1,
|
||||
},
|
||||
))
|
||||
elif p == "OpenVINOExecutionProvider":
|
||||
# Prefer Intel GPU with FP16 precision when available.
|
||||
# NB: GPU_FP16 is deprecated since OpenVINO 2025.4 — use
|
||||
# device_type="GPU" + precision="FP16" instead.
|
||||
config.append((
|
||||
"OpenVINOExecutionProvider",
|
||||
{"device_type": "GPU", "precision": "FP16"},
|
||||
))
|
||||
else:
|
||||
config.append(p)
|
||||
return config
|
||||
|
||||
@@ -270,6 +270,11 @@ def get_face_swapper() -> Any:
|
||||
# Use bare provider — ONNX Runtime defaults are
|
||||
# fastest on modern GPUs (Blackwell/sm_120).
|
||||
providers_config.append(p)
|
||||
elif p == "OpenVINOExecutionProvider":
|
||||
providers_config.append((
|
||||
"OpenVINOExecutionProvider",
|
||||
{"device_type": "GPU", "precision": "FP16"},
|
||||
))
|
||||
else:
|
||||
providers_config.append(p)
|
||||
FACE_SWAPPER = insightface.model_zoo.get_model(
|
||||
|
||||
@@ -31,6 +31,17 @@ if sys.platform == "win32":
|
||||
except (OSError, AttributeError):
|
||||
pass
|
||||
|
||||
# On Windows, register OpenVINO DLL directories so onnxruntime's
|
||||
# OpenVINOExecutionProvider can find openvino.dll. This must happen
|
||||
# before any ONNX InferenceSession is created.
|
||||
try:
|
||||
from onnxruntime.tools.add_openvino_win_libs import ( # type: ignore[import-untyped] # noqa: E501
|
||||
add_openvino_libs_to_path,
|
||||
)
|
||||
add_openvino_libs_to_path()
|
||||
except (ImportError, FileNotFoundError):
|
||||
pass # OpenVINO not installed — no-op
|
||||
|
||||
# On Linux, pre-load NVIDIA shared libraries (cuDNN, cuBLAS, nvrtc...) shipped
|
||||
# inside the venv via pip wheels (nvidia-cudnn-cu12, etc.). LD_LIBRARY_PATH
|
||||
# cannot be set after Python starts, so we use ctypes.CDLL with RTLD_GLOBAL
|
||||
|
||||
Reference in New Issue
Block a user