Raspberry Pi Desktop (for PC and Mac) で Python 開発環境(OpenCV, dlib, scikit-learn ほか)を整える
32ビット (i386) 環境であることは,Python パッケージの導入方法に直接影響する.PyPI では,NumPy, SciPy, OpenCV, TensorFlow などの主要パッケージについて 32ビット Linux 向けのビルド済みパッケージ(wheel)が配布されていない.そのため,このページでは Debian のパッケージ(apt)を主に用い,apt にないものを pip でソースからビルドする方針をとる.Anaconda も 2021.05 以降は 64ビット版のみの提供であり,Raspberry Pi Desktop では使用できない.
TensorFlow と Keras については,32ビット x86 向けの公式ビルドが存在しない.対処方法は「TensorFlow, Keras を使いたいとき」で説明する.
【目次】
- システム更新
- Python 開発環境,ビルドツール,Git, cmake などのインストール
- Python の仮想環境の作成(venv を使用)
- 作成した Python 仮想環境を使いたいとき
- NumPy, SciPy, scikit-learn, scikit-image, Matplotlib, pandas, h5py, Jupyter Notebook などのインストール
- OpenCV のインストール
- dlib, face_recognition のインストール
- TensorFlow, Keras を使いたいとき
- imutils, folium, overpy, exifread, haversine, utm, msgpack, geopandas のインストール
【サイト内の関連ページ】
システム更新
- 端末を開く
- 次のコマンドを実行する.
Debian 11 (bullseye) は旧安定版であり,通常のセキュリティサポートは終了し,LTS(長期サポート)による更新提供期間に入っている.更新の適用は行っておく.
# パッケージリストの情報を更新 sudo apt update sudo apt -yV upgrade sudo apt -yV dist-upgrade sudo apt -yV autoremove sudo apt autoclean sudo shutdown -r nowrpi-update は Raspberry Pi 本体(ARM)のファームウェアを更新するコマンドであり,PC や Mac で動作する Raspberry Pi Desktop では実行しない.
Python 開発環境,ビルドツール,Git, cmake などのインストール
- 端末を開く
- Python 開発環境,pip, venv,コンパイラのインストール
次のコマンドを実行する.
Debian 11 (bullseye) では Python 2 系は提供されていない.Python 3 のみを使用する.
# パッケージリストの情報を更新 sudo apt update sudo apt -y install python3-dev python3-pip python3-venv python3-setuptools python3-wheel build-essential
- Git, cmake, curl, wget, p7zip-full のインストール
次のコマンドを実行する.
# パッケージリストの情報を更新 sudo apt update sudo apt -y install git cmake cmake-curses-gui cmake-gui curl wget p7zip-full - dlib のビルドに必要なライブラリのインストール
次のコマンドを実行する.
# パッケージリストの情報を更新 sudo apt update sudo apt -y install libopenblas-dev liblapack-dev libx11-dev libgtk-3-dev pkg-configOpenBLAS は行列演算のライブラリである.dlib のビルド時に検出されると,行列演算が高速化される.
Python の仮想環境の作成(venv を使用)
Python の仮想環境を作ることで,システムの Python 環境と,作業用の Python 環境を分けることができる.Debian 11 以降では,システムの Python に pip で直接パッケージを入れると,apt が管理するファイルと衝突することがあるため,仮想環境を用いる.
- これから作成するPython の仮想環境の名前を決めておく
- Python の仮想環境の名前: ai
- Python のバージョン: 3.9(Debian 11 に同梱されているもの)
- 端末を開く
- Python の仮想環境を作成する
次のコマンドを実行する.
--system-site-packages は,apt でインストールした Python パッケージ(python3-numpy, python3-opencv など)を,仮想環境の中からも使えるようにするためのオプションである.32ビット環境では apt のパッケージを活用する必要があるため,このオプションを付ける.
python3 -m venv --system-site-packages ~/venv/ai - 作成できたことを確認する
次のコマンドを実行する.ディレクトリの一覧が表示されれば作成できている.
ls ~/venv/ai
作成した Python 仮想環境を使いたいとき
- 端末を開く
- 端末で,次のコマンドを実行し,Python の仮想環境(名前は ai)を有効にする
source ~/venv/ai/bin/activateプロンプトの先頭に「(ai)」と表示されれば,仮想環境が有効になっている.
- 仮想環境から抜けたいときは,次のコマンドを実行する
deactivate
NumPy, SciPy, scikit-learn, scikit-image, Matplotlib, pandas, h5py, Jupyter Notebook などのインストール
32ビット Linux では,これらのパッケージの新しいバージョンについて PyPI にビルド済みパッケージが無い.pip でインストールしようとするとソースからのビルドとなり,長時間かかるか失敗する.そのため apt でインストールする.
- 端末を開く
- NumPy, SciPy, scikit-learn, scikit-image, Matplotlib, seaborn, pandas, Pillow, h5py, PyYAML, Cython のインストール
次のコマンドを実行する.
# パッケージリストの情報を更新 sudo apt update sudo apt -y install python3-numpy python3-scipy python3-sklearn python3-skimage python3-matplotlib python3-seaborn python3-pandas python3-pil python3-h5py python3-yaml python3-cython - Jupyter Notebook, pytest, docopt のインストール
次のコマンドを実行する.
# パッケージリストの情報を更新 sudo apt update sudo apt -y install jupyter jupyter-notebook python3-pytest python3-docopt - Python の統合開発環境のインストール
次のコマンドを実行する.Spyder と Thonny はいずれも Python の開発環境である.Thonny は Raspberry Pi Desktop に標準で含まれている.
# パッケージリストの情報を更新 sudo apt update sudo apt -y install spyder - NumPy のバージョン確認
Python の仮想環境(名前は ai)を有効にしてから,バージョンを表示する.
バージョン番号が表示されれば確認できたことになる.source ~/venv/ai/bin/activate python -c "import numpy; print( numpy.__version__ )"
OpenCV のインストール
OpenCV は,コンピュータビジョン,画像処理,機械学習の機能を持つライブラリである.32ビット Linux 向けの opencv-python のビルド済みパッケージは PyPI に無いため,apt でインストールする.Debian 11 (bullseye) が提供する OpenCV のバージョンは 4.5.1 である.
- 端末を開く
- OpenCV のインストール
次のコマンドを実行する.
# パッケージリストの情報を更新 sudo apt update sudo apt -y install python3-opencv libopencv-dev opencv-data - OpenCV のバージョン確認
Python の仮想環境(名前は ai)を有効にしてから,バージョンを表示する.
バージョン番号が表示されれば確認できたことになる.source ~/venv/ai/bin/activate python -c "import cv2; print( cv2.__version__ )"
- 顔検出による動作確認
次のコマンドを実行する.画像をダウンロードし,OpenCV の Haar Cascade 分類器で顔を検出し,検出された個数を表示する.
cd /tmp wget https://www.kkaneko.jp/tools/raspbian/124.png source ~/venv/ai/bin/activate python -c "import cv2; img = cv2.imread('/tmp/124.png'); c = cv2.CascadeClassifier('/usr/share/opencv4/haarcascades/haarcascade_frontalface_default.xml'); print( len(c.detectMultiScale(cv2.cvtColor(img, cv2.COLOR_BGR2GRAY))) )"
dlib, face_recognition のインストール
dlib は,機械学習,画像処理,顔検出,顔識別などの機能を持つ C++ のライブラリであり,Python から使うことができる.face_recognition は,dlib を用いた顔認識のパッケージである.
dlib の Python パッケージは,PyPI にソースコードのみが配布されている.pip でインストールすると,ソースコードからのビルドが行われる.ビルドには時間がかかる(32ビット環境では数十分以上を要することがある).
- 端末を開く
- Python の仮想環境(名前は ai)を有効にする
次のコマンドを実行する.
source ~/venv/ai/bin/activate - pip の更新
次のコマンドを実行する.
python -m pip install -U pip setuptools wheel - dlib のインストール
次のコマンドを実行する.ビルドが行われるため,終わるまで待つ.
python -m pip install -v dlib搭載メモリが少ない環境では,ビルド中にメモリ不足でエラーになることがある.その場合は,スワップ領域を増やす,あるいは MAKEFLAGS="-j1" を付けて並列ビルドを行わないようにする.MAKEFLAGS="-j1" python -m pip install -v dlib - dlib のバージョン確認
バージョン番号が表示されれば確認できたことになる.
python -c "import dlib; print( dlib.__version__ )" - face_recognition のインストール
次のコマンドを実行する.
python -m pip install face_recognition - face_recognition の動作確認
次のコマンドを実行する.画像から検出された顔の個数が表示される.
cd /tmp wget -N https://www.kkaneko.jp/tools/raspbian/124.png python -c "import face_recognition; print( len(face_recognition.face_locations(face_recognition.load_image_file('/tmp/124.png'))) )"
TensorFlow, Keras を使いたいとき
TensorFlow は,ニューラルネットワークや深層学習に用いられるライブラリである.Keras は,ニューラルネットワークを記述するための API であり,TensorFlow 2 以降では tf.keras として TensorFlow に同梱されている.
TensorFlow は 64ビット環境のみをサポートしており,32ビット x86 (i386) 向けの公式ビルドは配布されていない.Raspberry Pi Desktop (for PC and Mac) は 32ビット版のみであるため,この OS 上で TensorFlow を動作させることはできない.ソースコードからのビルドも 32ビット x86 はサポート対象外である.同様に,TensorFlow を必要とする mtcnn などのパッケージも動作しない.
TensorFlow, Keras を使う場合の選択肢は次の通りである.
- 64ビット版の Linux を PC にインストールして使う:Debian,Ubuntu などの 64ビット版をインストールし,「python3 -m pip install tensorflow」でインストールする.
- Raspberry Pi 本体で 64ビット版の Raspberry Pi OS を使う:Raspberry Pi 4 以降で 64ビット版の Raspberry Pi OS (aarch64) を用いると,「python3 -m pip install tensorflow」でインストールできる.
- Google Colaboratory を使う:Web ブラウザ上で TensorFlow, Keras を実行できる.手順は「Google Colaboratory」のページで説明している.
(64ビット環境での確認)Keras を使った画像分類
TensorFlow をインストールした 64ビット環境では,次の手順で動作を確認できる.
- 次の画像を使うことにする
次のコマンドで,画像をダウンロードし,ImageMagick を使って画像表示する.
cd /tmp wget -N https://www.kkaneko.jp/tools/raspbian/124.png display 124.png - 端末を開く
- Python のプログラムを実行したいので,端末で「python」を実行する
python - 次のプログラムをコピー&ペーストする
学習済みモデル InceptionV3 により画像を分類し,スコアの高い 5 件を表示する.初回実行時はモデルのダウンロードが行われる.
import numpy as np from tensorflow.keras.preprocessing import image from tensorflow.keras.applications.inception_v3 import preprocess_input, decode_predictions, InceptionV3 model = InceptionV3(weights='imagenet') img_path = '/tmp/124.png' img = image.load_img(img_path, target_size=(299, 299)) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) x = preprocess_input(x) preds = model.predict(x) print('Predicted:') for p in decode_predictions(preds, top=5)[0]: print("Score {}, Label {}".format(p[2], p[1])) - exit() で終わる
imutils, folium, overpy, exifread, haversine, utm, msgpack, geopandas のインストール
これらは,画像処理の補助(imutils),地図表示(folium),OpenStreetMap のデータ取得(overpy),Exif 情報の読み取り(exifread),2 地点間距離の計算(haversine),UTM 座標の変換(utm),データ直列化(msgpack),地理空間データの処理(geopandas)を行うパッケージである.
- 端末を開く
- Python の仮想環境(名前は ai)を有効にする
次のコマンドを実行する.
source ~/venv/ai/bin/activate - geopandas の前提パッケージのインストール
geopandas は GDAL, GEOS, PROJ を必要とする.apt でインストールする.
# パッケージリストの情報を更新 sudo apt update sudo apt -y install python3-geopandas python3-fiona python3-shapely python3-pyproj - imutils, folium, overpy, exifread, haversine, utm, msgpack のインストール
次のコマンドを実行する.いずれも Python のみで記述されているか,ビルドが軽量であるため,pip でインストールできる.
python -m pip install imutils folium overpy exifread haversine utm msgpack - imutils のバージョン確認
バージョン番号が表示されれば確認できたことになる.
python -c "import imutils; print( imutils.__version__ )"
- geopandas のバージョン確認
バージョン番号が表示されれば確認できたことになる.
python -c "import geopandas; print( geopandas.__version__ )" - その他,各種パッケージのインストール
下から必要なものを選んでインストールする.Web アプリケーション(Flask, Django),数式処理(SymPy),グラフ描画(Graphviz, pydot),自然言語処理(gensim),静的解析(Pylint)などである.
sudo apt -y install graphviz python3-pydot python3-flask python3-django python3-sympy sqlite3 redis-server python3-gensim pylint