今回はRaspberry Piのカメラモジュールを用いて撮影した画像から人間を抽出すること(+α)をゴールに、AI開発ライブラリを試してみました。
近年のAIトレンドとは逆行する一昔前の技術ばかりですが、最新の生成系AI技術を学ぶ知識土台として、画像系AIをRaspberry Piに実装しています。どうぞご参考になさってください。
Raspberry Piの特徴
2025年のAI開発環境といえば、Google Colaboratory、Anacondaなど、手軽に無料で試せるものが豊富に用意されています。
とはいえ、インターネット接続が必須であったり(Google Colaboratory)、商用利用時に課金が必要(Anaconda)など、エッジAIデバイスとしてRaspberry Piに実装するには不向きなものも多いです。

今回はRaspberry Piのカメラモジュールを用いて撮影した画像から人間を抽出する(+α)をゴールとして、AI開発ライブラリのTensorFlowを実装してみることにしました。
事前準備
必要なもの
- Raspberry Pi Zero 2 W(Raspberry Pi OS Lite 64bit)
- Mini HDMIケーブル変換コネクタ
- USB MicroB – USB-A変換コネクタ
- カメラモジュール
まっさらなRaspberry Pi Zeroを用いたので、まずはパッケージを最新に更新しておきます。
sudo apt update
sudo apt upgrade
私のケースではpipがインストールされていなかったので、pipも入れておきます。そのうえでOpenCVをインストールします。
sudo apt install pip
sudo pip install opencv-python --break-system-packages
–break-system-packagesに関しては、以下の記事に従って記載しました。

カメラの有効化
Raspberry Pi Zero 2 WにはRaspberry Pi OS Lite(64bit)をインストールしましたが、このままではカメラが使えない状態でした。以前はraspi-configから有効化をするだけでOKだったところが、どうやらOSの変更によってconfig.txtを書き換えないとダメな模様です。
cd /boot/firmware
sudo vi config.txt
私はAmazonで一番安いカメラモジュール(OV5647)ユーザなので、書き換えるのは以下の二カ所になります。

Viのセンスが全く無いので、備忘としてコマンド参考集も残しておきます。(いつも思ったように書き換えられず失敗します。。。)

それでもなお、no cameras availableでカメラが認識されない時は、フレキシブルケーブルの表裏間違いがないか等もチェックしてください。
OpenCV(機械学習)
このままOpenCVをインポートしても、Import error: libGL.so.1 cannot open….でエラーとなってしまうため、追加のライブラリをインストールします。
sudo apt install libgl1-mesa-dev
python実行後に、import cv2と入力して、エラーが返ってこなければ準備OKです。
Hello World 画像を出力する練習
以下の方の記事を参考に、hello.pyを作成してみました。出力された画像をCUIのRaspberry Piで表示させるには、fbiコマンドを利用します。
sudo apt install fbi
sudo fbi -T 7 -d /dev/fb0 -a /home/hogehoge/hogehoge.png

橙色でHello Worldと描かれた画像が表示されれば、練習完了です。
画像から顔の位置を検出
先ほどの続きでfacedetect.pyを用意してみます。fbiコマンドで顔に丸印が付いた画像を確認できれば、OpenCVを用いた画像からの特徴検出はクリアです。
python facedetect.py hoehoge.jpg hogehoge-output.jpg
sudo fbi -T 7 -d /dev/fb0 -a /home/hogehoge/hogehoge.png
カメラで撮影した画像をOpenCVで機械学習
OpenCVのライブラリにはcv2.VideoCapture(0)という接続(内蔵)カメラから画像や動画を取得する手法があるのですが、どうやらlibcameraには対応しておらず、picamera2を使う必要があるようです。

また、picamera2はnumpy2.0に対応していないようなので、合わせてnumpyをダウングレードする必要がありました。
sudo apt install python3-picamera2
sudo pip uninstall numpy
sudo pip install numpy==1.26.0
pythonのコードに関しては、先のniwasawa様のものをベースに以下参考として残します。
import sys
import numpy
import cv2
from picamera2 import Picamera2
# フル解像度で画像を取得
picam2 = Picamera2()
capture_config = picam2.create_still_configuration()
picam2.configure(capture_config)
picam2.start()
picam2.capture_file("test.jpg")
picam2.stop()
# アルファチャンネル付きに対応するため IMREAD_UNCHANGED を使う
input_image = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
# 顔検出用のカスケード分類器を使用
face_cascade_name = cv2.data.haarcascades + "haarcascade_frontalface_default.xml"
face_cascade = cv2.CascadeClassifier(face_cascade_name)
# 顔を検出
faces = face_cascade.detectMultiScale(input_image)
# 入力画像データを出力画像データにコピー
output_image = numpy.copy(input_image)
for (x, y, w, h) in faces:
# 検出した顔の座標を出力
print("Face: [{} x {} from ({}, {})]".format(w, h, x, y))
# 顔の位置に楕円を描画
center = (x + w // 2, y + h // 2)
size = (w // 2, h // 2)
angle = 0
startAngle = 0
endAngle = 360
color = (127, 0, 255, 255) # Blue, Green, Red, Alpha
thickness = 4
cv2.ellipse(output_image, center, size, angle, startAngle, endAngle, color, thickness)
# 画像を出力
cv2.imwrite("test-output.jpg", output_image)
Tensorflowで数値予測
最後にTensorflowを用いた深層学習STEPになります。まずはRaspberry Pi ZeroにTensorflowをインストールします。なかなか重いため、Zero2でもインストール処理に10~15分ほどかかります。
sudo pip install tensorflow --break-system-packages
ここで、tensorflowのサンプルコードを実行すると、partially initialized module ‘tensorflow’ has no attribute ‘keras’というエラーで引っかかることがあります。
Kerasの公式ページに記載の互換性の通り、tensorflow(2.18.0)とkeras(3.8.0)のバージョンを合わせることで、数値予測サンプルコードはクリアできるはずです。(かなりの処理時間を要しますが、、、)


Tensorflowを用いた画像解析については、別記事で投稿するかもしれないです。
コメント