今までも何度もOpenCVをラズパイにインストールしてきましたが、今回もまたインストールしていきます。
Raspberry Pi OSになって初めてインストールするのと、実際にインストールして色々問題が発生したりしたのでその備忘録です。
ちなみに流れとしては前に書いた記事の通りです。
rikoubou.hatenablog.com
また今回は「Raspberry Pi OS (32-bit) with desktop and recommended software」という全部入りのOSで行う前提で進めていくので注意してください。
では始めます。
1:pip3でOpenCVをインストールする
Raspberry Pi OS (32-bit) with desktop and recommended softwareの場合、最初からpython3とpip3が入っているのでOpenCVをインストールするだけです。
LXTerminalを立ち上げて以下のコマンドを入力するだけでOpenCVをインストールできます。
$ pip3 install opencv-python
ちゃんとインストールできているかの確認はpython3を起動させて以下のコマンドを実行します。
$ python3 Python 3.7.3 (default, Dec 20 2019, 18:57:59) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import cv2 >>> >>>exit()
これでエラーが出ていなければOpenCVが使えるようになっています。
2:import cv2でエラーが発生したときの対処方法
以前の記事に書いてあることと同じですが、import cv2で以下のようなエラーが発生する場合があります。
ImportError: libjasper.so.1: cannot open shared object file: No such file or directory
これはlibjasperというライブラリがないというエラーなのでlibjasperを入れていきます。またその他にも追加で入れないといけないライブラリがあります。環境などで変わることもあるかと思いますが、基本的に以下の3つのコマンドを実行していけば必要なライブラリはすべて揃うはずです。
$ sudo apt-get install libatlas-base-dev $ sudo apt-get install libjasper-dev $ sudo apt-get install libqt4-test
上記のライブラリを入れ終わったらもう一度python3を立ち上げてimport cv2を実行してみてください。
3:import cv2で2とは別のエラーが発生した場合
ライブラリが足りないではなく、別のエラーが出る場合があります。
$ python3 Python 3.7.3 (default, Dec 20 2019, 18:57:59) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import cv2 Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/pi/.local/lib/python3.7/site-packages/cv2/__init__.py", line 3, in <module> from .cv2 import * ImportError: /home/pi/.local/lib/python3.7/site-packages/cv2/cv2.cpython-37m-arm-linux-gnueabihf.so: undefined symbol: __atomic_fetch_add_8
いまいちよくわからないエラーですが、調べるとpython3を実行する際に以下のコマンドでとあるライブラリを先に読み込んでおくと出なくなります。
$ LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libatomic.so.1 python3 Python 3.7.3 (default, Dec 20 2019, 18:57:59) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import cv2 >>> cv2.__version__ '4.1.1' >>>
単に最新版のOpenCVを使いたい場合はこれで良いですが、起動時に毎回ライブラリを読み込むコマンドを入れるのは面倒です。
なのでこのエラーが出ないバージョンのOpenCVをインストールすることにします。
以下のコマンドを実行して現在インストールされているバージョンのOpenCVをアンインストールします。
$ pip3 uninstall opencv-python
ちなみに2020/06/11現在では、最新版は4.1.1.26でした。このバージョンだと自分の環境ではエラーが出たことになります。
Uninstalling opencv-python-4.1.1.26: Would remove: /home/pi/.local/lib/python3.7/site-packages/cv2/* /home/pi/.local/lib/python3.7/site-packages/opencv_python-4.1.1.26.dist-info/* Proceed (y/n)? y Successfully uninstalled opencv-python-4.1.1.26
続いてインストールできるOpenCVのバージョンを確認します。pipでインストールできるバージョンを確認するには存在しないバージョン番号を入力すれば確認できます。
例えば0.0というバージョンはほぼどのライブラリにも存在しないはずなので、以下のコマンドを実行します。
$ pip3 install opencv-python==0.0
実際に実行すると以下のようになります。番号が存在するバージョンだけインストールできます。
$ pip3 install opencv-python==0.0 Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Collecting opencv-python==0.0 Could not find a version that satisfies the requirement opencv-python==0.0 (from versions: 3.4.2.16, 3.4.2.17, 3.4.3.18, 3.4.4.19, 3.4.6.27, 3.4.7.28, 4.0.1.24, 4.1.0.25, 4.1.1.26) No matching distribution found for opencv-python==0.0
最新版の「4.1.1.26」がエラーが出てしまうのでそのひとつ前の「4.1.0.25」を入れてみます。
$ pip3 install opencv-python==4.1.0.25
実際に実行して「4.1.0.25」をインストールした後、python3でimport cv2を試してみると以下のようにエラーが出なくなりました。
$ pip3 install opencv-python==4.1.0.25 Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Collecting opencv-python==4.1.0.25 Using cached https://www.piwheels.org/simple/opencv-python/opencv_python-4.1.0.25-cp37-cp37m-linux_armv7l.whl Requirement already satisfied: numpy>=1.16.2 in /usr/lib/python3/dist-packages (from opencv-python==4.1.0.25) (1.16.2) Installing collected packages: opencv-python Successfully installed opencv-python-4.1.0.25 $ python3 Python 3.7.3 (default, Dec 20 2019, 18:57:59) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import cv2 >>> cv2.__version__ '4.1.0' >>>
いくつかのバージョンをインストールして試したところ、自分の環境では以下のような結果になりました。
- エラー有:3.4.7.28、4.1.1.26
- エラー無:4.0.1.24、4.1.0.25
何が原因なのかはわかりませんが、バージョンによってライブラリをあらかじめ読み込んでおかないといけなくなる場合があるので、最新版にこだわりがなければエラーが出ないバージョンを選択するというのも有りかなと思います。
以上がRaspberry Pi 4のRaspberry Pi OSにOpenCV環境を構築する方法です。
今までにないエラーが発生したりと色々面倒なところもありますが、とりあえずRaspberry Pi 4にOpenCVの環境ができたので色々遊んでいきたいです。
・参考資料