はじめに (対象読者・この記事でわかること)

この記事は、Raspberry Pi 3 Model Bを使って画像処理システムを開発したいと考えている方、特にOpenCVを利用した組み込みシステム開発に興味がある方を対象にしています。PythonとLinuxコマンドラインの基本的な操作ができる方を想定していますが、丁寧に解説するため初学者の方でも安心して読み進められます。

この記事を読むことで、Raspberry Pi 3 Model BにOpenCVをインストールし、Pythonで基本的な画像処理プログラムを動かすための開発環境をゼロから構築できるようになります。小型で低コストなデバイスでの画像処理システム開発の第一歩を踏み出すきっかけとなれば幸いです。

前提知識

この記事を読み進める上で、以下の知識があるとスムーズです。 * Raspberry Piの基本的なセットアップとOS(Raspberry Pi OS Lite推奨)の操作 * Linuxコマンドラインの基本的な操作 * Pythonの基本的な文法

Raspberry Pi 3とOpenCVで始める組み込み画像処理

Raspberry Pi 3 Model Bは、その手軽さと豊富なGPIOピンによって、多種多様なIoTデバイスや組み込みシステムの開発プラットフォームとして広く利用されています。特に、カメラモジュールとの連携が容易なため、画像処理を伴うアプリケーションのプロトタイプ開発には最適です。OpenCV (Open Source Computer Vision Library) は、画像処理やコンピュータビジョンに関する機能を提供するオープンソースのライブラリであり、物体認識、顔検出、画像解析など、多岐にわたるタスクを実現できます。

しかし、Raspberry Pi 3 Model Bのようなリソースが限られたデバイスでOpenCVを動作させるには、いくつかの工夫が必要です。特にメモリ容量が1GBと少ないため、効率的なビルドプロセスや、軽量なOS選択が重要になります。本記事では、この課題をクリアし、安定したOpenCV開発環境を構築するための具体的なステップを解説します。これにより、監視カメラ、スマートホームデバイス、ロボットビジョンなど、様々なアイデアを形にするための基盤を築くことができます。

Raspberry Pi 3 Model BでのOpenCV開発環境構築手順

ここでは、Raspberry Pi 3 Model B上でOpenCVとPythonを使った開発環境を構築する具体的な手順を、ステップバイステップで解説します。OSの選択からOpenCVのビルド、動作確認までを網羅します。

1. 事前準備とOSのセットアップ

まず、Raspberry Pi 3 Model Bに最適なOSをインストールし、基本的なシステム設定を行います。リソースの制約を考慮し、GUIを持たない「Raspberry Pi OS Lite (64-bit)」を強く推奨します。

  1. Raspberry Pi OS Lite (64-bit) のダウンロードとSDカードへの書き込み: Raspberry Pi Imager を使用して、最新の Raspberry Pi OS Lite (64-bit) をSDカードに書き込みます。この際、Imagerの設定オプションでSSHを有効にし、Wi-Fiを設定しておくと便利です。
  2. 初回起動と基本設定: SDカードをRaspberry Piに挿入し、電源を入れます。SSHで接続するか、モニターとキーボードを接続してログインします。デフォルトのユーザー名 pi とパスワード raspberry を使用します。 bash # 初回起動後、パスワード変更を推奨 passwd # システムの更新 sudo apt update sudo apt upgrade -y # ロケール設定やタイムゾーン設定(必要であれば) sudo raspi-config
  3. 必要なビルドツールのインストール: OpenCVのソースコードをビルドするために必要なパッケージをインストールします。これには、コンパイラ、開発ライブラリ、画像フォーマットを扱うためのライブラリなどが含まれます。 bash sudo apt install -y build-essential cmake pkg-config git sudo apt install -y libjpeg-dev libtiff-dev libpng-dev sudo apt install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-dev sudo apt install -y libxvidcore-dev libx264-dev sudo apt install -y libgtk-3-dev libcanberra-gtk3-module libcanberra-gtk-module sudo apt install -y libatlas-base-dev gfortran sudo apt install -y python3-dev python3-pip

