Arduino音声認識エンジンで音声コマンド
i
このチュートリアルは、すでに製品ライフサイクルの終了(EOL)を迎えた製品を対象としています。

Arduino音声認識エンジンを使い、音声コマンドでデバイスを制御します。


Author:Pablo MarquínezLast revision:2024/09/25

音声認識とは

音声認識は、音声を取得、解釈し、音声をテキストに変換(Speech To Text: STT)する技術分野です。音声がテキストに変換されると、音声ディクテーション、音声コマンドコントローラー、健康モニタリング、ロボット、人工知能、アクセシビリティなど、様々なアプリケーションに適用することができます。

Arduino音声認識エンジン

Cyberonが開発したArduino音声認識エンジンは、市場で最もすばらしい組込みマイクロコントローラーで、音声認識するためのプラットフォームの一つです。複数のArduinoボードで完全互換性があり、Arduino IDEを使うことで、趣味のプロジェクトから商用製品で、柔軟で効率的、容易に利用可能です。

Arduino音声認識エンジンは、ライセンス形態によっては、さらにカスタマイズ可能です。詳細は、このチュートリアルのライセンスを参照してください。

概要

このチュートリアルでは、Arduino音声認識エンジンを使い、複数の音声コマンドの設定方法と、認識したコマンドによるカスタムタスクの実行方法を示します。実現するには、ボードの登録や無料の試用ライセンスの有効化を行う必要があります。その後、デモスケッチをテストし、カスタム音声コマンドの作成方法を示します。

ツールの全ての機能を使うことに興味があれば、無料ライセンスの制限を取り除く有料ライセンスの取得方法も示します。

目的

  • 音声コマンドトリガーの設定
  • ボードのシリアルナンバーの取得とライブラリ設定に必要なファイルの取得
  • ライセンスの取得とデモスケッチの利用
  • カスタム音声コマンドを使う新規プロジェクトの作成
  • 無料ライセンスの制限を取り除くための、優良ライセンスの取得方法を学ぶ

必要なハードウェアとソフトウェア

Arduino音声認識エンジンを使うには、以下のボードのどれかが必要です。

Portenta H7を使う場合、Portenta Visionシールドを使うのではなく、外付けハードウェアとして外部マイクを使うことができます。

以下のハードウェアとソフトウェアも必要です。

説明

Arduino音声認識エンジンは、Cyberonによって開発されたソリューションで、その能力を引き出すには、いくつかの追加手順が必要です。このチュートリアルでは、以下を説明します。

  • Arduinoデバイスのシリアルナンバーの取得
  • IDEへのライブラリのインストール
  • 無料デモのテスト

エンジンの機能を拡張するには、Arduinoストアのバウチャーを購入する必要があります。以下のステップに従ってください。

  • Cyberonのウェブサイトで必要な情報を入力する
  • 必要なファイルを取得してライセンスを有効化する

設定

ライブラリの設定

3つのライブラリがあり、利用するボードにより、どれかをインストールする必要があります。

  • Portenta H7 Family: Cyberon_DSpotterSDK_Maker_PortentaH7
  • Nicla Vision: Cyberon_DSpotterSDK_Maker_NiclaVision
  • Nano 33 BLE Sense (Rev1 & Rev2): Cyberon_DSpotterSDK_Maker_33BLE
  • Nano RP2040: Cyberon_DSpotterSDK_Maker_RP2040
i
それぞれのライブラリの"extra"フォルダには、Cyberonにが作成した追加の文書が格納されています。詳細な情報が必要であれば参照してください。

ライブラリマネージャで、ボード用の必要なライブラリを検索し、インストールしてください。

ライブラリのインストールに関する詳細な情報が必要であれば、このガイドを参照してください。

シリアルナンバーの取得

Arduino音声認識エンジンを使うには、無料の試用ライセンスか有料ライセンスが必要です。どちらの場合でも、使用するボードのシリアルナンバーが必要です。

ボードのシリアルナンバーを取得するには、ライブラリをダウンロードして、ファイル > スケッチ例 > Cyberon_DSpotterSDK > GetSerialNumberと進みます。

PCにボードを接続し、スケッチをアップロード後、シリアルモニタを開くとデバイスのシリアルナンバーが表示されます。

