SeeedStudioから発売されているエッジAIを使った物体認識モジュールを使ってみました。
物体認識の読み出し、認識モデルの変更をした内容を記事にしました。
VisionAI V2
簡単紹介
クラウドを使わないでデバイス単体でAI処理を簡潔できるモジュール。
カメラで撮った映像を解析してリアルタイムで物体認識できる。

クラウドを使わないので撮影情報の漏洩もなく安心して使える。
カメラの情報をモジュールが解析し、メタデータをXIAO規格のマイコン基板が読み出す。
※カメラモジュールを使いますが、画像の撮影そのものはできません。
メーカー製品説明 : Seeed studio
◆同梱品
VisionAI V2のみです。
Raspberry Pi CameraとXIAOマイコン基板は別途用意が必要です。
なお、組み合わせはXIAOマイコンでもESP S3を選択するのが無難と思います。
理由はこちら
◆入手
Ali Express で送料込みで約\2,400
◆関連記事
外観

ピン配置
XIAOのピン配置を転写しています。

使ってみた
◆まとめ
・VisionAI V2から推論データを読み取るマイコンはXIAO ESP32S3がいい。
・マイコンを使った推論データの読み出しはそれほど早くない。
・ほかのモデルはダウンロードサイトで簡単にデプロイできる。
◆開発環境
Arduino環境による開発をしました。
使用したマイコン基板はSeeedStudio XIAO ESP32S3。
ボードライブラリはesp32 by Espressif Systemを使いました。
モジュールライブラリに「Seeed Arduino SSCMA by Seeed Studio」を使いました。
◆合体
Raspberry Pi CameraとXIAOシリーズマイコンを接続します。
使用感がマイコンによって差があるので次の「基板の種類やマイコン依存」で説明します。
以下画像の撮影にはRaspberry Pi Camera Rev1.3 と XIAO RP2040の組み合わせですが、作業のほとんどはXIAO ESP32S3を使いました。
FFCを接続する作業です。
ヒンジの破損、FFCの斜めや浅差しによる勘合不良に注意。

◆読み出し
製品には初めから物体検出のAIパターンがインストールされていました。
(出荷時期によりパターンが違うことは考えられます)
推論データを読み出しUSBに出力した様子です。

Raspberry Pi カメラが撮影した画像からVisionAI V2が推論、結果をマイコン基板から読み出します。
この画像はXIAO RP2040で読み出していますが、少し時間がかかりました。
VisionAI V2からの読み出しはXIAO ESP32S3を使うのがよさそうです。
推論データを読み出しスケッチをベースに、何をどのくらいの確度で検出したかにより記録したり通知したりするスケッチに発展する形です。
◆基板の種類やマイコン依存
推論はVisionAI V2が行い、マイコン基板は結果の読み出しを行う構成です。
読み出しにI2Cを使います。
XIAO規格の基板、その他マイコンで使った結果に感じた差異を記載します。
1.XIAO規格の基板でも振る舞いが違う
試してみたXIAO基板と結果です。
XIAO規格以外の読み出しもできましたが、XIAO基板でESP S3, C6を使うのが手軽です。
| 結果 | 基板(CPU) |
|---|---|
| 1秒間に数回の読み出す | ESP32C6, ESP32S3 |
| 時々読み出す | ESP32C3 |
| ほとんど読み出さない | SAMD21, RP2040, RA4M1 |
| コンパイルして書き込めたが読み出さない | RP2350 |
| コンパイルできない | nRF52840 |
2.同じCPUでもボードライブラリにXIAO系を選択する
試してみたのはESP32C3 SuperMiniですが、ボードライブラリに「XIAO_ESP32C3」を選択しなければ推論データの読み出しができませんでした。
(ESP32C3 Dev Moduleでは読み出しができなかった)
◆プレトレーニングされたモデルのデプロイ
購入時には「人」を検出するモデルがデプロイされていました。
SenseCraft (外部サイト)には様々なモデルがアップされていて、手軽に新しいモデルのデプロイができました。
手順はこちらで紹介します。
この作業はVisionAI V2単体でも行うことができます。
新しいモデルをデプロイして推論した様子はSenseCraft Web上プレビュー確認できます。
こちらは犬と猫を認識している様子です。
使っているカメラモジュールは単焦点(RaspberryPi CameraV1.3)なので、プレビュー上で認識されやすい距離などを把握するといいと思います。

