Skip to main content

SSCMACoreライブラリを使用してモデル情報を出力する

note

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

SSCMACoreライブラリを使用してXIAO ESP32S3 SenseのSenseCraft AIでモデル出力を設定する

このWikiでは、SSCMACore(Seeed SenseCraft Model Assistant Core)ライブラリを使用して、XIAO ESP32S3 Senseボード上でSenseCraft AIのモデル出力を設定する手順を説明します。この手順に従うことで、XIAO ESP32S3 Senseを事前トレーニング済みモデルと連携させ、SSCMACoreライブラリを使用してモデルの出力を処理できるようになります。

前提条件

以下のものを準備してください:

  • XIAO ESP32S3 Sense
  • XIAO ESP32S3 Senseをコンピュータに接続するためのUSB-Cデータケーブル
  • Arduino IDE(Seeed_Arduino_SSCMACoreライブラリがインストールされていること)
XIAO ESP32S3 Sense

ステップ1. XIAO ESP32S3 Senseにモデルがロードされていることを確認する

作業を進める前に、XIAO ESP32S3 Senseボードにトレーニング済みモデルがロードされていることを確認してください。まだモデルをロードしていない場合は、SenseCraft AIのドキュメントを参照して、デバイスにモデルをトレーニングおよびデプロイする方法を確認してください。

独自にトレーニングしたモデルを使用したい場合は、以下の2つのWikiを参照してください。

ステップ2. SSCMAライブラリをセットアップする

Seeed_Arduino_SSCMACoreライブラリをGitHubリポジトリからダウンロードしてください。


ダウンロードしたライブラリをArduino環境に追加するには、以下の手順に従ってください:

  • Arduino IDEを開きます。
  • スケッチ -> ライブラリをインクルード -> .ZIP形式のライブラリを追加を選択します。
  • ダウンロードしたSeeed_Arduino_SSCMACoreライブラリを選択します。
  • 開くをクリックして、ライブラリをArduino環境に追加します。

ステップ 3. サンプルコードの選択と設定

SSCMAライブラリは、XIAO ESP32S3 Senseボード上でモデルの出力を操作する方法を示す2つのサンプルコードを提供しています。要件に応じて以下の例のいずれかを選択してください。

例 1: 推論

  1. inference.ino サンプルコードを開きます。
#include <SSCMA_Micro_Core.h>

#include <Arduino.h>
#include <esp_camera.h>


SET_LOOP_TASK_STACK_SIZE(40 * 1024);


SSCMAMicroCore instance;
SSCMAMicroCore::VideoCapture capture;


void setup() {

// シリアルポートの初期化
Serial.begin(115200);

// ビデオキャプチャの初期化
MA_RETURN_IF_UNEXPECTED(capture.begin(SSCMAMicroCore::VideoCapture::DefaultCameraConfigXIAOS3));

// SSCMA Micro Coreの初期化
MA_RETURN_IF_UNEXPECTED(instance.begin(SSCMAMicroCore::Config::DefaultConfig));

Serial.println("初期化完了");

}

void loop() {

auto frame = capture.getManagedFrame();

MA_RETURN_IF_UNEXPECTED(instance.invoke(frame));

for (const auto& box : instance.getBoxes()) {
Serial.printf("ボックス: x=%f, y=%f, w=%f, h=%f, スコア=%f, ターゲット=%d\n", box.x, box.y, box.w, box.h, box.score, box.target);
}

for (const auto& cls : instance.getClasses()) {
Serial.printf("クラス: ターゲット=%d, スコア=%f\n", cls.target, cls.score);
}

for (const auto& point : instance.getPoints()) {
Serial.printf("ポイント: x=%f, y=%f, z=%f, スコア=%f, ターゲット=%d\n", point.x, point.y, point.z, point.score, point.target);
}

for (const auto& kp : instance.getKeypoints()) {
Serial.printf("キーポイント: ボックス: x=%f, y=%f, w=%f, h=%f, スコア=%f, ターゲット=%d\n", kp.box.x, kp.box.y, kp.box.w, kp.box.h, kp.box.score, kp.box.target);
for (const auto& point : kp.points) {
Serial.printf("キーポイント: x=%f, y=%f, z=%f, スコア=%f, ターゲット=%d\n", point.x, point.y, point.z, point.score, point.target);
}
}

auto perf = instance.getPerf();
Serial.printf("パフォーマンス: 前処理=%dms, 推論=%dms, 後処理=%dms\n", perf.preprocess, perf.inference, perf.postprocess);

}

