5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Raspberry Pi AI cameraとPi Zero2 W でチュートリアルを試してみた

Last updated at Posted at 2025-02-04

Raspberry Pi AI cameraとPi Zero2 W でチュートリアルを試してみた

2024/9にRaspberry Pi AI Cameraの国内販売が始まり、簡単にエッジAI処理をRaspberry Piを用いて試せる環境が揃ってきました。

本稿では、主にこれからRaspberry Pi AI Cameraを初めて使うユーザを対象にカメラのセットアップ方法とチュートリアルのサンプルアプリを動かす方法を紹介します。

IMG_7210.jpg

必要な機材リスト

# Item 必須 メモ
1 Pi AI Camera * 購入リンク: https://www.raspberrypi.com/products/ai-camera/
2 Raspberry Pi * Pi3 B+/Pi 4/PI5/PI Zero2w/Compute Module 4にて動作確認済み。本記事ではPI Zero2wを使用しています
3 電源ケーブル *
4 SDカード *
5 マウス ディスプレイに接続する場合必要
6 モニター ディスプレイに接続する場合必要
7 Keyboard ディスプレイに接続する場合必要
8 HDMIケーブル Raspberry Pi 4,5の場合MicroHDMI⇔HDMIが必要。Raspberrypi Zero 2向けには MiniHDMI⇔HDMI
9 MicroUSBコネクタ PI Zero2wを使用する場合、インターフェースがMicro USBのみのためUSB Type-Aの機器と接続するためのハブが必要です。
10 ケース&ヒートシンク 必要に応じてご利用ください

機材の準備

SDカードにOSの書き込み

  • Raspberry Pi OS Imager (ダウンロード先)
    こちらのツールを使うことで簡単にSDカードにOSイメージを書き込むことができます。
    Windows, Mac, Linuxそれぞれに対応しています。
    書き込み時に、ホスト名、SSH、Wifi、タイムゾーン、キーボードレイアウトの指定も可能です。

公式ドキュメント:

image.png

Raspberry PiにAI Cameraを接続

  • Raspberry Pi AI Cameraを開封すると以下のようなものが入っています

IMG_7205.jpg

  • 同封物一覧

    1. AI Camera
    2. DSIケーブル ディスプレイ用FPC(Standard-Standard 20cm)
    3. DSIケーブル ディスプレイ用FPC(Standard-Mini 20cm)
      Raspberry Pi 5、Pi Zeroシリーズを使用する場合はこちらのケーブルを使用します。
    4. 小型フォーカス調整工具(画像中央にある白い丸いもの)
      • 工具を反時計回りに回すと近距離にピントが合い、時計方向に回転させると遠距離にピントが合います。
  • Raspberry Pi AI cameraとRaspberry Piを接続していきます。

    • フラットケーブルには裏表の向きがあるのでご注意ください
      • Raspberry Piとカメラのそれぞれの本体側接点(金属端子)が下向きになるように挿入してください。
    • ケーブルを固定する手順
      1. ラッチを軽く引き上げて開きます。
      2. ケーブルを正しい向きで挿入します。
      3. ラッチを下ろしてケーブルを固定します。

IMG_7207.jpg

チュートリアル手順

  • RaspberryPi 公式ドキュメントに沿って進めていきます。

起動後、デスクトップからターミナルを起動します。
image.png

Raspberry Pi Zero2 Wでライブラリの更新処理や、大きなライブラリをインストールする場合、メモリが不足することにより数時間かかる場合があります。
時間に余裕をもって実施していただくか、必要に応じてswap領域の確保をお願いいたします。

  1. 必要なライブラリのインストール

    • sudo apt update && sudo apt full-upgrade

    • sudo apt install imx500-all

      • 上記のコマンドを実行することで、IMX500センサーを動かすのに必要なファームウェアや関連ソフトウェアをまとめてインストールを行うことができます。以下の1~3を実行しています。
        1. /usr/share/imx500-models/ にサンプルのAIモデルファイルの配置
        2. rpicam-appsにIMX500カメラ用のファイルの追加
        3. AI Camera向けパッケージ化ツールのインストール

/usr/share/imx500-models/に配置されるAIモデルの一覧は以下になります。

  1. デバイスの再起動
    • sudo reboot
  2. 起動時にI2Cバス上に接続されたIMX500カメラセンサーを検出し、正しく認識・初期化していることを確認
    • sudo dmesg | grep imx500
      • 正しく認識されていると以下のようにIMX500カメラが検出されます
        image.png

サンプルスクリプトを試してみる

1. オブジェクト検知

実行スクリプト
rpicam-hello -t 0s --post-process-file /usr/share/rpi-camera-assets/imx500_mobilenet_ssd.json --viewfinder-width 1920 --viewfinder-height 1080 --framerate 30
実行結果
  • 新しいAIモデルの書き込みの場合、AIモデルの書き込みに数分かかります。
  • AI Cameraへのモデルの読み込み後、以下のように結果が可視化されます。

image.png

2.骨格推定

実行スクリプト
rpicam-hello -t 0s --post-process-file /usr/share/rpi-camera-assets/imx500_posenet.json --viewfinder-width 1920 --viewfinder-height 1080 --framerate 30
実行結果
  • 以下のように可視化結果が表示されます。
    image.png

  • ちなみに実行するためのパラメータはimx500_posenet.json にて定義されています。