右側の情報はこのモデルをXIAO ESP32S3で読み出した結果です。
ターゲット = 0 が猫、ターゲット = 1が犬です。
時々見えない犬を検出しているようです。
サイトのプレビューでは推論結果を高速で読み出していますが、マイコンからの読み出しはXIAO ESP32S3を使ってもプレビューには及びません。
ライブラリが改良されて同等程度の読み出しができることを期待します。
そのほか
PDMマイク、マイクロSDカードリーダついていますが、現在使い方がわからないので保留とします。
今回サンプルに使った犬、猫認識の画像はCopilotに作ってもらいました。

準備
◆開発環境
Arduino環境でXIAO ESP32S3を使用します。
Arduino環境の準備はこちらの記事で紹介しています。
◆ボードライブラリ
Arduino IDEのボードマネージャからえesp32 by Espressif Systemのインストールをします。
ボードライブラリにはXIAO_ESP32S3を選択します。
| ボードマネージャのURL | https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json |
| 検索 | ESP |
| ボードライブラリ | esp32 by Espressif Systems バージョン x.x.x※ |
| 選択するボード | ツール > ボード > esp32 > XIAO_ESP32S3 |
◆モジュールライブラリ
| ライブラリ名 | 検索 | 動作確認Ver |
|---|---|---|
| Seeed Arduino SSCMA by Seeed Studio | sscma | 1.0.3 |
◆モデルのデプロイ
サイトのデザインが変わることも考えられます。
最近の参考操作手順です。
作業前の注意
推論データ読み出しを行うスケッチが書き込まれたXIAO基板またはI2Cが接続されているとSenseCraftでプレビューしている最中にVisionAI V2が停止することがあります。
デプロイやプレビューは単体で行うほうがトラブルを避けられる。
VisionAI V2にUSBケーブルでパソコンと接続します。
SenseCraft (外部サイト)に移動します。
ステップ1で検出したいモデルを選択します。
ステップ2のデプロイボタンを押します。
「注意する」のメッセージボックスで「確認」ボタンを押した後、選択したモデルがVisionAI V2に書かれている場合はUSBのポート番号選択へ、違うモデルの場合はモデルデータのフラッシュに遷移します。
書き込みは1~2分程度です。
シリアルポートの番号は環境により変わります。

作業
推論データの読み出し
説明
VisionAIから推論データを読み出し、結果をシリアル出力します。
配線
今回XIAO RP2040を使用しています。
画像のように接続し、XIAO RP2040にパソコンとUSBケーブルで接続します。

スケッチ
スケッチを使うためのライブラリは「モジュールライブラリ」で「Seeed Arduino SSCMA by Seeed Studio」をインストールします。
SeeedStudio のソフトウエアサポートサイトのサンプルプログラムを使いました。
ソフトウェアサポート | Seeed Studio Wiki
Grove Vision AI V2 を AT コマンドで使用する方法 | Seeed Studio Wiki(日本語版スケッチ有)
サイトのサンプルコード右上のコピーアイコンをクリックし、ArduinoIDE上にコピーします。

結果
推論データを読み出しました。
カメラとの距離は30cmから40cmくらいで自分を撮影してみました。
実感としてはうまく認識されるのが少し難しく、なかなか推論データの出力がされないので不安になることがあります。
辛抱強く角度や距離、明るさを変えることで読み出しができます。
XIAO ESP32 C6, S3 を使うことで解消できることがあります。

Boxが検出したオブジェクト、targetが検出したオブジェクトの種類。
今回target = 0 は人ですが、モデルにより0が犬だったり猫だったりします。
scoreが確度、検出した座標(x, y)と大きさ(w, h)です。
検出のしやすさは撮影対象や環境に依るところもありますが、デプロイされているモデルによっても違いがあると思います。
ESP32 C3 SuperMiniから読み出し
説明
ESP32 C3 SuperMiniを使いVisionAI V2から推論データを読み取ります。
ESP32 C3 SuperMiniのコンパイルには「ESP32C3 Dev Module」を使う紹介をしていましたが、「XIAO_ESP32C3」を選択しなければVisionAI V2から推論データの読み取りができませんでした。
I2Cのピンアサインも違うため、スケッチ上で変更が必要です。
配線

スケッチ
ボードライブラリは「XIAO_ESP32C3」を選択します。
ベースのスケッチは以下サイトのサンプルを使用します。
Grove Vision AI V2 を AT コマンドで使用する方法 | Seeed Studio Wiki(日本語版スケッチ有)
void setup() 関数内の先頭に以下1行を挿入します。
Wire.begin(8, 9);結果
結果は「推論データの読み出し」の結果と同じなので省略します。
読み出しの頻度はXIAO ESP32C3と同等に感じます。
使えなくはないが、XIAO基板を用意してドッキングするのがいいと感じます。






コメント