Skip to main content

サポートされているソフトウェアの概要

Grove Vision AI Module V2を有効にする方法は2つあります:

SenseCraft AIでコード不要の入門

このセクションでは、SenseCraft AI Model Assistantを使用して、コード不要で他の開発ボードも不要で、迅速にデプロイして結果を観察する方法をご案内します:

SenseCraft AIとは?

SenseCraft AIは、ユーザーが公開されているAIモデルの膨大なライブラリを、エッジデバイスに簡単にデプロイできるようにします:

  • reComputer (NVIDIA Jetson)
  • Seeed Studio XIAO S3 Board
  • Vision AIモジュール、その他

シームレスでユーザーフレンドリーな体験を提供し、わずか数クリックで公開AIモデルをエッジデバイスに直接デプロイできます。

以下が含まれます:

  • Model Assistantソフトウェアサービス
  • Device Workspaceソフトウェアサービス

このセクションでは、「Model Assistant」を使用してモジュールを有効にします。SenseCraft AI Model Assistantの支援により、様々な共同作成モデルを簡単にアップロードし、結果を直接観察できます。

SenseCraft AI Model Assistantの入門ガイド

今度は、SenseCraft AIを使用してモジュールを迅速に開始します。これにはモジュールのみが必要です。

ステップ1. モデルを選択

まず、SenseCraft AI Model Assistantのメインページを開く必要があります。


デプロイしたいモデルを選択してクリックします。

ここでこのモデルの説明を確認でき、適している場合は右側のDeploy Modelボタンをクリックします。

ステップ2. モジュールを接続し、適切なモデルをアップロード

Type-Cケーブルを使用してGrove Vision AI V2をコンピュータに接続し、Connectボタンをクリックしてください。

Confirmボタンをクリックします。このページの左上角でUSB Single Serialを選択できます。その後、Connectボタンをクリックします。

モデルが正常にアップロードされるまで、このページで1〜2分間お待ちください。この処理中に他のページタブに切り替えると、アップロードが失敗する可能性があることにご注意ください(私たちのチームはこの問題の解決に積極的に取り組んでおり、間もなく修正される予定です)。

ステップ3. 観察

モデルが正常にアップロードされると、左側のPreviewでGrove Vision AI V2カメラからのライブフィードを確認できるようになります。


左側のPreview Settingsには、モデルの認識精度を最適化するために変更できる2つの設定オプションがあることがわかります。

  • Confidence: Confidenceは、モデルがその予測に割り当てる確実性または確率のレベルを指します。
  • IoU: IoUは、予測されたバウンディングボックスと真のバウンディングボックスとの精度を評価するために使用されます。
tip
  • Confidence: これは、コンピュータビジョンモデルがその推測にどの程度確信を持っているかを示します。パーセンテージのように考えてください:高いconfidenceは、モデルがより確実であることを意味します。
  • IoU (Intersection over Union): これは、2つのボックス間の重複の程度を測定します。画像内のオブジェクトの周りにボックスを描き、モデルもボックスを描いたと想像してください。IoUは、あなたのボックスがどの程度一致するかを示します。高いIoUは、ボックスがより近くにあることを意味します。

この時点で、モデルのアップロードと結果の観察が完了しました。

Seeed Studio XIAOボードと接続してArduinoでプログラミング

Arduinoライブラリの紹介

tip

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


Grove Vision AIはWiseEye2 HX6538チップを使用し、画像処理とモデル推論はGrove Vision AI内でローカルに処理され、その後結果がIICまたはUART経由でXIAOに出力されます。そのため、このライブラリの主な目的はGrove Vision AIのデータストリームを処理することであり、モデル推論や画像処理は含まれません。

Grove Vision AIはIIC経由でXIAOと通信し、デバイスのIICアドレスは0x62です。画像情報の転送はUSBシリアルポート経由で行われます。

機能

