最近捣腾了一下windows版的openvino,发现这玩意有坑,不过网上踩坑的好像不多,相关的信息也较少。
事情是这样的,一开始我去官网下载exe安装包,具体的选择如下,
安装之后会存在指定的文件夹中,
并在这个文件夹中找到Intel\openvino_2021\deployment_tools\model_optimizer\install_prerequisites这个路径,在该路径下有几个bat文件
这几个bat文件就是帮你配置环境的,我用的是onnx所以控制台运行的是install_prerequisites_onnx.bat,运行完之后在\Intel\openvino_2021\bin这个路径下的bat文件也要在控制台运行,
运行完了会和你说环境初始化完成。
但是实际上运行的时候还是会报错,提示:ImportError: DLL load failed while importing ie_api: 找不到指定的模块。
Traceback (most recent call last):
File "F:/DLproject/YOLOX-main/demo/OpenVINO/python/openvino_inference.py", line 15, in
from openvino.inference_engine import IECore
File "E:\ProgramData\Anaconda3\envs\yolo\lib\site-packages\openvino\inference_engine\__init__.py", line 31, in
from .ie_api import *
ImportError: DLL load failed while importing ie_api: 找不到指定的模块。
然后上网一通找,基本操作就是按上面的再来一遍,我再来一遍之后还是报同样的错。在环境变量中添加项目路径也还是找不到这个指定模块。
之后根据官方的pip方式,在自己的环境下运行下列指令:
python -m pip install --upgrade pip
pip install openvino
pip install openvino-dev[onnx]==2021.4.2
不出意外的还是出意外了,还是和上面的错误一样,最后无奈,路径问题就是比较麻烦,只能改一下代码
在__init__.py文件中的对应位置加上:
os.environ['PATH'] = os.path.abspath(lib_path) + ';' + os.environ['PATH']
具体如下:
# -*- coding: utf-8 -*-
# Copyright (C) 2018-2021 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
import os
import sys
if sys.platform == 'win32':
# Installer, yum, pip installs openvino dlls to the different directories
# and those paths need to be visible to the openvino modules
#
# If you're using a custom installation of openvino,
# add the location of openvino dlls to your system PATH.
#
# looking for the libs in the pip installation path by default.
openvino_libs = [os.path.join(os.path.dirname(__file__), '..', '..', 'openvino', 'libs')]
# setupvars.bat script set all libs paths to OPENVINO_LIB_PATHS environment variable.
openvino_libs_installer = os.getenv('OPENVINO_LIB_PATHS')
if openvino_libs_installer:
openvino_libs.extend(openvino_libs_installer.split(';'))
for lib in openvino_libs:
lib_path = os.path.join(os.path.dirname(__file__), lib)
if os.path.isdir(lib_path):
# On Windows, with Python >= 3.8, DLLs are no longer imported from the PATH.
if (3, 8) <= sys.version_info:
os.add_dll_directory(os.path.abspath(lib_path))
# 加上这句
os.environ['PATH'] = os.path.abspath(lib_path) + ';' + os.environ['PATH']
else:
os.environ['PATH'] = os.path.abspath(lib_path) + ';' + os.environ['PATH']
from .ie_api import *
__all__ = ['IENetwork', 'TensorDesc', 'IECore', 'Blob', 'PreProcessInfo', 'get_version']
__version__ = get_version() # type: ignore
之后问题解决,可以正常进行模型推理。
推理时的日志信息