2. Python仮想環境の構築

システム全体に影響を与えず、プロジェクトごとにPythonのライブラリを管理するために仮想環境を構築します。

  1. 仮想環境の作成とアクティベート: bash mkdir ~/opencv_dev cd ~/opencv_dev python3 -m venv venv_opencv source venv_opencv/bin/activate コマンドプロンプトの先頭に (venv_opencv) と表示されていれば、仮想環境がアクティベートされています。
  2. 必要なPythonライブラリのインストール: OpenCVのPythonバインディングを機能させるために、NumPyなどのライブラリをインストールします。 bash pip install numpy

3. OpenCVのビルドとインストール

Raspberry Pi 3 Model Bでは、プレビルドされたOpenCVパッケージが利用できない場合や、特定の機能(例:GStreamer連携)を有効にする必要があるため、ソースコードからビルドするのが一般的です。

  1. OpenCVソースコードのダウンロード: 最新の安定版をGitHubからクローンします。 bash cd ~/opencv_dev git clone https://github.com/opencv/opencv.git git clone https://github.com/opencv/opencv_contrib.git # 追加モジュールが必要な場合 cd opencv git checkout 4.x # 最新の安定版ブランチを指定(例: 4.8.0など) cd ../opencv_contrib git checkout 4.x # opencvとバージョンを合わせる 注意: 4.x は特定のバージョン番号に置き換えてください(例: 4.8.0)。

  2. ビルドディレクトリの作成とCMakeでの設定: ビルド用のディレクトリを作成し、CMakeを使ってビルド設定を行います。Raspberry Pi 3 Model Bのメモリ制約を考慮し、不要なモジュールを無効化したり、BUILD_NEW_PYTHON_SUPPORTを有効にしたりします。 bash cd ~/opencv_dev/opencv mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=~/opencv_dev/venv_opencv \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_dev/opencv_contrib/modules \ -D ENABLE_VFPV3=ON \ -D ENABLE_NEON=ON \ -D WITH_QT=OFF \ -D WITH_GTK=ON \ -D WITH_TBB=OFF \ -D BUILD_TBB=OFF \ -D BUILD_opencv_python3=ON \ -D BUILD_opencv_python2=OFF \ -D BUILD_EXAMPLES=OFF \ -D BUILD_NEW_PYTHON_SUPPORT=ON \ -D BUILD_TESTS=OFF \ -D BUILD_PERF_TESTS=OFF \ -D INSTALL_PYTHON_EXAMPLES=OFF \ -D INSTALL_C_EXAMPLES=OFF \ ..

    • CMAKE_INSTALL_PREFIX: 仮想環境のパスを指定することで、仮想環境内にOpenCVをインストールします。
    • OPENCV_EXTRA_MODULES_PATH: opencv_contribモジュールを使用する場合に指定します。
    • WITH_QT=OFF: GUIツールキットのQtを無効化し、メモリ消費を抑えます。
    • BUILD_NEW_PYTHON_SUPPORT=ON: Python3へのバインディングを有効にします。
    • BUILD_TESTS=OFF, BUILD_PERF_TESTS=OFF, BUILD_EXAMPLES=OFF: テストやサンプルコードのビルドを無効化し、ビルド時間を短縮します。
  3. OpenCVのコンパイルとインストール: いよいよビルドです。Raspberry Pi 3 Model BはCPUコア数が少ないため、並列ビルドの数を制限する必要があります。メモリ不足を避けるため、make -j1またはmake -j2を使用するのが安全です。

    ```bash make -j$(nproc --all) # 全てのCPUコアを使用。メモリが足りない場合は j1 や j2 にする

    もしくは

    make -j1 # メモリ不足の場合に推奨 ``` ビルドには数時間かかる場合があります。気長に待ちましょう。

    ビルドが完了したら、インストールします。 bash make install これにより、OpenCVのライブラリとPythonバインディングが仮想環境内にインストールされます。

4. 動作確認

