0. はじめに
Pythonにはバージョン2 (Python2) とバージョン3 (Python3)の2系統があります。本書のプログラムは、原則的に両方のバージョンで実行できるように記述しています。しかし、画像処理に用いるライブラリOpenCVだけは、Python2での利用に限定していました。2018年8月の時点の Raspbian Stretch で言えば、Python がバージョン2.7.13、OpenCVはバージョン2.4.9.1でした。
これは、2015年の本書執筆時はPython3でOpenCVを用いる簡単な方法が見つからなかったためです。
しかし、Python3でOpenCVを用いる方法が容易になりつつあることから、Python3で本書のOpenCVを用いたプログラムを実行する方法をここで紹介することにしました。
1. 準備
まず、本書でもインストールしたlibopencv-devをあらかじめインストールしておきます。下記の2つの命令を順に実行します。sudo apt update sudo apt install libopencv-devなお、このlibopencv-devは顔認識に用いるファイルhaarcascade_frontalface_alt.xmlのためだけにインストールします。
このあとは、用いている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==4.5.1.48以上で、Python3 用の OpenCV4 のインストールが終わりました。
5. 本書のOpenCVを用いた演習の実行
執筆当時のプログラムではいくつかのプログラムに修正が必要だったので、 2019/6/25にサンプルファイル(raspi2-sample.zip)を更新しました。 それ以前にダウンロードされた方は公式サイトから raspi2-sample.zip をダウンロードしなおしてください。更新済のプログラムを用いる場合、実行方法は解説ページに記した内容と変わりません。
Raspberry Pi 4B で、「実例で学ぶ・・・」の7章の実習をしようと思いますが、
返信削除注意点など教えてください。
下記ページの指示に従えば問題ないと思います。
削除本書発売後の追加情報
https://raspibb2.blogspot.com/2015/12/blog-post.html
ポイントを列挙すると、下記のとおりです。
・OpenCVのインストールは、Python3用の下記を用いることを推奨
sudo apt update
sudo apt install libopencv-dev python3-opencv
・開発環境からOpenCVを使ったプログラムを実行したければ
Thonny
というアプリケーションを用いる
・ターミナルからOpenCVを使ったプログラムを実行したければ
上記ページに記されているコマンドをコピーして実行する。
なお、「python3 ~」から始まる Python3 用コマンドを
用いてください。
ほぼ実行できました。
返信削除OpenCVの威力、ちょっと驚きでした。
ありがとうございました。