Skip to main content

Grove Vision AI モジュール

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

はじめに

Grove Vision AI モジュールセンサーは、親指サイズのAIカメラであり、すでに人検出やその他のカスタマイズされたモデル用のMLアルゴリズムがインストールされたカスタマイズセンサーです。数分で簡単に展開および表示でき、超低消費電力モードで動作し、2つの信号伝送方法と複数のオンボードモジュールを提供します。これにより、AI対応カメラの入門に最適です。

このWikiでは、Grove Vision AI モジュールセンサーをSeeed Studio XIAO シリーズおよびArduinoに接続して、人やパンダを検出し、それをウェブサイトに表示する方法を紹介します。

仕様

パラメータ説明備考
コネクタGrove (Arduino用Groveベース)5V充電およびデータ伝送
二列7ピンソケット (Seeed Duino XIAO)5V充電およびデータ伝送
USB Type-C5V充電およびファームウェア書き込み
通信モードIIC
プロセッサHimax HX6537-A400Mhz DSP (超低消費電力)
カメラセンサーOV2640チップ解像度 1600*1200
マイクMSM261D3526H1CPMチップ-26dBFs感度
加速度センサーSTLSM6DS3TR-Cセンサー3D加速度計および3Dジャイロスコープ

特徴

  • 使いやすいAIカメラ: カメラセンサーにエッジ機械学習アルゴリズムを適用し、物体検出に最適
  • プラグアンドプレイ: 数分で完全な機能を実行し、表示するための手間いらず
  • 超低消費電力: 物体の動きを検出した際に起動し、省電力を実現
  • コンパクトなAI対応カメラセンサー: デバイス自体は親指サイズで、視覚ベースでエッジインテリジェンスに適している
  • カスタマイズ可能なセンサーデザイン: ユーザーが定義するカスタムMLモデルをサポート
  • 2つの信号伝送をサポート: Seeed Studio XIAO のエレガントな接続とArduino用Groveベースのシンプルな接続に対応
  • オンボードカメラセンサー: OV2640チップを搭載し、1600*1200の解像度を提供
  • オンボードマイク: MSM261D3526H1CPMチップを搭載し、-26dBFsの感度を提供
  • オンボード加速度センサー: STLSM6DS3TR-Cセンサーを搭載し、3D加速度計および3Dジャイロスコープを検出
  • オンボード32MB SPI超低消費電力フラッシュ
  • すべてのデータ出力に1本のケーブル: Groveファミリーの簡素化された接続を表し、センサーとシングルボード間に1本のGroveケーブルのみが必要

ハードウェア概要

製品の基本的なパラメータについて知りたいと思われるかもしれません。以下の表は、Grove Vision AI Module Sensor の特性とピン配置に関する情報を示しています。

特性単位
動作電圧5V
通信速度115200
I2C インターフェースseeed studio XIAO & Arduino-
電源供給デュアル7ピンコネクタ & Type-C-
ダウンロード & ファームウェア書き込みインターフェースType-C-
寸法402013mm

ピン配置概要

  • 2 —— BL702
  • 3 —— MIC MSM261D3526H1CPM
  • 4 —— 6軸 LSM6DS3TR-C
  • 5 —— SPI フラッシュ
  • 9 —— USB Type-C
  • 10 —— デュアル7ピンメスソケット
  • 11 —— リセットボタン
  • 12 —— BOOTボタン
  • 13 —— USERボタン
  • 1 —— HX6537-A
  • 6 —— カメラコネクタ
  • 7 —— DC-DC チップ
  • 8 —— Grove コネクタ
  • 14 —— 電源ライト
  • 15 —— 書き込みインジケータライト

はじめに

このモジュールの基本的な機能を紹介し、その後、独自の機械学習モデルを構築するためのカスタマイズ方法を説明します。ただし、モジュールをプロジェクトに完全に適用する前に、モジュールを準備するためのいくつかのステップが必要です。

準備

ハードウェア

  • Grove Vision AI Module Sensor
  • Windows ホストPC(Win10でテスト済み)
  • Type-C ケーブル

Arduino ライブラリ概要

tip

Arduino を初めて使用する場合は、Arduino の使い方を参照することを強くお勧めします。

ここで使用するコードは、分類方法や選択可能なモデル(カスタマイズモデルを含む)を提供します。ここでデフォルトとして選択されているのは、物体検出方法と事前学習済みモデルです。

Seeed Studio は、今後さらに多くの方法とモデルを開発する予定ですので、ご期待ください。