このサンプルコードは、SSCMAライブラリを使用して推論を実行し、モデルの出力(バウンディングボックス、クラス、ポイント、キーポイントなど)を取得する方法を示しています。このコードはビデオキャプチャとSSCMA Micro Coreを初期化し、カメラでキャプチャされた各フレームに対して推論を実行します。モデルの出力(バウンディングボックス、クラス、ポイント、キーポイントなど)はシリアルモニターに出力されます。

note

loop()関数は推論プロセスが行われる場所です。capture.getManagedFrame()を使用してフレームをキャプチャし、instance.invoke(frame)を使用してキャプチャされたフレームに対して推論を実行します。

推論後、コードはモデルからのさまざまな出力を取得して出力します:

  • バウンディングボックス: instance.getBoxes()関数はバウンディングボックスのベクターを返します。各バウンディングボックスには、座標(x, y, w, h)、スコア、ターゲットクラスなどの情報が含まれます。
  • クラス: instance.getClasses()関数は検出されたクラスのベクターを返します。各クラスにはターゲットクラスと対応するスコアの情報が含まれます。
  • ポイント: instance.getPoints()関数は検出されたポイントのベクターを返します。各ポイントには座標(x, y, z)、スコア、ターゲットクラスなどの情報が含まれます。
  • キーポイント: instance.getKeypoints()関数は検出されたキーポイントのベクターを返します。各キーポイントにはバウンディングボックスと関連するポイントのベクターが含まれます。コードはバウンディングボックス情報を出力し、ポイントを反復処理して座標、スコア、ターゲットクラスを出力します。

最後に、コードはinstance.getPerf()を使用してパフォーマンスメトリクスを取得し、前処理、推論、後処理の時間をミリ秒単位で出力します。

例 2: コールバックを使用した推論

  1. inference_cb.ino サンプルコードを開きます。
#include <SSCMA_Micro_Core.h>

#include <Arduino.h>
#include <esp_camera.h>


SET_LOOP_TASK_STACK_SIZE(40 * 1024);


SSCMAMicroCore instance;
SSCMAMicroCore::VideoCapture capture;


void setup() {

// シリアルポートの初期化
Serial.begin(115200);

// ビデオキャプチャの初期化
MA_RETURN_IF_UNEXPECTED(capture.begin(SSCMAMicroCore::VideoCapture::DefaultCameraConfigXIAOS3));

// SSCMA Micro Coreの初期化
MA_RETURN_IF_UNEXPECTED(instance.begin(SSCMAMicroCore::Config::DefaultConfig));

instance.registerPerfCallback(SSCMAMicroCore::DefaultPerfCallback);
instance.registerBoxesCallback(SSCMAMicroCore::DefaultBoxesCallback);
instance.registerClassesCallback(SSCMAMicroCore::DefaultClassesCallback);
instance.registerPointsCallback(SSCMAMicroCore::DefaultPointsCallback);
instance.registerKeypointsCallback(SSCMAMicroCore::DefaultKeypointsCallback);

Serial.println("初期化完了");

}

void loop() {

auto frame = capture.getManagedFrame();

MA_RETURN_IF_UNEXPECTED(instance.invoke(frame));

}

このサンプルコードは、SSCMAライブラリを使用して推論を実行し、モデルの出力を処理するためのコールバック関数を登録する方法を示しています。このコードはビデオキャプチャとSSCMA Micro Coreを初期化し、パフォーマンスメトリクス、バウンディングボックス、クラス、ポイント、キーポイントのためのコールバック関数を登録します。推論プロセス中に登録されたコールバック関数が呼び出され、モデルの出力の処理をカスタマイズできます。

note