スケッチの開発を始める前に、ライブラリの利用可能な機能を見てみましょう。

  • bool begin(TwoWire *wire = &Wire, uint16_t address = I2C_ADDRESS, uint32_t wait_delay = 2, uint32_t clock = 400000) —— Grove Vision AI V2を初期化します。

    入力パラメータ:

    • TwoWire *wire —— このポインタはTwoWireオブジェクトを指し、通常I2Cデバイスとの通信に使用されます。
    • uint16_t address —— これはI2Cデバイスのアドレスで、I2Cバスに接続された特定のデバイスを識別します。
    • uint32_t wait_delay —— コマンドを送信する前に応答を待つ遅延時間(ミリ秒)。
    • uint32_t clock —— これはI2Cバスのクロックレート(Hz)です。

    戻り値: TrueまたはFalse。初期化成功時はtrue、初期化失敗時はfalse。

  • int invoke(int times = 1, bool filter = 0, bool show = 0) —— Grove Vision AI V2にINVOKEコマンドを送信し、Grove Vision AIがモデルの呼び出し、推論、認識を開始できるようにします。

    入力パラメータ:

    • int times —— Invokeの回数。
    • fileter —— 最後の結果が前の結果と異なる場合のみイベント応答が送信されることを意味します(ジオメトリとスコアで比較)。
    • bool show —— 最後の結果が前の結果と異なる場合のみイベント応答が送信されることを意味します(ジオメトリとスコアで比較)。
note

Grove Vision AIのプロトコル定義の詳細については、プロトコルドキュメントをお読みください。

戻り値: CMD_OKまたはCMD_ETIMEDOUT。モデルが正常に有効化された場合はCMD_OKを返し、そうでなければCMD_ETIMEDOUTを返します。

  • int available() —— IIC経由で接続されたデバイスから読み取り可能なデータのバイト数を確認します。

    入力パラメータ: なし。

    戻り値: デバイスから読み取ることができるデータバイト数。

  • int read(char *data, int length) —— IICインターフェースを介してGrove Vision AIからデータを読み取ります。この関数の目的は、提供されたデータポインタが指す配列に読み取ったデータを格納することです。

    入力パラメータ:

    • char *data —— データを格納するための配列。
    • int length —— 読み取るデータの長さ。

    戻り値: 読み取るデータの長さ。

  • int write(const char *data, int length) —— I2Cインターフェースを介して指定されたデバイスにデータを書き込みます。

    入力パラメータ:

    • const char *data —— 書き込むデータの内容。
    • int length —— 書き込むデータの長さ。

    戻り値: 書き込むデータの長さ。

  • std::vector<boxes_t> &boxes() { return _boxes; } —— 結果をボックスの形で出力します。

typedef struct
{
uint16_t x; // Horizontal coordinates of the centre of the box
uint16_t y; // Vertical coordinates of the centre of the box
uint16_t w; // Width of the identification box
uint16_t h; // Height of the identification box
uint8_t score; // Confidence in identifying as target
uint8_t target; // Target
} boxes_t;
  • std::vector<classes_t> &classes() { return _classes; } —— 結果をカテゴリとして出力します。
typedef struct
{
uint8_t target; // Target
uint8_t score; // Confidence in identifying as target
} classes_t;
  • std::vector<point_t> &points() { return _points; } —— 結果をドットとして出力します。
typedef struct
{
uint16_t x; // Horizontal coordinates of the identification point
uint16_t y; // Vertical coordinates of identification point
uint16_t z; // Relative depth coordinates of the identification point
uint8_t score; // Confidence in identifying as target
uint8_t target; // Target
} point_t;
note

ここでの深度座標は相対的なものであり、Grove Vision AIが深度カメラ対応であることを意味するものではありません。むしろ、アルゴリズムが相対的な深度座標を計算し、これは一部のモデル(例:face-3dモデル)で有効です。

  • perf_t &perf() { return _perf; } —— 画像処理と推論時間。
typedef struct
{
uint16_t prepocess; // Pre-processing time
uint16_t inference; // inference time
uint16_t postprocess; // Post-processing time
} perf_t;
note

出力は、モデルによってボックスやポイントを識別する情報を常に出力するとは限りません。

インストール

zipライブラリをダウンロードしたので、Arduino IDEを開き、Sketch > Include Library > Add .ZIP Libraryをクリックします。ダウンロードしたzipファイルを選択し、ライブラリが正しくインストールされると、通知ウィンドウにLibrary added to your librariesと表示されます。これはライブラリが正常にインストールされたことを意味します。