i
Arduino IDE 1.6..x以前のバージョンでは、以下のようにしてもシリアルナンバーを取得できます。ボードのシリアルポートを選び、ツール > ボード情報を取得をクリックすると、“SN"番号が表示されるので、それを記録してください。

デモライセンスを取得する

シリアルナンバーを取得したら、https://tool.cyberon.com.tw/ArduinoDSpotterAuth/FDMain.php を開きます。

  • ボードを選択する
  • “Board serial number"フィールドに書き込む
  • Submitボタンをクリックする

全ての準備が整えば、Submitボタンをクリックして、ライセンスを取得してください。ライセンスを示す数字の配列が表示されます。ライセンスを安全な場所に保存してください。次のステップで利用します。

無料のデモスケッチのテスト

  • スケッチを開く: ファイル > スケッチ例 > Cyberon_DSpotterSDK > VoiceRecognition
  • CybLicense.hタブをクリック
  • 以下のように、波括弧{}の間にライセンスをペースト
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#include <stdint.h>

const uint32_t g_lpdwLicense[] = {
    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
    };
i
g_lpdwLicenseの値を、取得したライセンスに置き換えることを忘れないでください。

VoiceRecognitionに戻り、スケッチをアップロードします。

次に、シリアルモニタを開くと、利用できるコマンドが表示されています。これらが、CyberonSDKが認識できるコマンドです。

次にエンジンをテストします。コマンドを大きな声で話すと、どのように音声を認識するかがわかります。

利用しているスケッチとライセンスはデモバージョンで、以下の制約があります。

  • ボード開始後最大50回まで認識
  • 各トリガーの前に20秒の遅延

コマンドのカスタマイズ

機能と人とのやり取りを拡張するために、Arduino音声認識エンジンで音声コマンドを作成することができます。このセクションでは、カスタム音声コマンドを含む新しいプロジェクトを作成するために、Cyberon Model Configurationの使い方を学びます。

i
ここで紹介する方法は、チュートリアルで利用する試用ライセンスと有料ライセンスとで互換性があります。

Cyberon Model Configurationに行き、必要なフィールドに記入してください。

  • 電子メールアドレス
  • ボードモデル
  • ボードのシリアルナンバー
  • EULA Agreement: 注意深く読んでください

Nextをクリックすると新しいページに移ります。

  • 新規プロジェクトの作成
  • 既存プロジェクトのインポート

新規プロジェクトの作成

i
注意: 各プロジェクトは、入力したシリアルナンバーを持つ1台のArduinoボードに結び付いています。Arduino音声認識エンジンを別のArduinoで使う場合は、新規プロジェクトを0から作成し、新しいシリアルナンバーを割り当てる必要があります。

新規プロジェクトを作成するには、まず音声認識の言語を選ぶ必要があります。設定したら、Createをクリックします。

新しいトリガーを作成するために、以下のステップの設定を行います。

  • 入力トリガーワード(例えば、“Hey Arduino”)を作成します。入力トリガーワードは、デバイスに通知し、その後にコマンドを発話することをボードに知らせます。
  • コマンドリストを追加します。コマンドは、スケッチのタスクを実行するのに使います。例えば、shareというコマンドがあるとき、後で、コマンドを取得してスケッチで何かを行うことが簡単にできます。
  • 次のステップでは、入力したデーが正しいかを確認します。Nextをクリックして終了します。

次のページでは、既に設定されている設定が全て表示されます。すべて正しいか確認してください。間違いがあれば、Backをクリックして修正してください。

全て確認したら、Confirmをクリックし、ヘッダーファイル(model.h)を作成します。このヘッダーは新規プロジェクトの一部で、使うにはスケッチフォルダーにコピーする必要があります。

i
注意: プロジェクトを作成し確認したら、その後の修正はできません。

電子メールの受信箱に何通貨のメールを受け取ります。それらをPCにダウンロードしてください。

IDEで、ファイル > スケッチ例 > Cyberon_DSpotterSDK > VoiceRecognition を開き、ファイル > 名前を付けて保存 をクリックし、スケッチ名を入力します。

保存したら、エクスプローラーを開き、スケッチのパスを選びます。

スケッチディレクトリで、先ほど電子メールの受信箱から取得したファイルをペーストします。

  • CybLicense_<id>.h
  • Model_<id>.h