機能

スケッチを開発する前に、ライブラリの利用可能な機能を確認しましょう。

  1. if (ai.begin(ALGO_OBJECT_DETECTION, MODEL_EXT_INDEX_1)) - ここで分類方法とモデルを選択できます。

    ALGO_OBJECT_DETECTIONALGO_OBJECT_COUNT または ALGO_IMAGE_CLASSIFICATION に変更できます。

    また、カスタマイズしたモデル(ファームウェア)をモジュールに書き込んだ場合、MODEL_EXT_INDEX_1MODEL_EXT_INDEX_2 または 3、4 に変更できます(命名したものに応じて)。

  2. object_detection_t data - これは結果が出力される構造体データセットです。

    分類方法を変更した場合、object_detection_timage_classification_t または object_count_t に対応して変更する必要があります。

  3. uint8_t len = ai.get_result_len() - ここでの "len" は検出された人間の顔の数を意味します。

  4. object_detection_t data - ここでのデータは 構造体 フォーマットを表し、タイプは事前定義された "object_detection_t" です。

    他の分類方法を選択した場合、image_classification_t data または object_count_t data に変更する必要があります。

  5. Serial.print(data.confidence) - 構造体 フォーマットは直接出力に使用できないため、ヘッダーファイルで定義された特定のタイプを指す必要があります。

typedef struct
{
uint16_t x;
uint16_t y;
uint16_t w;
uint16_t h;
uint8_t confidence;
uint8_t target;
} object_detection_t;
tip

ここで出力したい "confidence" は、カメラが物体を検出する際の「信頼度」を示します。

ライブラリのインストール

ZIP形式のライブラリをダウンロードしたら、Arduino IDE を開き、スケッチ > ライブラリをインクルード > .ZIPライブラリを追加 をクリックします。ダウンロードしたZIPファイルを選択し、ライブラリが正しくインストールされると、通知ウィンドウに ライブラリがライブラリに追加されました と表示されます。これでライブラリが正常にインストールされました。

ライブラリのアップグレード

将来的に、より興味深い機能のために製品ライブラリを最適化およびアップグレードする予定です。上記のライブラリインストール方法に基づき、アップグレード方法を以下に紹介します。

ライブラリが最適化された際にはリンクを更新します。コンピュータのフォルダ内の元のライブラリフォルダを削除し、最新バージョンをダウンロードして解凍し、Arduino IDE のライブラリディレクトリに配置してください。(...\Arduino\libraries. .... は Arduino を設定したパスです)

Seeed Studio XIAO / Seeeduino / Arduinoの例

ライブラリのインストールとファームウェアの書き込みが完了したので、Seeed Studio XIAO nRF52840およびSeeeduino V4.2でGrove AIモジュールセンサーを使用していくつかの例を実行し、その動作を確認します。

ステップ 1. Arduinoアプリケーションを起動します。

ステップ 2. 開発ボードモデルを選択し、Arduino IDEに追加します。

  • Seeeduinoを後の手順で使用したい場合は、このチュートリアルを参照して追加を完了してください。

  • Seeed Studio XIAO SAMD21を後の手順で使用したい場合は、このチュートリアルを参照して追加を完了してください。

  • Seeed Studio XIAO RP2040を後の手順で使用したい場合は、このチュートリアルを参照して追加を完了してください。

  • Seeed Studio XIAO nRF52840を後の手順で使用したい場合は、このチュートリアルを参照して追加を完了してください。

デモ 1 Seeed Studio XIAO nRF52840 / Seeeduino / Arduinoによる人間検出

このデモでは、人間の顔を検出し、モジュールが検出した人数をSeeed Studio XIAO nRF52840 SenseおよびSeeeduino V4.2 (Arduino UNO)で確認します。同時に、Seeed Studioはモジュールが見ている内容を表示するためのウェブサイトを提供しています。

必要な材料

  • Seeed Studio XIAO BLE Senseの場合
Seeed Studio XIAO nRF52840 SenseGrove AI Camera
  • Seeeduino V4.2の場合
Seeeduino V4.2Base ShieldGrove AI Camera

操作手順

  • ステップ 3 (Seeed Studio XIAOの場合). Type-Cケーブルを準備し、Seeed Studio XIAOシリーズボードに接続します。ピンごとにGrove AIモジュールに差し込み、もう1本のType-Cケーブルをモジュールに接続します。

    両方のType-CケーブルはPCに接続する必要があります。最終的に、モジュールのType-Cコネクタの向きはSeeed Studio XIAO SAMD21のType-Cコネクタと同じである必要があります。例えば:

  • ステップ 3 (Arduinoの場合). Groveケーブルを準備し、Arduinoボードに接続します。もう1本のType-Cケーブルをモジュールに接続します。
  • ステップ 4. プログラムをアップロードします。