コードでは以下のコールバック関数が定義されています:

  • perfCb: パフォーマンスメトリクスが利用可能になったときに呼び出されます。この関数はSSCMAMicroCore::PerfMetricsのインスタンスを受け取り、前処理、推論、後処理の時間を出力します。
  • boxCb: 検出された各バウンディングボックスに対して呼び出されます。この関数はSSCMAMicroCore::Boxのインスタンスを受け取り、ボックスの座標、スコア、ターゲットクラスを出力します。
  • classCb: 検出された各クラスに対して呼び出されます。この関数はSSCMAMicroCore::Classのインスタンスを受け取り、ターゲットクラスとスコアを出力します。
  • pointCb: 検出された各ポイントに対して呼び出されます。この関数はSSCMAMicroCore::Point3Dのインスタンスを受け取り、ポイントの座標、スコア、ターゲットクラスを出力します。
  • keypointsCb: 検出された各キーポイントに対して呼び出されます。この関数はSSCMAMicroCore::Keypointsのインスタンスを受け取り、バウンディングボックスと関連するポイントの情報を出力します。関数はバウンディングボックス情報を出力し、ポイントを反復処理して座標、スコア、ターゲットクラスを出力します。

setup() 関数では、シリアル通信がボーレート115200で初期化されます。その後、capture.begin() 関数を使用して、XIAO ESP32S3 Sense用のデフォルトカメラ設定でビデオキャプチャが初期化されます。SSCMA Micro Coreは、instance.begin() 関数を使用してデフォルト設定で初期化されます。

初期化後、コードはSSCMA Micro Coreインスタンスが提供する適切なメソッドを使用してコールバック関数を登録します:

  • instance.setPerfCallback(perfCb):perfCb関数をパフォーマンスメトリクスのコールバックとして登録します。
  • instance.setBoxCallback(boxCb):boxCb関数をバウンディングボックスのコールバックとして登録します。
  • instance.setClassCallback(classCb):classCb関数を検出されたクラスのコールバックとして登録します。
  • instance.setPointCallback(pointCb):pointCb関数を検出されたポイントのコールバックとして登録します。
  • instance.setKeypointsCallback(keypointsCb):keypointsCb関数を検出されたキーポイントのコールバックとして登録します。

loop() 関数では、capture.getManagedFrame() を使用してフレームをキャプチャし、instance.invoke(frame) を使用してキャプチャしたフレームに対して推論を実行します。推論プロセス中に、対応する出力データが利用可能になると、登録されたコールバック関数が呼び出されます。

コールバック関数を変更して、アプリケーションの要件に基づいて特定のアクションを実行したり、受信データをさらに処理したりすることができます。

ステップ 4. コードのアップロードと実行

USB-Cデータケーブルを使用して、XIAO ESP32S3 Senseボードをコンピュータに接続します。Arduino IDEで選択したサンプルコード(inference.ino または inference_cb.ino)を開きます。

Arduino IDEで適切なボードとポートを選択します:

  • ツール -> ボード に移動し、"XIAO ESP32S3 Sense" を選択します。
  • ツール -> ポート に移動し、XIAO ESP32S3 Senseが接続されているポートを選択します。
  • ツール -> PSRAM -> OPI PSRAM に移動し、PSRAMを有効にしてください。

Arduino IDEで「アップロード」ボタンをクリックして、コードをコンパイルしてXIAO ESP32S3 Senseボードにアップロードします。アップロードが完了したら、Arduino IDEのシリアルモニタを開いて、モデルの出力を確認します。

結論

このステップバイステップガイドに従うことで、SSCMAライブラリを使用してXIAO ESP32S3 Senseボード上でSenseCraft AIのモデル出力を設定できるようになったはずです。選択したサンプルコードに応じて、モデルの出力を直接取得するか、コールバック関数を使用して出力の処理をカスタマイズすることができます。

サンプルコードを自由に探索し、特定の要件に合わせて変更してください。SSCMAライブラリは、XIAO ESP32S3 Senseボード上でコンピュータビジョンや機械学習モデルを操作するための強力なツールと機能を提供します。

問題が発生した場合やさらに質問がある場合は、SenseCraft AIのドキュメントを参照するか、Seeed Studio コミュニティフォーラムでサポートを求めてください。

コンピュータビジョンと機械学習の世界をXIAO ESP32S3 Senseボードで楽しんでください!

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

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

Loading Comments...