Edge ImpulseをZephyr(RTOS)とC++の環境に実装する

本サイトはアフィリエイト広告を利用しています。
Zephyr

Edge Impulseで作成したモデルを、Zephyr(RTOS)環境に実装しました。

XIAO nRF54L15(nRF52840) Senseのデバイスで動作させています。

加速度センサ使ったジェスチャー認識とマイクを使った音声認識を紹介します。

 

スポンサーリンク

Edge ImpulseをZephyr(RTOS)とC++の環境に実装する

Edge Impulseで作成したモデルを、Zephyr(RTOS)環境に実装しました。

XIAO nRF54L15/nRF52840 Senseの2つのデバイスで動作させています。

 

加速度センサ使ったジェスチャー認識とマイクを使った音声認識を紹介します。

実際にテストした際の動画が下記となります。

 

XIAO nRF54L15 Sense

Seeed社が販売している、XIAO nRF54L15 Sense でデモをしています。

NordicのnRF54L15 がSoCとして搭載されています。概要を紹介したブログ記事が下記です。

XIAO nRF54L15 Senseの始め方(westでのビルド編)

XIAO nRF54L15 Senseの始め方(westでのビルド編)
XIAO nRF54L15 SenseでZephyrのHello Worldをしてみました。NordicのツールのnRF Connectを使わずにテストしてみました。ZephyrのWestを使ったビルドした内容を紹介します。XIAO nRF...

 

加速度センサ、マイクのセンサが内蔵されているので、簡単にデモが可能です。

 

nRF Connect(XIAO nRF54L15)

下記の公式手順ではNordicのツールのnRF Connectでテストする手順が紹介しています。

まずはこの手順に従いテストすることをおススメします。

今回実施した環境はV.3.0.1で実施しています。

 https://wiki.seeedstudio.com/xiao_nrf54l15_sense_getting_started/

 

VS Code上でインストールする手順もブログ記事でまとめていますので参照ください。

nRF Connectの開発環境をVSCodeで構築してみた

nRF Connectの開発環境をVSCodeで構築してみた
NordicのnRF54L15やnRF5430を開発するための環境を整えました。普通のWindowsのPCとVSCode上で構築しています。Nordicのソフトウェア開発環境として使用したツールと、セットアップ方法を紹介します。nRF Co...

 

XIAO nRF52840 Sense

またXIAO nRF52840 Senseでもテストしています。(写真→です)

nRF54L15と比べると古いタイプで、スペックも低いですが同様に実装できることを確認します。

XIAO nRF52840 Senseも加速度センサとマイクは内蔵しています。

west(XIAO nRF52840)

XIAO nRF52840ではSeeed公式はZephyrのWestを使ったビルドを紹介しています。

 https://wiki.seeedstudio.com/XIAO-nRF52840-Zephyr-RTOS/

今回テストする際もnRF Connectではなく、Zephyrのwestを使ってビルドしました。

 

Edge Impulseでの(加速度センサの)学習例

Edge Impulseでデバイスの加速度センサのデータを学習させています。

データ収集プログラムから、Edge Impulseへのデータのアップ方法も紹介しています。

Edge Impulseで加速度センサ値を学習(XIAO nRF54L15 Sense編)

Edge Impulseで加速度センサ値を学習(XIAO nRF54L15 Sense編)
Edge Impulseで加速度センサのデータを学習させました。XIAO nRF54L15 Senseを使用しています。プログラムから、Edge Impulseへのデータのアップ含めて紹介します。Edge Impulseで加速度センサ値を学...

 

Zephyr(RTOS)とC++の環境に実装する

Edge Impulseからダウンロードしたフォルダを確認してみます。

C++用のsdk、パラメータ、モデルが入っています。

 

ジェスチャー認識・音声認識のZephyrプロジェクトは下記に公開しています。

(個人用に雑に作成したものなので、あくまで参考までにお願いします。)

zephyr-ei-xiao-nrf-demo/src at main · iotengineer22/zephyr-ei-xiao-nrf-demo
This repository present Zephyr Demo with Edge Impulse and XIAO nRF54l15/nRF52840 Sense - iotengineer22/zephyr-ei-xiao-nr...

 

概要としては下記です。

  • 音声認識…マイクを1秒データ保存→推論のループ
  • ジェスチャー認識…加速度センサx,y,zを2秒データ保存→推論のループ

 

Edge Impulse のデータをZephyrのプロジェクトにコピーします。

あとはビルドして、XIAO nRF54L15(nRF52840) Senseに書き込みます。

 

ジェスチャー認識のデモ

ジェスチャー認識のデモです。

学習させたidle, circle, updown, flickの4パターンでtestしています。

約3分間の学習ですが、十分に認識してくれます。

 

音声認識のデモ

音声認識のデモも試しています。学習からテストのデモ動画が下記となっています。

 

Edge Impulse上でPCのマイクから音声を学習することもできます。

 

約1分間の"Nagoya”という音声をレコードしています。

他にも”idle(無音)”や別音声も学習させています。

 

既存のデータセットを使いたい場合

TFLite-Microのサンプル音声データを使うことで、音声のレコードせずともテストできます。

下記のリポジストリに保存されています

「Yes」「No」「Up」「Down」...などの簡単な音声データセットを利用できます。

 https://github.com/tensorflow/tflite-micro/tree/main/tensorflow/lite/micro/examples/micro_speech/train

 

Zephyrではないのですが、Arduinoのプログラムは先駆者はいましたので参考にしています。

 https://wiki.seeedstudio.com/ja/XIAO-BLE-PDM-EI/

 

今回は下記設定でEdge Impulseの対応しています。他は全てデフォルト設定です。

  • Processing block…MFCC
  • Learning block…Classification

 

ビルド後にダウンロードできる、SDK、パラメータ、モデルを使います。

Zephyrのプロジェクトにコピーします。

 

 

nRF54L15をnRFConnectでビルドした結果の一例です。

RAMが68kB程度、FALSH(ROM)が143kB程度しか使用していない結果です。

 

実際にプログラムを書き込んで、学習した”Nagoya”を認識できました。

 

下記のように約1秒間隔で音声認識することが出来ました。

(下記例では"honda", "osaka", "zephyr"を学習させた例です。)

 

nRF52840

音声認識の方もnRF52840でも問題なく動作しました。

参考までにZephyrのwest環境での実行結果を残こしています。

 

ビルド結果が下記となります。

RAMが78kB程度、FALSH(ROM)が192kB程度しか使用していない結果です。

 

下記のように問題なく認識できています。

nRF54L15よりnRF52840は処理速度は遅いため、内部のDSP処理も時間がかかっています。

 

まとめ

Edge Impulseで作成したモデルを、Zephyr(RTOS)環境に実装しました。

XIAO nRF54L15(nRF52840) Senseのデバイスで動作させています。

加速度センサ使ったジェスチャー認識とマイクを使った音声認識を紹介しました。

コメント