はじめに
2022年8月時点で、Raspberry pi3にPython Opencvを設定しようとしたら、問題に遭遇して多くの時間を費やしたので、参考までに成功した手順を記録しておきます。
結論として、numpyのバージョン問題だったと思われます。
Raspberry pi3 アップデート後 のnumpy '1.19.5' を'1.23.2' にアップグレードすることで解決しました。
OSイメージの作成
OSのイメージは、Raspberry Pi Imager を使って作成しました。
イメージの作成、起動、ネットワークの設定を終えて、アップデート(約2時間ほどかかります)を行います。
Release 2.4 March 2022
すでにPython3, pip3はインストールされています。
- Debian 11.4
- Python 3.9.2 (default, Mar 12 2021, 04:06:34)
Opencv-Pythonのインストール
numpy opencvの状態を調べます。
pi@raspberrypi:~ $ python3
Python 3.9.2 (default, Mar 12 2021, 04:06:34)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.__version__
'1.19.5'
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'cv2'
>>>
numpy はインストールされているが opencvがインストールされていません。
opencvをインストールする前に、必要なライブラリをインストールします。今回下記のライブラリを追加しました。
sudo apt-get install libhdf5-dev libhdf5-serial-dev libatlas-base-dev -y
opencv-pthyonのインストール
本来次のコマンドでnumpy. opencvがpython3で使えるようになるはずですが、import cv2でエラーが発生します。
sudo pip3 install opencv-python
pi@raspberrypi:~ $ sudo pip3 install opencv-python
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting opencv-python
Downloading https://www.piwheels.org/simple/opencv-python/opencv_python-4.6.0.66-cp39-cp39-linux_armv7l.whl (11.3 MB)
|████████████████████████████████| 11.3 MB 19 kB/s
Requirement already satisfied: numpy>=1.14.5 in /usr/lib/python3/dist-packages (from opencv-python) (1.19.5)
Installing collected packages: opencv-python
Successfully installed opencv-python-4.6.0.66
import cv2で確認するとエラー
pi@raspberrypi:~ $ python3
Python 3.9.2 (default, Mar 12 2021, 04:06:34)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> import cv2
RuntimeError: module compiled against API version 0xf but this version of numpy is 0xd
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.9/dist-packages/cv2/__init__.py", line 181, in <module>
bootstrap()
File "/usr/local/lib/python3.9/dist-packages/cv2/__init__.py", line 153, in bootstrap
native_module = importlib.import_module("cv2")
File "/usr/lib/python3.9/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ImportError: numpy.core.multiarray failed to import
>>>
下記の方法で解決できました。
numpyの更新
pi@raspberrypi:~ $ pip3 install numpy --upgrade
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: numpy in /usr/lib/python3/dist-packages (1.19.5)
Collecting numpy
Downloading https://www.piwheels.org/simple/numpy/numpy-1.23.2-cp39-cp39-linux_armv7l.whl (12.3 MB)
|████████████████████████████████| 12.3 MB 56 kB/s
Installing collected packages: numpy
WARNING: The scripts f2py, f2py3 and f2py3.9 are installed in '/home/pi/.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed numpy-1.23.2
import cv2で確認
pi@raspberrypi:~ $ python3
Python 3.9.2 (default, Mar 12 2021, 04:06:34)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.__version__
'1.23.2'
>>> import cv2
>>> cv2.__version__
'4.6.0'
>>>
OK
opencv-conntrib-python のインストール
その後、必要に応じて、opencv-contribもインストールできます。
今回、上記の作業後 sudo pip2 install opencv-contrib-python を実行すると、インストールが終わらない状態になりました。
この記事を作成する前は、sudo pip2 install opencv-python opencv-contrib-python としてconrtribも同時にインストールできたのですが、今回別々だとできません。なぜか? なぞです。
追記
その後、opencv-contribのインストールについては、下記のバージョンでインストールに成功しました。
sudo pip3 install opencv-contrib-python==3.4.14.51
こちらは、インストールは瞬時に完了しました。
やはり、バージョンの問題だったのか...かなり時間がかかった。
参考文献
[NumPyとOpenCVのimportでエラーが出る件] https://qiita.com/thinknee/items/9489119c8b85d9323132
[ラズパイ(Raspberry Pi)へのOpenCVのインストール方法・手順] https://python-academia.com/raspberrypi-opencv/