小背景
周四晚上發(fā)現(xiàn)之前寫的程序不能用了,不知道是系統(tǒng)中使用了bootstrap的原因還是什么。為了方便,我把系統(tǒng)也放在了和之前做實(shí)驗(yàn)的conda環(huán)境。一開始不管算法還是系統(tǒng)都可以使用,但就那天晚上說部署一下Django項(xiàng)目,順便再測(cè)一下代碼(周日抽檢,需要準(zhǔn)備初稿,程序和PPT),結(jié)果就用不了了。晚上沒有解決,周五上午早起花費(fèi)1h左右解決了問題。特此記錄一下排坑日記,因?yàn)閾?dān)心未來可能還會(huì)遇到相同或者類似的bug。
報(bào)錯(cuò)一
RuntimeError: module compiled against API version 0xb but this version of numpy is 0xa
Traceback (most recent call last):
File "xxx.py", line 1, in <module>
import cv2
File "/xxx/xxx/miniconda3/envs/xxx/lib/python3.6/site-packages/cv2/__init__.py", line 181, in <module>
bootstrap()
File "/xxx/xxx/miniconda3/envs/xxx/lib/python3.6/site-packages/cv2/__init__.py", line 153, in bootstrap
native_module = importlib.import_module("cv2")
File "xxx/xxx/miniconda3/envs/xxx/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ImportError: numpy.core.multiarray failed to import
(報(bào)錯(cuò)中的xxx代表一些個(gè)人信息或者代碼)首先一開始我看到bootstrap整個(gè)人是懵逼的,以為是bootstrap中有同名的cv2,后來發(fā)現(xiàn)不是。關(guān)于報(bào)錯(cuò)內(nèi)容解釋如下: RuntimeError: module compiled against API version 0xb but this version of numpy is 0xa Traceback (most recent call last)
是說OpenCV和Numpy版本不匹配。最后一行的ImportError: numpy.core.multiarray failed to import
大概意思是說有多個(gè)版本的Numpy包。
如果是因?yàn)槎鄠€(gè)版本的Numpy包問題,直接卸掉不用的版本即可。使用 pip show numpy
,我個(gè)人的結(jié)果顯示只有一個(gè)1.19.5版本的,所以這個(gè)問題排除。關(guān)鍵問題出現(xiàn)在版本不匹配上,解決過程如下:
按照網(wǎng)上教程又裝了一遍 opencv contrib
,OpenCV和OpenCV Contrib的主要區(qū)別是OpenCV Contrib包含了一些不是在OpenCV核心庫中實(shí)現(xiàn)的功能,例如深度學(xué)習(xí)框架的支持、面部識(shí)別、三維重建等等。控制臺(tái)的輸出信息出現(xiàn)了 numpy>=1.13.3
字樣,其實(shí)已經(jīng)安裝好的1.19.5是滿足該要求的,但我還是降了版本。
pip install -U numpy==1.13.3
該命令將之前的版本卸載掉然后重新安裝1.13.3版本
報(bào)錯(cuò)二
降版本后,運(yùn)行程序,依舊報(bào)錯(cuò),報(bào)錯(cuò)內(nèi)容如下:
Traceback (most recent call last):
File "xxx.py", line 1, in <module>
import cv2; print(cv2.getBuildInformation())
File "/xxx/xxx/miniconda3/envs/xxx/lib/python3.6/site-packages/cv2/__init__.py", line 181, in <module>
bootstrap()
File "/xxx/xxx/miniconda3/envs/xxx/lib/python3.6/site-packages/cv2/__init__.py", line 175, in bootstrap
if __load_extra_py_code_for_module("cv2", submodule, DEBUG):
File "/xxx/xxx/miniconda3/envs/xxx/lib/python3.6/site-packages/cv2/__init__.py", line 28, in __load_extra_py_code_for_module
py_module = importlib.import_module(module_name)
File "/xxx/mmfan/miniconda3/envs/xxx/lib/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "/xxx/xxx/miniconda3/envs/xxx/lib/python3.6/site-packages/cv2/gapi/__init__.py", line 301, in <module>
cv.gapi.wip.GStreamerPipeline = cv.gapi_wip_gst_GStreamerPipeline
AttributeError: module 'cv2' has no attribute 'gapi_wip_gst_GStreamerPipeline'
報(bào)錯(cuò)內(nèi)容不理解,之后使用降低OpenCV版本解決問題。
pip install opencv-python==4.5.5.64
運(yùn)行該命令后,輸出如下信息:
Looking in indexes: https://mirrors.aliyun.com/pypi/simple/
Collecting opencv-python==4.5.5.64
Downloading https://mirrors.aliyun.com/pypi/packages/67/50/665a503167396ad347957bea0bd8d5c08c865030b2d1565ff06eba613780/opencv_python-4.5.5.64-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (60.5 MB)
|████████████████████████████████| 60.5 MB 646 kB/s
Requirement already satisfied: numpy>=1.13.3; python_version < "3.7" in /xxx/xxx/miniconda3/envs/xxx/lib/python3.6/site-packages (from opencv-python==4.5.5.64) (1.13.3)
Installing collected packages: opencv-python
Attempting uninstall: opencv-python
Found existing installation: opencv-python 4.7.0.72
Uninstalling opencv-python-4.7.0.72:
Successfully uninstalled opencv-python-4.7.0.72
Successfully installed opencv-python-4.5.5.64
按照輸出的信息來看版本都符合要求:numpy = 1.13.3,python = 3.6,報(bào)錯(cuò)解決。
報(bào)錯(cuò)三
運(yùn)行程序,依舊報(bào)錯(cuò)……又是關(guān)于numpy版本的問題,報(bào)錯(cuò)內(nèi)容如下:
File "xxx.py", line 2, in <module>
import timm
File "/xxx/xxx/miniconda3/envs/xxx/lib/python3.6/site-packages/tim在這里插入代碼片m/__init__.py", line 2, in <module>
from .models import create_model, list_models, is_model, list_modules, model_entrypoint, \
File "/xxx/xxx/miniconda3/envs/xxx/lib/python3.6/site-packages/timm/models/__init__.py", line 1, in <module>
from .cspnet import *
File "/xxx/xxx/miniconda3/envs/xxx/lib/python3.6/site-packages/timm/models/cspnet.py", line 15, in <module>
import torch
File "/xxx/xxx/miniconda3/envs/xxx/lib/python3.6/site-packages/torch/__init__.py", line 190, in <module>
from torch._C import *
ModuleNotFoundError: No module named 'numpy.core._multiarray_umath'
報(bào)錯(cuò)表示該版本的numpy中沒有xxx模塊。很容易想到是因?yàn)榘姹具^低,可是上面的報(bào)錯(cuò)解決后都是符合要求的版本啊,但還是試著更新了一下Numpy,又從1.13.3—>1.19.5。
pip install --upgrade numpy
該命令會(huì)卸載掉1.13.3版本的Numpy,安裝最新版(我這里是1.19.5)。運(yùn)行程序,沒有報(bào)錯(cuò),成功運(yùn)行。文章來源:http://www.zghlxwxcb.cn/news/detail-449310.html
總結(jié)
上面的排坑過程說明Numpy版本本身是沒有問題的,問題在于OpenCV的版本太高了,兩者不匹配。所以降低其版本即可。至于為什么之前可以運(yùn)行,現(xiàn)在不行,尚不清楚原因,可能是在某個(gè)環(huán)節(jié)更新了一些版本。文章來源地址http://www.zghlxwxcb.cn/news/detail-449310.html
到了這里,關(guān)于解決OpenCV與Numpy版本不匹配問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!