Seeed Studio XIAOを使い始める

機械視覚機能を持つセンサーのプロトタイプを作成したい場合は、XIAOの追加を検討することをお勧めします。XIAOとGrove Vision AI V2を使用することで、使用したいモデルを使用し、アプリケーション領域に迅速に展開することができます。

準備

ステップ 1. 必要な材料

このチュートリアルでは、XIAO ESP32S3を例として使用し、Arduinoプログラムの使用方法を紹介します。そのため、以下のハードウェアを準備することをお勧めします。

Seeed Studio XIAO ESP32S3Grove Vision AI V2OV5647-62 FOV Camera Module
for Raspberry Pi 3B+4B

次に、ピンの列を介してXIAOとGrove Vision AI V2を接続する必要があります(または拡張ボードとGroveインターフェースを使用します)。

caution

接続の方向にご注意ください。Grove Vision AIのType-Cコネクタは、XIAOのType-Cコネクタと同じ方向である必要があります。

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


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

tip

以下は、Grove Vision AI V2の例でサポートされているボードのリストです。次の例を完了するために使用したいボードを選択できます。このチュートリアルでは、XIAO ESP32S3を例として使用します。

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

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

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

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

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

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

ステップ 4. ArduinoJSONライブラリをインストールします。

Sketchメニューに移動し、**Include Library > Manage Libraries...**を選択します。これによりライブラリマネージャが開きます。ライブラリマネージャの上部にある検索バーで、ArduinoJSONと入力します。検索結果にArduinoJSONライブラリが表示されます。ライブラリの横にInstallボタンがあります。Installボタンをクリックします。Arduino IDEが自動的にライブラリをダウンロードし、Arduino開発環境にインストールします。

デモ 1. XIAOを使用して認識結果を取得する

以下の手順は、Grove Vision AI V2によって報告される認識情報を取得し、解析するのに役立つ簡単な例です。

#include <Seeed_Arduino_SSCMA.h>

SSCMA AI;

void setup()
{
AI.begin();
Serial.begin(9600);
}

void loop()
{
if (!AI.invoke())
{
Serial.println("invoke success");
Serial.print("perf: prepocess=");
Serial.print(AI.perf().prepocess);
Serial.print(", inference=");
Serial.print(AI.perf().inference);
Serial.print(", postpocess=");
Serial.println(AI.perf().postprocess);

for (int i = 0; i < AI.boxes().size(); i++)
{
Serial.print("Box[");
Serial.print(i);
Serial.print("] target=");
Serial.print(AI.boxes()[i].target);
Serial.print(", score=");
Serial.print(AI.boxes()[i].score);
Serial.print(", x=");
Serial.print(AI.boxes()[i].x);
Serial.print(", y=");
Serial.print(AI.boxes()[i].y);
Serial.print(", w=");
Serial.print(AI.boxes()[i].w);
Serial.print(", h=");
Serial.println(AI.boxes()[i].h);
}
for (int i = 0; i < AI.classes().size(); i++)
{
Serial.print("Class[");
Serial.print(i);
Serial.print("] target=");
Serial.print(AI.classes()[i].target);
Serial.print(", score=");
Serial.println(AI.classes()[i].score);
}
for (int i = 0; i < AI.points().size(); i++)
{
Serial.print("Point[");
Serial.print(i);
Serial.print("] target=");
Serial.print(AI.points()[i].target);
Serial.print(", score=");
Serial.print(AI.points()[i].score);
Serial.print(", x=");
Serial.print(AI.points()[i].x);
Serial.print(", y=");
Serial.println(AI.points()[i].y);
}
}
}
手順の説明

このArduinoスケッチは、Seeed_Arduino_SSCMAライブラリを使用してGrove Vision AI Module V2とインターフェースします。setup()関数では、AIモジュールが初期化され、シリアル通信が開始されます。

loop()関数は、Grove Vision AI Module V2の内蔵アルゴリズムを使用して推論を実行するためにinvoke()メソッドを繰り返し呼び出します。推論が成功すると、スケッチは前処理、推論、後処理の時間を含むパフォーマンス指標をシリアルモニターに出力します。