#include "Seeed_Arduino_GroveAI.h"
#include <Wire.h>

GroveAI ai(Wire);
uint8_t state = 0;
void setup()
{
Wire.begin();
Serial.begin(115200);

Serial.println("開始");
if (ai.begin(ALGO_OBJECT_DETECTION, (MODEL_INDEX_T)0x11)) // オブジェクト検出と事前学習モデル1
{
Serial.print("バージョン: ");
Serial.println(ai.version());
Serial.print("ID: ");
Serial.println( ai.id());
Serial.print("アルゴリズム: ");
Serial.println( ai.algo());
Serial.print("モデル: ");
Serial.println(ai.model());
Serial.print("信頼度: ");
Serial.println(ai.confidence());
state = 1;
}
else
{
Serial.println("アルゴリズム開始失敗。");
}
}

void loop()
{
if (state == 1)
{
uint32_t tick = millis();
if (ai.invoke()) // 呼び出し開始
{
while (1) // 呼び出し終了を待つ
{
CMD_STATE_T ret = ai.state();
if (ret == CMD_STATE_IDLE)
{
break;
}
delay(20);
}

uint8_t len = ai.get_result_len(); // 検出された人数を受信
if(len)
{
int time1 = millis() - tick;
Serial.print("処理時間: ");
Serial.println(time1);
Serial.print("人数: ");
Serial.println(len);
object_detection_t data; // データ取得

for (int i = 0; i < len; i++)
{
Serial.println("結果: 検出済み");
Serial.print("検出と計算中: ");
Serial.println(i+1);
ai.get_result(i, (uint8_t*)&data, sizeof(object_detection_t)); // 結果取得

Serial.print("信頼度:");
Serial.print(data.confidence);
Serial.println();
}
}
else
{
Serial.println("識別なし");
}
}
else
{
delay(1000);
Serial.println("呼び出し失敗。");
}
}
else
{
state == 0;
}
}

シリアルモニターを開き、ボーレートを115200に設定すると、人検出の結果が継続的に表示されます。同時に、モジュールがキャプチャした画像もウェブサイトに表示されます。成功した出力は以下のようになります。

ウェブサイトの表示では、2つの顔がそれぞれ2つの番号で囲まれているのが確認できます。番号0はモジュールが検出した人の顔を示し、もう1つの番号は信頼度を示します。

note

すべてのブラウザがVision AIの結果表示をサポートしているわけではありません。以下の表で主要なブラウザごとのサポート状況を確認してください。

ChromeEdgeFirefoxOperaSafari
サポートサポート非サポートサポート非サポート

モデルについて

Seeed Studioは、事前にトレーニングされた人検出モデルを提供しており、今後さらに多くのモデルを提供する予定です。これらを直接使用することで、AIカメラを迅速に理解することができます。

Grove Vision AI用のファームウェアとモデルは以下の場所で見つけることができます。


デフォルトファームウェア: 人検出モデル

その他のモデル

私たちは、より便利なモデルを継続的にメンテナンスおよび更新しています。このリポジトリを定期的にチェックしてください。

tip

通常、モデルファイルはUF2形式であり、pre_num形式のサフィックスを持っています。

カスタムモデル

独自のモデルをカスタマイズしたい場合は、YOLOV5を使用したこちらを参照してください。

または、こちらのチュートリアルを参照して、ニーズに合わせたモデルをトレーニングしてください。

新しいモデルの置き換え

トレーニングモデルはすべて ".uf2" ファイルとして表されており、これが必要な形式です。

tip

通常、モデルファイルは UF2 形式であり、ファイル名の末尾に pre_num の形式の接尾辞が付いています。

  • ステップ 1. モジュールを Type-C ケーブルでホスト PC に接続し、モジュールの BOOT ボタンを ダブルクリック します。

"GROVEAI" ディスクがポップアップ表示されます。

  • ステップ 2. モデル .uf2 ファイルを GROVEAI ディスクにコピーして、ファームウェアのフラッシュを完了してください。

モジュールの作業 LED が高速で点滅しているのが確認できます。これはプロセスが進行中であることを意味します。ディスクが消えると、ファームウェアの書き込みプロセスが完了したことを示します。

  • ステップ 3. 使用しているモデルに応じてプログラムを修正してください。