OpenCVが正しくインストールされ、Pythonから利用できるかを確認します。

  1. Pythonからのインポートテスト: 仮想環境がアクティベートされていることを確認し、Pythonインタープリタを起動します。 bash (venv_opencv) $ python >>> import cv2 >>> print(cv2.__version__) 4.x.x # インストールしたバージョンが表示されれば成功 >>> exit()
  2. 簡単な画像処理スクリプトの実行: 適当な画像ファイル(例: test.jpg)をRaspberry Piに用意し、以下のPythonスクリプトを実行してみます。 ```python # ~/opencv_dev/test_opencv.py import cv2 import numpy as np

    print(f"OpenCV Version: {cv2.version}")

    適当なサイズの黒い画像を作成

    img = np.zeros((300, 500, 3), dtype=np.uint8) cv2.putText(img, "Hello OpenCV on RPi!", (50, 150), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2, cv2.LINE_AA)

    画像を保存 (デスクトップ環境がないため表示はできません)

    output_path = "output_image.jpg" cv2.imwrite(output_path, img) print(f"Image saved as {output_path}")

    画像を読み込んでサイズを表示 (確認用)

    loaded_img = cv2.imread(output_path) if loaded_img is not None: print(f"Loaded image shape: {loaded_img.shape}") else: print(f"Failed to load image from {output_path}") このスクリプトを保存し、仮想環境内で実行します。bash (venv_opencv) $ python test_opencv.py ``output_image.jpg` が作成され、エラーなく実行できれば成功です。

ハマった点やエラー解決

1. メモリ不足によるビルド失敗: Raspberry Pi 3 Model Bはメモリが1GBしかなく、OpenCVのビルド中にメモリが枯渇し、プロセスが強制終了されることがあります。

  • 解決策1: SWAP領域の確保: 一時的にSWAPファイルを増やすことで、物理メモリが不足してもディスクに退避させる領域を確保します。 bash sudo dphys-swapfile swapoff sudo nano /etc/dphys-swapfile # CONF_SWAPSIZE を 1000 から 2048 などに増やす (2GB) sudo dphys-swapfile swapon ビルド完了後に元のサイズに戻すことを忘れずに。
  • 解決策2: 並列ビルド数の制限: make -j オプションで並列処理数を制限します。make -j1 ならシングルスレッド、make -j2 なら2スレッドでビルドします。make -j1は非常に遅いですが、メモリ消費を最小限に抑えられます。

2. 依存関係の不足: ビルド時に「No such file or directory」や「cannot find -lxxx」といったエラーが出る場合、必要な開発ライブラリがインストールされていない可能性があります。

  • 解決策: sudo apt install -y <不足しているライブラリのdev版> のように、エラーメッセージから示唆されるライブラリの-devパッケージを探してインストールします。例えば、libjpeg-devなど。

3. Python環境のパス問題: OpenCVがインストールされても、Pythonからimport cv2ができない場合、Pythonのパス設定や仮想環境の認識に問題がある可能性があります。

  • 解決策: 仮想環境が正しくアクティベートされているか確認します (source venv_opencv/bin/activate)。また、CMakeのCMAKE_INSTALL_PREFIXが仮想環境のパスを正しく指しているか再確認します。

まとめ

本記事では、Raspberry Pi 3 Model B上でOpenCVを用いた画像処理システムを開発するための環境構築手順を詳細に解説しました。

  • 事前準備とOSのセットアップを通じて、システムの基盤を整え、必要なツールを導入しました。
  • Python仮想環境の構築により、プロジェクトごとの依存関係を適切に管理する方法を学びました。
  • OpenCVのビルドとインストールでは、メモリ制約のある環境でのコンパイル方法や、問題解決のヒントを提供しました。

この記事を通して、小型で安価なRaspberry Pi上でOpenCVを動かすための開発環境を構築し、画像処理を用いた様々なアプリケーション開発の第一歩を踏み出すことができたでしょう。今後は、実際にカメラモジュールと連携してリアルタイムの画像処理を行ったり、物体検出や顔認識などの発展的な内容についても試していくことができます。

参考資料