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でのビルド編)

加速度センサ、マイクのセンサが内蔵されているので、簡単にデモが可能です。
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で構築してみた

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編)

Zephyr(RTOS)とC++の環境に実装する
Edge Impulseからダウンロードしたフォルダを確認してみます。
C++用のsdk、パラメータ、モデルが入っています。
ジェスチャー認識・音声認識のZephyrプロジェクトは下記に公開しています。
(個人用に雑に作成したものなので、あくまで参考までにお願いします。)
概要としては下記です。
- 音声認識…マイクを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」...などの簡単な音声データセットを利用できます。
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程度しか使用していない結果です。
1 2 3 4 |
Memory region Used Size Region Size %age Used FLASH: 142780 B 1428 KB 9.76% RAM: 68208 B 188 KB 35.43% IDT_LIST: 0 GB 32 KB 0.00% |
実際にプログラムを書き込んで、学習した”Nagoya”を認識できました。
下記のように約1秒間隔で音声認識することが出来ました。
(下記例では"honda", "osaka", "zephyr"を学習させた例です。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[00:01:11.715,762] <inf> dmic_sample: PCM output rate: 16000, channels: 1 Predictions (DSP: 61 ms., Classification: 3 ms., Anomaly: 0 ms.): honda: 0.00000 noise: 0.99609 osaka: 0.00000 zephyr: 0.00000 [00:01:12.769,590] <inf> dmic_sample: PCM output rate: 16000, channels: 1 Predictions (DSP: 61 ms., Classification: 3 ms., Anomaly: 0 ms.): honda: 0.00000 noise: 0.01172 osaka: 0.00000 zephyr: 0.98828 [00:01:13.823,641] <inf> dmic_sample: PCM output rate: 16000, channels: 1 Predictions (DSP: 61 ms., Classification: 3 ms., Anomaly: 0 ms.): honda: 0.00000 noise: 0.00000 osaka: 0.00000 zephyr: 0.99609 |
nRF52840
音声認識の方もnRF52840でも問題なく動作しました。
参考までにZephyrのwest環境での実行結果を残こしています。
1 2 3 4 5 6 7 |
cd %HOMEPATH% zephyrproject\.venv\Scripts\activate.bat cd zephyrproject cd test cd dmic_inference west build -p -b xiao_ble/nrf52840/sense west flash -r uf2 |
ビルド結果が下記となります。
RAMが78kB程度、FALSH(ROM)が192kB程度しか使用していない結果です。
1 2 3 4 |
Memory region Used Size Region Size %age Used FLASH: 191684 B 788 KB 23.76% RAM: 77752 B 256 KB 29.66% IDT_LIST: 0 GB 32 KB 0.00% |
下記のように問題なく認識できています。
nRF54L15よりnRF52840は処理速度は遅いため、内部のDSP処理も時間がかかっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
[00:02:42.414,733] <inf> dmic_sample: PCM output rate: 16000, channels: 1 Predictions (DSP: 120 ms., Classification: 6 ms., Anomaly: 0 ms.): honda: 0.00000 noise: 0.99609 osaka: 0.00000 zephyr: 0.00000 [00:02:43.540,313] <inf> dmic_sample: PCM output rate: 16000, channels: 1 Predictions (DSP: 120 ms., Classification: 5 ms., Anomaly: 0 ms.): honda: 0.00000 noise: 0.06250 osaka: 0.00000 zephyr: 0.93750 [00:02:44.666,229] <inf> dmic_sample: PCM output rate: 16000, channels: 1 Predictions (DSP: 120 ms., Classification: 5 ms., Anomaly: 0 ms.): honda: 0.07422 noise: 0.80859 osaka: 0.09375 zephyr: 0.02344 [00:02:45.791,839] <inf> dmic_sample: PCM output rate: 16000, channels: 1 Predictions (DSP: 120 ms., Classification: 5 ms., Anomaly: 0 ms.): honda: 0.00000 noise: 0.01172 osaka: 0.00000 zephyr: 0.98828 |
まとめ
Edge Impulseで作成したモデルを、Zephyr(RTOS)環境に実装しました。
XIAO nRF54L15(nRF52840) Senseのデバイスで動作させています。
加速度センサ使ったジェスチャー認識とマイクを使った音声認識を紹介しました。
コメント