提供されているデモでは、setup() 関数内で ai.begin() を呼び出してモデルを初期化しています。

if (ai.begin(ALGO_OBJECT_DETECTION, (MODEL_INDEX_T)0x11))

ai.begin() には2つの引数があります。1つはモデルの種類、もう1つはモデル番号です。番号はモデルによって異なる場合があります。つまり、サンプルプログラムのモデル番号は People Detected Model にのみ適用されます。他のモデルを使用する場合、番号は 0x11 ではなくなります。

caution

デモを使用している際に "Algo begin failed." というエラーメッセージが表示された場合、まずモデル番号が間違っていないか確認してください。

では、モデル番号をどのように決定するのでしょうか?R&D エンジニアが開発者向けに詳細な紹介文書を提供していますので、そちらをご覧ください。

しかし、長い記事を読みたくない場合は、リリースのモデル名の最後の数字に注目する簡単な方法があります。この数字が必要なモデル番号です。

例えば、モデル pfld_meter_pre_5.uf2 の場合、最後の数字は 5 です。これを使用して

ai.begin(ALGO_OBJECT_DETECTION, (MODEL_INDEX_T)5)

または、16進数に書き換えて

ai.begin(ALGO_OBJECT_DETECTION, (MODEL_INDEX_T)0x05)

と記述できます。

例外処理

実際の使用中に予期しない状況に遭遇した場合や、誤った使用によって医療処置以外の結果が発生した場合は、以下の手順を参照してモジュールのトラブルシューティングと修復を試みてください。

パート 1. BootLoader バージョンの確認

BootLoader バージョンを更新する必要があるかどうかを検出し、更新するかどうかを決定する必要があります。バージョン番号を確認する方法は以下の通りです。

Grove Vision AI を USB-C ポートを介してコンピュータに接続します。その後、Boot ボタンをダブルクリックすると、コンピュータに GROVEAI という名前の USB フラッシュドライブが表示されます。

このディスクドライブを開き、INFO_UF2.TXT ファイルを開きます。

図のように、最初の行に BootLoader バージョン番号が表示されます。2023年9月現在、最新の BootLoader バージョン番号は v2.0.1 です。同じバージョン番号を確認した場合、原則として次のステップを実行する必要はありません。

パート 2. BootLoader の更新

Grove Vision AI がコンピュータに認識されず、ポート番号が表示されない場合は、BootLoader を更新する必要があるかもしれません。

  • ステップ 1. Windows PC に BootLoader .bin ファイルをダウンロードします。

以下のリンクから最新バージョンの BootLoader ファイルをダウンロードしてください。BootLoader の名前は通常 tinyuf2-grove_vision_ai_vx.x.x.bin です。


これは BL702 チップを制御するファームウェアであり、コンピュータと Himax チップ間の接続を構築します。最新バージョンの BootLoader では、Vision AI が Mac や Linux に認識されない問題が修正されています。

  • ステップ 2. BLDevCube.exe ソフトウェアをダウンロードして開き、BL702/704/706 を選択し、Finish をクリックします。
  • ステップ 3. View をクリックし、まず MCU を選択します。その後 Image file に移動し、Browse をクリックして先ほどダウンロードしたファームウェアを選択します。
  • ステップ 4. PCに他のデバイスが接続されていないことを確認してください。その後、モジュールのBootボタンを押しながらPCに接続します。

    モジュールの背面で5Vライトと3.3V LEDライトが点灯しているのが確認できます。その後、Bootボタンを離します。

  • ステップ 5. PC上のBLDevCubeソフトウェアに戻り、Refreshをクリックして適切なポートを選択します。その後、Open UARTをクリックし、Chip EraseTrueに設定してから、Create&Programをクリックします。プロセスが完了するのを待ちます。

  • ステップ 6. 最新のBootLoaderが使用されていることを確認するために、Vision AIのバージョン番号を再度確認することをお勧めします。

パート 3. 工場出荷時のファームウェアを復元する

tip

最新バージョンのWindows 11でファームウェアをアップロードした際にデバイスが使用不能になった場合は、BootLoaderの更新セクションを参照する必要があります。

  • ステップ 1. ファームウェアを消去する
caution

このステップをスキップして直接Vision AIにファームウェアをコピーすることを試みることができます。それが成功すれば、元のファームウェアを消去する必要はありません。失敗した場合は、ファームウェアを消去する必要があります。