入力トリガーコマンドとコマンドリストを実装するには、スケッチを開き、以下のヘッダーをダウンロードしたものに置き換えます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
...

#include "CybLicense.h" -> #include "CybLicense_<id>.h"

...

#include "Model_L1.h" -> #include "Model_<id>.h"

...

#include "Model_L0.h" -> #include "Model_<id>.h"

この時点で、プロジェクトが利用できるようになります。スケッチをアップロードして、シリアルモニタを開きます。作成した新しい入力トリガーワードとコマンドリストをテストすることができます。新しい入力トリガーワードを大きな声で話せば、認識されたワードがシリアルモニタに表示されます。

サンプルコードを修正する

定義したトリガーとコマンドで、自分の処理を実行したければ、VRCallback関数で実行できます。

まず、トリガーとコマンドのIDを知る必要があります。シリアルモニタに表示されてます。この場合、以下の通りです。

キーワード ID
Hey Arduino 100
read 10000
upload 10001
share 10002

以下に修正したVRCallbackを示します。コマンドを検出したときの機能を簡単に追加できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// Callback function for VR engine
void VRCallback(int nFlag, int nID, int nScore, int nSG, int nEnergy)
{
  if (nFlag==DSpotterSDKHL::InitSuccess)
  {
      //ToDo
  }
  else if (nFlag==DSpotterSDKHL::GetResult)
  {
      /*
      When getting an recognition result,
      the following index and scores are also return to the VRCallback function:
          nID        The result command id
          nScore     nScore is used to evaluate how good or bad the result is.
                     The higher the score, the more similar the voice and the result command are.
          nSG        nSG is the gap between the voice and non-command (Silence/Garbage) models.
                     The higher the score, the less similar the voice and non-command (Silence/Garbage) models are.
          nEnergy    nEnergy is the voice energy level.
                     The higher the score, the louder the voice.
      */
      //ToDo
      switch(nID)
      {
          case 100:
            Serial.println("The Trigger was heard");
            // Add your own code here
            break;
          case 10000:
            Serial.println("The Command -read- was heard");
            // Add your own code here
            break;
          case 10001:
            Serial.println("The Command -upload- was heard");
            // Add your own code here
            break;
          case 10002:
            Serial.println("The Command -share- was heard");
            // Add your own code here
            break;
          default:
            break;
      }

  }
  else if (nFlag==DSpotterSDKHL::ChangeStage)
  {
      switch(nID)
      {
          case DSpotterSDKHL::TriggerStage:
            LED_RGB_Off();
            LED_BUILTIN_Off();
            break;
          case DSpotterSDKHL::CommandStage:
            LED_BUILTIN_On();
            break;
          default:
            break;
      }
  }
  else if (nFlag==DSpotterSDKHL::GetError)
  {
      if (nID == DSpotterSDKHL::LicenseFailed)
      {
          //Serial.print("DSpotter license failed! The serial number of your device is ");
          //Serial.println(DSpotterSDKHL::GetSerialNumber());
      }
      g_oDSpotterSDKHL.Release();
      while(1);//hang loop
  }
  else if (nFlag == DSpotterSDKHL::LostRecordFrame)
  {
      //ToDo
  }
}

ここでは、switch...caseを追加し、nID変数を評価し、別のIDと比較しています。それぞれのcase内で、トリガーやコマンドで実行するコードを追加してください。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
...
      switch(nID)
      {
          case 100:
            Serial.println("The Trigger was heard");
            // Add your own code here
            break;
          case 10000:
            Serial.println("The Command -read- was heard");
            // Add your own code here
            break;
          case 10001:
            Serial.println("The Command -upload- was heard");
            // Add your own code here
            break;
          case 10002:
            Serial.println("The Command -share- was heard");
            // Add your own code here
            break;
          default:
            break;
      }
...

制限を解除する(ライセンス)

モデルのカスタマイズや、コマンドやトリガーワードを追加したければ、適切なライセンスがあります。

プロジェクトの要件に合う異なるライセンスがあります。Licensing section (Voucher codes)を参照してください。有料ライセンスを使うには、既にプロジェクトが存在している必要があります。前のセクションを参照してください。

Cyberon’s Licensed Project Configurationを参照してください。