スケッチは推論結果の詳細情報を処理して出力します。これには以下が含まれます:

  • 検出されたオブジェクトの位置と寸法をx、y座標、幅、高さの形で識別するバウンディングボックス(boxes())。
  • 検出されたオブジェクトのカテゴリと信頼度スコアを識別する分類(classes())。
  • 検出されたオブジェクトの特定の特徴やキーポイントを、x、y座標と信頼度スコアと共に表すポイント(points())。

これらの結果は、AIモジュールによって検出されたオブジェクト、その位置、サイズ、および各検出や分類の信頼度レベルについての洞察を提供します。出力は、さらなる分析やデバッグのためにシリアルモニターに出力されます。

効果

引き続きジェスチャー検出モデルを使用します。アプリケーションをアップロードした後、シリアルモニターを開き、シリアルモニターのボーレートを9600に設定してください。「じゃんけん」を準備し、カメラの認識エリアに向けると、シリアルモニターに認識結果が出力されます。

デモ2. XIAO経由で制御コマンドを送信

Grove Vision AI V2はUARTプロトコルによる通信をサポートしており、内蔵プロトコルを使用することで、Grove Vision AI V2のHimax WE2チップを操作することが可能です。以下のサンプルプログラムは、XIAOを使用してシリアルポート経由でGrove Vision AI V2と通信する方法を示しています。

#include <Arduino.h>
#include <Wire.h>

#include <Seeed_Arduino_SSCMA.h>

SSCMA AI;

void setup()
{
// put your setup code here, to run once:
Wire.begin();
Serial.begin(115200);
while (!Serial)
delay(1000);

Serial.println("Proxy start");
}

char buf[512];
void loop()
{
int s_len = Serial.available();
if (s_len)
{
int len = Serial.readBytes((char *)buf, s_len);
AI.write(buf, len);
}
int t_len = AI.available();
if (t_len)
{
if (t_len > 512)
{
t_len = 512;
}

AI.read(buf, t_len);
Serial.write(buf, t_len);
}
}
手順の説明

このArduinoスケッチは、Seeed Studio Machine Learning Framework SSCMAを利用して、シリアルコンソールとGrove Vision AI V2モジュール間の通信インターフェースを確立します。このスケッチは、シリアルコマンドを介してGrove Vision AI V2モジュールとの間でデータをやり取りするように設計されています。

スケッチの修正された説明は以下の通りです:

setup()関数では:

  • Wire.begin()でI2C通信プロトコルが初期化され、Grove Vision AI V2モジュールとの通信が可能になります。
  • シリアル通信がボーレート115200で設定されます。
  • スケッチはシリアル接続がアクティブになるまで待機し、その後「Proxy start」をシリアルモニターに出力して、プロキシ通信チャネルの準備ができたことを示します。

loop()関数では:

  • スケッチはSerial.available()を使用して受信シリアルデータをチェックします。データがある場合、bufという名前のバッファに読み込みます。
  • バッファに収集されたデータは、AI.write()メソッドを使用してGrove Vision AI V2モジュールに送信されます。
  • 次に、スケッチはAI.available()を使用してGrove Vision AI V2モジュールが送り返すデータがあるかどうかをチェックします。
  • Grove Vision AI V2モジュールがデータを送信した場合、スケッチはAI.read()でこのデータをバッファbufに読み込み、データが512バイトのバッファサイズを超えないようにします。
  • 最後に、Grove Vision AI V2モジュールから受信したデータはSerial.write()を使用してシリアルコンソールに送信され、シリアルインターフェースとビジョンAIモジュール間の双方向通信が完了します。

この設定により、Grove Vision AI V2モジュールとのインタラクティブな通信が可能になり、ユーザーはシリアル接続を介してモジュールに指示を送信し、モジュールからデータを受信できます。

リソース

トラブルシューティング

Q1: XIAO ESP32C3を使用してDemo1のコードを正常にアップロードした後、ポートで認識結果が表示されないのはなぜですか?

Arduino IDE バージョン1.xxを使用している場合は、C3のResetを押した後にシリアルモニターを再度開いて結果を確認してください。Arduino バージョン2.xxを使用している場合は、Resetボタンを押した後にシリアルモニターでメッセージが更新されます。

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

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

Loading Comments...