お持ちのArduinoマザーボードを使用してください。Seeed Studio XIAOシリーズ、Wio Terminal、またはSeeeduinoを推奨します。Grove Vision AIをIICインターフェースを介してマザーボードに接続します。

Arduino IDEを開き、ファームウェアを消去するプログラムをアップロードします。

#include "Seeed_Arduino_GroveAI.h"
#include <Wire.h>
WEI wei(Wire);

void setup()
{
Wire.begin();
Serial.begin(115200);
while (!Serial)
{
/* コード */
}
delay(1000);
Serial.println("任意のキーを押して消去を開始");
}

void loop()
{
if (Serial.available())
{
while (Serial.available())
{
Serial.read();
}
uint32_t id = wei.ID();
Serial.print("ID: 0x");
Serial.println(id, HEX);
wei.enter_bootloader();
Serial.println("消去中");
wei.erase();
Serial.println("消去完了");
}
}

シリアルモニタを開き、ランダムな文字(例: "a")を入力して送信をクリックします。すると消去操作が開始されます。以下のメッセージが表示された場合、ファームウェアの消去が成功したことを示します。次のステップに進むことができます。

  • ステップ 2. モジュールをType-CケーブルでホストPCに接続し、モジュールのBOOTボタンをダブルクリックします。

「GROVEAI」というディスクがポップアップ表示されます。

  • ステップ 3. 工場出荷時のファームウェアをダウンロードする

以下のリンクから最新バージョンの工場出荷時ファームウェアをダウンロードしてください。工場出荷時ファームウェアの名前は通常、grove_ai_without_crc_vxx.uf2またはgrove_ai_vxx.uf2です。


tip

2023年9月時点での最新ファームウェアバージョンはgrove_ai_v02-00.uf2です。

  • ステップ 4. 工場出荷時ファームウェアをフラッシュする

grove_ai_without_crc_vxx.uf2またはgrove_ai_vxx.uf2ファイルをGROVEAIディスクにコピーして、ファームウェアのフラッシュを完了します。

上記の3つのパートを順に判断して実行する必要があります。これらのステップを実行した後、再度操作を試みてください。それでも問題が解決しない場合は、技術サポートチームにお問い合わせください。

トラブルシューティング

Q1: 主な接続方法は何ですか?

  • a. まずマイクロコントローラーとモジュールを接続します。
  • b. 次にマイクロコントローラーをホストPCに接続します。
  • c. 最後にモジュールをホストPCに接続します。

Q2: なぜウェブサイトで画像が表示されないのですか?または検出が行われないのですか?

  • a. モジュールが加熱されていますか?モジュールのみを接続すると加熱問題が発生し、一時的にモジュールが機能しなくなることがあります。
  • b. 正しい方法で接続されていますか?

Q3: Grove Vision AIが使用中に突然「Algo begin failed.」というエラーを表示するのはなぜですか?

提供されたデモでは、setup()関数内でai.begin()を呼び出してモデルを初期化しています。

if (ai.begin(ALGO_OBJECT_DETECTION, (MODEL_INDEX_T)0x11))

ai.begin()には2つの引数があります。1つ目はモデルの種類、2つ目はモデル番号です。モデル番号はモデルによって異なる場合があります。つまり、サンプルプログラムのモデル番号はPeople Detected Modelにのみ適用されます。他のモデルを使用する場合、番号は0x11ではなくなります。

caution

デモを使用中に「Algo begin failed.」というエラーメッセージが表示された場合、まずモデル番号が間違っていないか確認してください。

では、モデル番号をどのように確認するのでしょうか?弊社のR&Dエンジニアが開発者向けに詳細な紹介文書を提供しています。

しかし、長い記事を読みたくない場合、簡単な方法としては、リリース内のモデルの最後の数字に注目することです。この数字が必要なモデル番号です。

例えば、モデル pfld_meter_pre_5.uf2の場合、最後の数字は5です。つまりモデル番号は5です。以下のように直接使用できます。

ai.begin(ALGO_OBJECT_DETECTION, (MODEL_INDEX_T)5)

または、16進数に書き換えて

ai.begin(ALGO_OBJECT_DETECTION, (MODEL_INDEX_T)0x05)

とすることもできます。

リソース

技術サポート & 製品ディスカッション

弊社製品をお選びいただきありがとうございます!製品の使用体験がスムーズになるよう、さまざまなサポートを提供しています。異なる好みやニーズに対応するため、いくつかのコミュニケーションチャネルをご用意しています。

Loading Comments...