2018年8月27日月曜日

画像処理の演習を Python3 用の OpenCV3 / OpenCV4 で実行する方法

0. はじめに

Pythonにはバージョン2 (Python2) とバージョン3 (Python3)の2系統があります。本書のプログラムは、原則的に両方のバージョンで実行できるように記述しています。

しかし、画像処理に用いるライブラリOpenCVだけは、Python2用とPython3用のインストール方法が全く異なることから、Python2での利用に限定していました。2018年8月の時点のRaspbian Stretchで、Pythonがバージョン2.7.13、OpenCVはバージョン2.4.9.1でした。

しかし、Python3でOpenCVを用いる方法が容易になってきましたので、Python3で本書のOpenCVを用いたプログラムを実行する方法をここで紹介することにしました。以下のインストール方法は2020年3月に確認しました。

1. 準備

まず、本書の10章までにインストールした各種ツールをPython3用にあらかじめインストールしておきます。下記の3つの命令を順に実行します。
sudo apt update
sudo apt install python3-sklearn python3-pil.imagetk mpg321 liblapack-dev libhdf5-dev python3-h5py
sudo pip3 install keras==2.3.1 theano
このあとは、用いているOSと利用したいOpenCVのバージョンによりコマンドが分かれます。

2. Rasppbian Buster または Bullseye + Python3 + OpenCV3 の場合

Raspbian Buster または Bullseye をお使いの場合、apt コマンドでインストールできるOpenCV3をインストールするのが最も簡単ですのでお勧めです。

下記のようにOpenCVをインストールします。
sudo apt install python3-opencv
以上で、Python3 用の OpenCV のインストールが終わりました。

2019年6月の時点で、Python3はバージョン3.7.3、OpenCV はバージョン3.2.0となりました。

3. Rasppbian Buster + Python3 + OpenCV4 の場合

Raspbian Busterをお使いの場合、pip3 コマンドでインストールするとOpenCV4がインストールされます。インストール中のネットワークトラブルによるエラーが多いので、上級者向けと考えています。

まず、必要なパッケージをインストールします。
sudo apt install libatlas-base-dev libjasper-dev libqtgui4 libqt4-test
最後に、Python3 用の OpenCV4 をインストールします。
sudo pip3 install opencv-python==4.5.1.48
最後に、以下のコマンドを実行します。それが終わったらRaspberry Piを再起動します。
echo "export LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libatomic.so.1" >> ~/.bashrc
以上で、Python3 用の OpenCV4 のインストールが終わりました。

なお、OpenCVのバージョンを 4.5.1.48 に指定している理由は、それ以降(4.5.3 など) では NumPy の新しいバージョン (1.21 など) を要求されるためです。
NumPy 1.20 以降では、機械学習用のライブラリ TensorFlow 2.x の動作に問題が出る場合があるため、Numpy 1.19 で使える OpenCV 4.5.1.48 を指定しているのです。
TensorFlow 2.x を使わない場合は OpenCV のバージョン指定は不要ですが、利用は自己責任でお願いします。

なお、Raspberry Piでのpip(pip3)を用いたツールのインストールは、ネットワークのトラブルにより失敗することが多いようです。例えば、pip(pip3)コマンドを実行したときに下記のような40行程度のエラーが出ることがあります。
Exception:
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
(中略)
  File "/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl/urllib3/util/retry.py", line 315, in increment
    total -= 1
TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'
これは、インストール時のネットワークに問題があるときに出るエラーです。 Raspberry Piがネットワークに接続していないとき、および、ファイルのダウンロード元であるサーバーに問題があるときの両方で上記エラーが出ます。
あるいは、同様のエラーで
THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE.
と出る場合もあります。

Raspberry Piのネットワーク接続に問題がある場合はその改善を試みてください。
一方、先方のサーバーに問題がある場合、時間をあけてからコマンドを再実行すると問題が解消される場合があります。Raspberry Pi上でpipを用いてツールをインストールする場合、サーバー側の問題なのか、何度もインストールを試みて初めてインストールに成功する、ということが多い印象があります。

4. Rasppbian Stretch + Python3 + OpenCV4 の場合

Raspbian Stretch上のPython3でOpenCV4を用いたい場合、以下のようにします。

まず、必要なパッケージをインストールします。
sudo apt install libatlas-base-dev libjasper-dev libqtgui4 python3-pyqt5 libqt4-test
次に、Python3 用の OpenCV4 をインストールします。
sudo pip3 install opencv-python
以上で、Python3 用の OpenCV4 のインストールが終わりました。

0 件のコメント:

コメントを投稿