必要なフィールドに記入してください。

  • 電子メールアドレス
  • ボード
  • ボードのシリアルナンバー
  • バウチャーコード
  • プロジェクトのインポート: プロジェクトを作成する際に電子メールで受け取った.dsprojファイル
  • EULAアグリーメント: 注意深く読んでください

Nextをクリックし、プロジェクトオプションを確認したら、Continueをクリックしてください。

新しいライセンスとモデルヘッダーが新しい電子メールで送られてきます。

i
注意: 音声認識ライセンス(プロではない)を使っている場合は、デプロイしたモデルはカスタマイズできないことに注意してください。いつでもArduino Storeで追加のバウチャーを購入し、同じハードウェアで新しいモデルを作成できます。

新規プロジェクトの作成で複製したスケッチを開きます。

#includeファイルを、最新のもの(異なるIDです)で置き換えます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
...

#include "CybLicense_<id>.h" -> #include "CybLicense_<newId>.h"

...

#include "Model_<id>.h" -> #include "Model_<newId>.h"

...

#include "CybLicense_<id>.h" -> #include "CybLicense_<newId>.h"

ボードにスケッチをアップロードすると、試用バージョンの制限が解除されていることがわかります。

ライセンス

各ライセンスとそれぞれのデバイスでの制限を示します。ライセンス用に取得したコードは、バウチャーコードとも呼ばれます。

フリーデモ

  • CDSpotterSDKライブラリとの互換性
  • セット数: x1
  • トリガー数: x1
  • コマンド数: 4
  • トリガー設定: 固定(設定不可)
  • コマンド設定: 固定(設定不可)
  • 認識回数: 制限なし
  • トリガーモードの遅延: なし
  • ハードウェア固定: なし

音声認識フリートライアル

認識回数が上限に達すると、モデルは停止するので、リブートする必要があります。

  • CDSpotterSDKライブラリとの互換性
  • セット数: x1
  • トリガー数: x1
  • コマンド数: 最大20
  • トリガー設定: 設定可
  • コマンド設定: 設定可
  • 認識回数: x50
  • トリガーモードの遅延: 20秒[1]
  • ハードウェア固定: あり

[1]トリガーモードの遅延は、トリガーモードに入って起動ワードを認識されるまでに20秒の遅延があります。

音声認識ライセンス

  • CDSpotterSDKライブラリとの互換性
  • セット数: x1
  • トリガー数: x1
  • コマンド数: 最大20
  • トリガー設定: 設定可
  • コマンド設定: 設定可
  • 認識回数: 制限なし
  • トリガーモードの遅延: なし
  • ハードウェア固定: あり

PRO

  • CDSpotterSDKライブラリとの互換性
  • セット数: 制限なし(ハードウェア依存)
  • トリガー数: 制限なし(ハードウェア依存)
  • コマンド数: 制限なし(ハードウェア依存)
  • トリガー設定: 設定可
  • コマンド設定: 設定可
  • 認識回数: 制限なし
  • トリガーモードの遅延: なし
  • ハードウェア固定: あり

次のステップ

デモスケッチが動作したら、Arduino音声認識エンジンの全能力を引き出すために、これを実装することをおすすめします。

さらに情報が必要であれば、Cyberonのドキュメントを参照してください。

  • ライブラリと"extra"フォルダの下には、要件とこのチュートリアルで示したステップを記載したReadme.mdに加え、Cyberonによる追加ドキュメントがあります。
  • Cyberonのyoutubeチャネルには、ステップバイステップチュートリアルのシリーズがあり、Arduino音声認識エンジンの使い方を知るのに役立ちます。
  • Cyberon’s official Maker User Guideも参照してください。

おわりに

このチュートリアルでは、Arduino音声認識エンジンとは何か、ライセンスの種類と制限、ライセンスの取得方法を学びました。ライセンスを入手したら、フリーデモスケッチでのテスト方法と、カスタム音声トリガーでプロジェクトを作成する方法を学びました。そして、無料ライセンスで作成したプロジェクトをより高度なライセンスで使う方法を学びました。

オリジナルのページ

https://docs.arduino.cc/tutorials/nano-33-ble-sense/speech-recognition-engine/

最終更新日

August 16, 2026

inserted by FC2 system