Raspberry Pi Desktop (for PC and Mac) で Python 開発環境(OpenCV, dlib, scikit-learn ほか)を整える

Raspberry Pi Desktop (for PC and Mac) は,PC や Mac で動作する Debian ベースの OS である.最終リリースは 2022年7月1日版で,Debian 11 (bullseye) をベースとし,32ビット (i386) 版のみが提供されている.64ビット版および Debian 12 以降をベースとする版はリリースされていない.同梱の Python は Python 3.9 である.

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 を使いたいとき」で説明する.

目次

  1. システム更新
  2. Python 開発環境,ビルドツール,Git, cmake などのインストール
  3. Python の仮想環境の作成(venv を使用)
  4. 作成した Python 仮想環境を使いたいとき
  5. NumPy, SciPy, scikit-learn, scikit-image, Matplotlib, pandas, h5py, Jupyter Notebook などのインストール
  6. OpenCV のインストール
  7. dlib, face_recognition のインストール
  8. TensorFlow, Keras を使いたいとき
  9. imutils, folium, overpy, exifread, haversine, utm, msgpack, geopandas のインストール

サイト内の関連ページ

システム更新

  1. 端末を開く
  2. 次のコマンドを実行する.

    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 now
    
    rpi-update は Raspberry Pi 本体(ARM)のファームウェアを更新するコマンドであり,PC や Mac で動作する Raspberry Pi Desktop では実行しない.

Python 開発環境,ビルドツール,Git, cmake などのインストール

  1. 端末を開く
  2. 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
    
  3. Git, cmake, curl, wget, p7zip-full のインストール

    次のコマンドを実行する.

    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install git cmake cmake-curses-gui cmake-gui curl wget p7zip-full
    
  4. dlib のビルドに必要なライブラリのインストール

    次のコマンドを実行する.

    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install libopenblas-dev liblapack-dev libx11-dev libgtk-3-dev pkg-config
    
    OpenBLAS は行列演算のライブラリである.dlib のビルド時に検出されると,行列演算が高速化される.

Python の仮想環境の作成(venv を使用)

Python の仮想環境を作ることで,システムの Python 環境と,作業用の Python 環境を分けることができる.Debian 11 以降では,システムの Python に pip で直接パッケージを入れると,apt が管理するファイルと衝突することがあるため,仮想環境を用いる.

  1. これから作成するPython の仮想環境の名前を決めておく
    • Python の仮想環境の名前: ai
    • Python のバージョン: 3.9(Debian 11 に同梱されているもの)
  2. 端末を開く
  3. Python の仮想環境を作成する

    次のコマンドを実行する.

    --system-site-packages は,apt でインストールした Python パッケージ(python3-numpy, python3-opencv など)を,仮想環境の中からも使えるようにするためのオプションである.32ビット環境では apt のパッケージを活用する必要があるため,このオプションを付ける.

    python3 -m venv --system-site-packages ~/venv/ai
    
  4. 作成できたことを確認する

    次のコマンドを実行する.ディレクトリの一覧が表示されれば作成できている.

    ls ~/venv/ai
    

作成した Python 仮想環境を使いたいとき

NumPy, SciPy, scikit-learn, scikit-image, Matplotlib, pandas, h5py, Jupyter Notebook などのインストール

32ビット Linux では,これらのパッケージの新しいバージョンについて PyPI にビルド済みパッケージが無い.pip でインストールしようとするとソースからのビルドとなり,長時間かかるか失敗する.そのため apt でインストールする

  1. 端末を開く
  2. 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
    
  3. Jupyter Notebook, pytest, docopt のインストール

    次のコマンドを実行する.

    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install jupyter jupyter-notebook python3-pytest python3-docopt
    
  4. Python の統合開発環境のインストール

    次のコマンドを実行する.SpyderThonny はいずれも Python の開発環境である.Thonny は Raspberry Pi Desktop に標準で含まれている.

    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install spyder
    
  5. 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 である.

  1. 端末を開く
  2. OpenCV のインストール

    次のコマンドを実行する.

    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install python3-opencv libopencv-dev opencv-data
    
  3. OpenCV のバージョン確認

    Python の仮想環境(名前は ai)を有効にしてから,バージョンを表示する.

    バージョン番号が表示されれば確認できたことになる.
    source ~/venv/ai/bin/activate
    python -c "import cv2; print( cv2.__version__ )"
    
  4. 顔検出による動作確認

    次のコマンドを実行する.画像をダウンロードし,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ビット環境では数十分以上を要することがある).

  1. 端末を開く
  2. Python の仮想環境(名前は ai)を有効にする

    次のコマンドを実行する.

    source ~/venv/ai/bin/activate
    
  3. pip の更新

    次のコマンドを実行する.

    python -m pip install -U pip setuptools wheel
    
  4. dlib のインストール

    次のコマンドを実行する.ビルドが行われるため,終わるまで待つ.

    python -m pip install -v dlib
    
    搭載メモリが少ない環境では,ビルド中にメモリ不足でエラーになることがある.その場合は,スワップ領域を増やす,あるいは MAKEFLAGS="-j1" を付けて並列ビルドを行わないようにする.
    MAKEFLAGS="-j1" python -m pip install -v dlib
    
  5. dlib のバージョン確認
    バージョン番号が表示されれば確認できたことになる.
    python -c "import dlib; print( dlib.__version__ )"
    
  6. face_recognition のインストール

    次のコマンドを実行する.

    python -m pip install face_recognition
    
  7. 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ビット環境での確認)Keras を使った画像分類

TensorFlow をインストールした 64ビット環境では,次の手順で動作を確認できる.

  1. 次の画像を使うことにする

    次のコマンドで,画像をダウンロードし,ImageMagick を使って画像表示する.

    cd /tmp
    wget -N https://www.kkaneko.jp/tools/raspbian/124.png
    display 124.png
    
  2. 端末を開く
  3. Python のプログラムを実行したいので,端末で「python」を実行する
    python
    
  4. 次のプログラムをコピー&ペーストする

    学習済みモデル 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]))
    
  5. exit() で終わる

imutils, folium, overpy, exifread, haversine, utm, msgpack, geopandas のインストール

これらは,画像処理の補助(imutils),地図表示(folium),OpenStreetMap のデータ取得(overpy),Exif 情報の読み取り(exifread),2 地点間距離の計算(haversine),UTM 座標の変換(utm),データ直列化(msgpack),地理空間データの処理(geopandas)を行うパッケージである.

  1. 端末を開く
  2. Python の仮想環境(名前は ai)を有効にする

    次のコマンドを実行する.

    source ~/venv/ai/bin/activate
    
  3. geopandas の前提パッケージのインストール

    geopandas は GDAL, GEOS, PROJ を必要とする.apt でインストールする.

    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install python3-geopandas python3-fiona python3-shapely python3-pyproj
    
  4. imutils, folium, overpy, exifread, haversine, utm, msgpack のインストール

    次のコマンドを実行する.いずれも Python のみで記述されているか,ビルドが軽量であるため,pip でインストールできる.

    python -m pip install imutils folium overpy exifread haversine utm msgpack
    
  5. imutils のバージョン確認
    バージョン番号が表示されれば確認できたことになる.
    python -c "import imutils; print( imutils.__version__ )"
    
  6. geopandas のバージョン確認
    バージョン番号が表示されれば確認できたことになる.
    python -c "import geopandas; print( geopandas.__version__ )"
    
  7. その他,各種パッケージのインストール

    下から必要なものを選んでインストールする.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