環境
- Ubuntu:
18.04.6 LTS
- Python:
3.9.13
- Pipenv:
version 2022.4.20
- opencv-pythonの最新バージョン:
4.6.0.66
問題
-
from cv2 import dnn_superres
をしようとするとImportError: cannot import name 'dnn_superes' from 'cv2'
と怒られる - モジュールのアンイストールとかをごちゃごちゃやっていると
cv2
のほうでエラー発生AttributeError: partially initialized module 'cv2' has no attribute 'gapi_wip_gst_GStreamerPipeline' (most likely due to a circular import)
- バージョンを
4.5.5.64
に下げるといいという投稿に従ってやっても直らず-
cv2
のエラーはなくなったが、ImportError: cannot import name 'dnn_superes' from 'cv2'
が再度出る
-
- 別の
easyocr
というパッケージをインストールした場合もエラー
原因
- opencv系のパッケージは4つあり、そのうち1つのみをインストールすることになっている
-
opencv-python
,opencv-python-headless
,opencv-contrib-python
,opencv-contrib-python-headless
-
- しかし他のパッケージで別のopencv系のパッケージを利用していると、その環境下で複数のopencv系のパッケージを利用していることになってしまう
- 例:
easyocr
- 例:
- おそらくユーザが
import cv2
などで呼び出しているのは、最後にインストールしたopencv系のパッケージ- contribインストール後に別のopencv系のパッケージがインストールされるとエラー
-
from cv2 import dnn_superres
->ImportError: cannot import name 'dnn_superres' from 'cv2'
- opencv系のパッケージ間でバージョンが異なる?とエラー
-
import cv2
->AttributeError: partially initialized module 'cv2' has no attribute 'gapi_wip_gst_GStreamerPipeline'
- (もしかしたら特定のバージョン利用によるエラーかもしれない)
-
解決法
- 環境を作り直す
- このときopencvに関連するパッケージはインストールしない
- opencv系のパッケージを利用してるパッケージを先にインストール
-
pip show <package-name
のRequires:
の欄を確認
-
- 利用されているopencv系のパッケージを最新にアップデートしておく
-
pipenv install opencv-python-headless==4.6.0.66
(pip install opencv-python-headless==4.6.0.66
) - (どれがインストールされているかわからないときは、とりあえず
pip show
で4つのopencv系パッケージを調べ、インストールされていてバージョンが古いものをアップデートしておけばOK)
-
- opencv-contrib-pythonをインストール
-
pipenv install opencv-contrib-python==4.6.0.66
(pip install opencv-contrib-python==4.6.0.66
)
-
(今後opencv系のパッケージを利用しているパッケージをインストールし、新しくopencvがインストール・アップデートされた場合は、再度3・4を実行する)