pi@raspberrypi:~ $ cat /usr/share/rpi-camera-assets/imx500_posenet.json
{
    "imx500_posenet":
    {
        "max_detections" : 5,
        "threshold" : 0.4,
        "offset_refinement_steps": 5,
        "nms_radius": 10.0,
        "network_file": "/usr/share/imx500-models/imx500_network_posenet.rpk",

        "save_input_tensor":
        {
            "filename": "/home/pi/posenet_input_tensor.raw",
            "num_tensors": 10
        },

        "temporal_filter":
        {
            "tolerance": 0.3,
            "factor": 0.3,
            "visible_frames": 8,
            "hidden_frames": 2
        }
    },

    "plot_pose_cv":
    {
        "confidence_threshold" : 0.2
    }
}

  • それぞれのパラメータの詳細は以下になります。
パラメータ 説明 デフォルト値
max_detections 検出するポーズ(人物)の最大数。 5
threshold ポーズを検出する際のスコア(信頼度)のしきい値。これよりも低いスコアは無視されます 0.4
offset_refinement_steps 関節座標を微調整(補正)するステップ数。値を増やすと精度が上がる一方、処理負荷が高まる。 5
nms_radius (NMS: Non-Maximum Suppression)で使用する半径。近い位置に重複して検出されたポーズをまとめたり除外したりするときに使用する。 10.0
network_file PoseNet の学習済みモデルファイル(IMX500 用 .rpk)のパス。 /usr/share/imx500-models/imx500_network_posenet.rpk
save_input_tensor.filename 推論入力のテンソル(raw データ)を保存する先のファイルパス。デバッグや可視化に使用します。 /home/pi/posenet_input_tensor.raw
save_input_tensor.num_tensors 何フレーム分の入力テンソルを連続して保存するか。指定回数分保存したら停止します。 10
temporal_filter.tolerance ポーズが大きく変化した際、どの程度まで過去情報を維持するかを制御する許容誤差のしきい値。 0.3
temporal_filter.factor 時系列フィルタの係数。値が大きいほど過去情報を強く反映し、出力が滑らかになりますが、動きの速い動作への追従が遅くなる場合があります。 0.3
temporal_filter.visible_frames 連続してポーズが検出されているとき、過去何フレーム分の情報を利用するかを設定。 8
temporal_filter.hidden_frames 一時的に検出が途切れた場合でも、直近の情報を維持してポーズを補完するためのフレーム数。 2
confidence_threshold (plot_pose_cv) OpenCV などで結果を可視化するときに、可視化対象とする最低スコア。値が低い関節は表示対象外にして誤検出を減らします。 0.2

Picamera2のサンプルスクリプト

次にpicamera2のサンプルアプリを試していきます。

picamera2 ドキュメントは以下にあります。

環境構築

  • 多くのサンプルアプリはOpenCVを使用します。そのため以下をインストールします。
sudo apt install python3-opencv python3-munkres

次にサンプルスクリプトを準備します。

git clone https://github.com/raspberrypi/picamera2.git
cd picamera2/examples/imx500

上記のフォルダにはそれぞれAIモデルのタスクに応じたサンプルスクリプトが格納されています。

  • imx500_classification_demo.py
    • Classification用
  • imx500_object_detection_demo.py
    • Object Detection用
  • imx500_pose_estimation_higherhrnet_demo.py
    • Pose Estimation用
  • imx500_segmentation_demo.py
    • Segmentation用

サンプルスクリプトの実行

1. クラス分類

実行スクリプト
python imx500_classification_demo.py --model /usr/share/imx500-models/imx500_network_efficientnet_bo.rpk
実行結果
  • 左上に推論結果が表示されます。今回は正しくオレンジと判定されていることがわかります。
  • COCOデータセット1に含まれている画像を画面越しに撮影してみて挙動を確認しています。

image.png

2. ObjectDetection

実行スクリプト
python imx500_object_detection_demo.py --model /usr/share/imx500-models/imx500_network_efficientdet_lite0_pp.rpk
実行結果
  • 検出したオブジェクトのバウンディングボックスが表示されています。
  • 正しくOrangeと認識できています

image.png

3. 骨格推定

実行スクリプト
python imx500_pose_estimation_higherhrnet_demo.py --model /usr/share/imx500-models/imx500_network_higherhrnet_coco.rpk
実行結果
  • 検出したキーポイントが可視化されます。
  • 3人のキーポイントを検出できていることがわかります
  • こちらもCOCOデータセット1に含まれている画像を画面越しに撮影してみて挙動を確認しています。

image.png

4. セグメンテーション

実行スクリプト
python imx500_segmentation_demo.py  --model /usr/share/imx500-models/imx500_network_deeplabv3plus.rpk
実行結果
  • セグメンテーションした結果がマスクで可視化されます。
  • 今回はオレンジ色なのでわかりにくいですが、物体に対して正しくマスク抽出が行えていることがわかります。
    image.png

まとめと感想

Raspberry Pi AI カメラでチュートリアルを一通り試してみました。
ラズパイにAIカメラを接続しサンプルスクリプトでAIを動かしてみるまで短時間でセットアップすることができすごいなと思いました。

これまでRaspberryPi Zero単体ではなかなかAIの実行までスペックが追いつかず難しかったですが、AI Cameraと組み合わせればAIの推論結果のみ受け取るだけなのでスムーズに実行することができました。
RaspberryPi Zero単体は非常に小さく、設置スペースが限られている場所でも活用できるのでますますエッジAIの利用がしやすくなってきたなと思いました。

  1. Microsoft COCO: Common Objects in Context[2014] https://arxiv.org/abs/1405.0312 2

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?