OpenVino导入错误:未定义的符号:_ZTVN15InferenceEngine5TBlobIhSt9enable_ifILb1EvEEE

3
在部署中使用OpenVino时遇到导入错误。尝试在requirements.txt文件中指定先前所有版本的OpenVino,以防问题与版本有关。确切的错误为:
File "/app/.heroku/python/lib/python3.8/site-packages/openvino/inference_engine/__init__.py", line 29, in <module>
2022-01-11T03:31:36.967769+00:00 app[web.1]: from .ie_api import *
2022-01-11T03:31:36.967828+00:00 app[web.1]: ImportError: /app/.heroku/python/lib/python3.8/site-packages/openvino/inference_engine/ie_api.cpython-38-x86_64-linux-gnu.so: undefined symbol: _ZTVN15InferenceEngine5TBlobIhSt9enable_ifILb1EvEEE

我不确定这个错误的性质是什么。它可能是依赖项的问题吗?完整的 requirements.txt 文件如下:

anyio
asgiref
astroid
azure-common
azure-core
azure-identity
azure-keyvault-secrets
certifi
cffi
charset-normalizer
click
cryptography
fastapi
h11
idna
isodate
isort
lazy-object-proxy
mccabe
msal
msal-extensions
msrest
oauthlib
opencv-python-inference-engine
openvino
platformdirs
portalocker
pycparser
pydantic
PyJWT
pylint
python-multipart
requests
requests-oauthlib
six
sniffio
starlette
toml
typing-extensions
urllib3
uvicorn
wrapt

还有一个包含以下内容的 Aptfile:

libpython3.8

而 runtime.txt 文件包含:

python-3.8.12

如果有用的话,我也尝试过从依赖项中删除Numpy,因为我听说Numpy和OpenVino相关的错误。

更新*

有趣的是,当在requirements.txt中将opencv-python-inference-engine替换为opencv-python-headless时,错误会改变:

cv2.error: OpenCV(4.5.5) /io/opencv/modules/dnn/src/dnn.cpp:4319: error: (-2:Unspecified error) Build OpenCV with Inference Engine to enable loading models from Model Optimizer. in function 'readFromModelOptimizer'

我认为错误可能与opencv的导入有关,或者可能与构建包有关?

对于推断,我正在使用:

    im_cv = cv.imread(tmp_path_str)

    frame = cv.cvtColor(im_cv, cv.COLOR_RGB2BGR)

    blob = cv.dnn.blobFromImage(frame, size=(180,180), ddepth=cv.CV_8U)

    net.setInput(blob)

    out = net.forward()
1个回答

1

当使用cv2.dnn.readNet()加载Intermediate Representation (IR)文件时,我遇到了同样的错误。

请使用以下命令来加载IR文件:

from openvino.inference_engine import IECore

ie = IECore()

net = ie.read_network(“xml_file”, “bin_file”)

非常感谢。关于推理,例如net.setInput(blob)等,您怎么做?还使用out = net.forward()。自从使用ie.read_network而不是原始的cv2.dnn.readNet()加载它后,这些属性setInput和forward不再适用于net对象。在问题中添加了更多代码。一如既往地感谢您的建议。也在文档中尝试查找。 - Tekame1
1
啊,经过你的修复,我通过使用ie.load_network()创建exec_net对象,然后使用exec_net.infer解决了上一条评论中的问题!非常感谢! - Tekame1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接