📷

Raspberry Pi + AI Camera を動かす 前編

2024/11/25に公開

この記事について

この記事では Raspberry Pi AI Camera を動かしてみた手順の記録になります。
Raspberry Pi AI Camera には SONYの IMX500 が搭載されています。IMX500はCMOSイメージセンサーと推論アクセラレーションが搭載されており、カメラ側で推論を動かすことが可能です。

誰が書いているのか

株式会社アラヤのエッジAI チームの小林です。
普段は、エッジAIシステムの開発などを行っています!
アラヤのエッジAIチームでは、アラヤの"人類の未来を圧倒的に面白く!"するというビジョンを達成するために、"すべてのモノにAIを乗せる"というミッションに取り組んでいます。

必要なハードウェア

ハードウェア リンク 補足
Raspberry Pi 5 https://www.raspberrypi.com/products/raspberry-pi-5/ 本ブログでは8GBメモリを使っています
IMX500 https://www.raspberrypi.com/products/ai-camera/
27W USB-C Power Supply https://www.raspberrypi.com/products/27w-power-supply/ PSEマークがありません

その他必要なもの

  • MicroSDカード(本ブログでは64GBを使っています)
  • マイクロHDMIケーブルとかキーボードとかマウスなど

電源に関する補足

  • 本来は5V,5Aを出力可能な電源を使う事が推奨されています(つなぐもの次第なので必須ではないが IMX500 使うならあったほうが良いです)
  • 本ブログではPSEマークのついている、次の電源を使用しています
  • 最近では5V,5Aを出力可能でPSEマーク付きの電源が入手可能になっています

Raspberry Pi本体のセットアップ

OSのセットアップ

セットアップ方法 に沿ってセットアップを進めます。

AI Camera のセットアップ

AI Cameraに沿ってセットアップを薦めます。

Raspberry Pi 4 を利用する場合は、同梱されている先の太いCSIケーブルを利用します。
Raspberry Pi 5 を利用する場合は、同梱されている先の細いCSIケーブルの方に差し替えます。
下記写真は Raspberry Pi 5 になります。

  • Raspberry Pi 5 側の写真


  • IMX500 側の写真


AI Camera のドライバーをセットアップ

Raspberry Pi のシステムをフルアップグレードし imx500 のパッケージをインストールします。

sudo apt update && sudo apt full-upgrade
sudo apt install imx500-all

Raspberry Pi 4 の場合は /boot/firmware/config.txt を一部変更する必要があります。
カメラの自動検出をオフにし、dtoverlayimx500 を指定します。

# Automatically load overlays for detected cameras
camera_auto_detect=0

...(中略)...

[all]
dtoverlay=imx500

Raspberry Pi 5 の場合はインストール完了後に、何もせずに進んで大丈夫です。

Raspberry Pi を再起動し、起動ログでドライバが認識されるのを確認します

sudo dmesg | grep imx500

[    0.752574] platform 1f00128000.csi: Fixed dependency cycle(s) with /axi/pcie@120000/rp1/i2c@80000/imx500@1a
[    3.248353] rp1-cfe 1f00128000.csi: found subdevice /axi/pcie@120000/rp1/i2c@80000/imx500@1a
[    3.319571] imx500 4-001a: Device found is imx500
[    3.320761] rp1-cfe 1f00128000.csi: Using sensor imx500 4-001a for capture

IMX500の動作確認

サンプルで動作確認を行います。
動作検証に必要なコマンドや、サンプルモデルは前の手順でインストールされています。

rpicam-hello -t 0s --post-process-file /usr/share/rpi-camera-assets/imx500_mobilenet_ssd.json --viewfinder-width 1920 --viewfinder-height 1080 --framerate 30

[0:07:45.373018676] [2140]  INFO Camera camera_manager.cpp:325 libcamera v0.3.2+27-7330f29b
[0:07:45.380744792] [2143]  INFO RPI pisp.cpp:695 libpisp version v1.0.7 28196ed6edcf 29-08-2024 (16:33:32)
[0:07:45.381694263] [2143]  WARN CameraSensorProperties camera_sensor_properties.cpp:305 No static properties available for 'imx500'
[0:07:45.381707374] [2143]  WARN CameraSensorProperties camera_sensor_properties.cpp:307 Please consider updating the camera sensor properties database
[0:07:45.400035779] [2143]  INFO RPI pisp.cpp:1154 Registered camera /base/axi/pcie@120000/rp1/i2c@80000/imx500@1a to CFE device /dev/media0 and ISP device /dev/media2 using PiSP variant BCM2712_C0
Made X/EGL preview window
IMX500: Unable to set absolute ROI
Reading post processing stage "imx500_object_detection"

------------------------------------------------------------------------------------------------------------------
NOTE: Loading network firmware onto the IMX500 can take several minutes, please do not close down the application.
------------------------------------------------------------------------------------------------------------------

Reading post processing stage "object_detect_draw_cv"
Mode selection for 1920:1090:12:P(30)
    SRGGB10_CSI2P,2028x1520/30.0219 - Score: 2416.27
    SRGGB10_CSI2P,4056x3040/9.9987 - Score: 43305.9
Stream configuration adjusted
[0:07:48.022603542] [2140]  INFO Camera camera.cpp:1197 configuring streams: (0) 1920x1090-YUV420 (1) 2028x1520-RGGB_PISP_COMP1
[0:07:48.022669893] [2143]  INFO RPI pisp.cpp:1450 Sensor: /base/axi/pcie@120000/rp1/i2c@80000/imx500@1a - Selected sensor format: 2028x1520-SRGGB10_1X10 - Selected CFE format: 2028x1520-PC1R
Network Firmware Upload: 100% (3872/3872 KB)


  • SSD mobilenet v2 のモデルが動きました。滑らかに動作しており、物体検知も出来ています。

動作のビデオを録画するにはrpicam-vid を使用します。

rpicam-vid -t 10s -o output.264 --post-process-file /usr/share/rpi-camera-assets/imx500_mobilenet_ssd.json --width 1920 --height 1080 --framerate 30

コマンドを実行したディレクトリに H264形式で output.264 が出力されます。
mp4 形式で出力する場合は以下のようになります。

rpicam-vid -t 10s --libav-video-codec h264_v4l2m2m --libav-format mp4 -o output.mp4 --post-process-file /usr/share/rpi-camera-assets/imx500_mobilenet_ssd.json --width 1920 --height 1080 --framerate 30

まとめ

Raspberry Pi と AI Camera を接続して、サンプルを動かすことができました。
パフォーマンスも非常に良好で、エッジデバイスとして活躍が期待できるデバイスでした。
今回は用意されたサンプルを動かすところまででした。
次回は自分たちで用意したモデルを変換してAI Cameraで動かすところまで紹介する予定です。

エッジAIからLLM構築まで気軽にご相談ください!
株式会社アラヤの先端研究支援
株式会社アラヤのエッジAI
SubnetX

Discussion