M5Stack Unit ASRの独自ファームウェアを生成する

# はじめに

M5Stack Unit ASRのファームウェアを作成するには、智能公元（smartpi.cn）ページを利用する必要があります。いつかは他言語化される可能性もありますが、現在は中国語のみです。ブラウザーの翻訳機能などを使えば大体意味はわかるものの、使い方をまとめておきます。

# ユーザー登録

まず、ユーザーを登録します。右上の「免费注册」が「無料でユーザー登録」です。「登录」がユーザー登録後のログインです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/4ec5350e-e5dc-4de2-8ee4-97da6d61a6c6.png)

「昵称」にニックネーム、「手机号或邮箱」にメールアドレスを入力して、「发送验证码」ボタンを押すと、入力したメールアドレスに検証用の番号が送られます。
届いた番号を「验证码」に、「密码」と「确认密码」の両方に登録したいパスワードを入力して、「我已阅读并接受用户协议与隐私政策」にチェックを入れてプライバシーポリシー同意の上、「同意并注册」ボタンを押して登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/24ef03c5-a4a9-46fe-8720-3cf28455301b.png)

ユーザー登録が完了すれば、ログインして利用できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/ff961fb6-87ff-4210-978c-0e6c050f2598.png)

# 最初のファームウェア作成

最初はM5Stack Unit ASRの [Unit ASR Custom Firmware Generation and Flashing](https://docs.m5stack.com/en/guide/offline_voice/unit_asr/firmware) ページから [Unit ASR Config EN Template](https://m5stack-doc.oss-cn-shenzhen.aliyuncs.com/635/Unit_ASR_Firmware_Config_Template_EN.json) や [Unit ASR Config CN Template](https://m5stack-doc.oss-cn-shenzhen.aliyuncs.com/635/Unit_ASR_Firmware_Config_Template_CN.json) 、あるいは、こちらの [Unit ASR Config JP Template](https://raw.githubusercontent.com/fukuen/m5stack-unit-asr/refs/heads/main/temlate/Unit_ASR_Firmware_Config_Template_JP.json) をダウンロードして使います。

左のメニュー「产品管理」下の「所有产品」を開き、画面右の「导入产品」を押して上記のファイルをインポートします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/84b6a273-0af3-4c52-b011-6b46722ea61d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/4ec5f3c4-8ac2-445a-88d1-a584b8c8ad5a.png)

「查看详情」を押して、詳細を確認します。SDKの状態が「待生成」となっていれば、「更多」から「生成SDK」でSDKを生成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/53263c81-dd78-4dbf-aa34-5344395cc960.png)

ステータスが変わります。3分くらいでSDK（ファームウェア）が生成されます。生成前に「查看」で内容の確認、編集ができます。「继承」で複製することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/faed45ab-9696-4277-9fca-5467544a5497.png)

生成が完了すると、「下载固件」でファームウェアをダウンロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/11e8f511-4d39-46cc-bfbe-b23114426350.png)

# ファームウェアの編集

- ファームウェアの編集は以下の設定があります。

  1. 前端信号处理（フロントエンド信号処理）
  2. Pin脚配置（ピン設定）
  3. 唤醒词自定义（ウェイクワード・カスタマイズ）
  4. 自选协议配置
  5. 命令词自定义（コマンドワード・カスタマイズ）
  6. 发音人配置（話者設定）
  7. 其它配置（その他設定）
  8. 个性化音频（パーソナライズ音声）
  9. 优化配置（最適化設定）

1.前端信号处理（フロントエンド信号処理）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/ac49c0e1-219d-46ee-a52c-33e435c6f12c.png)

麦克风配置: マイク構成、以下の選択肢があるがUnit ASRはマイクが一つのため「单MIC」
 - 单MIC: 単一マイク
 - 双MIC: 二つのマイク

应用场景: 適用シナリオ、通常は「日文通用Pro5(占1.3M空间)-V01149-v2」を選択
 - 日文通用Pro5(占1.3M空间)-V01149-v2: 一般的な環境で利用
 - 安静环境(占1.3M空间)-V00585: 静かな環境で利用 →「双MIC」のみ選択可能

产品特性: 製品の特長、「单MIC」で選択できるのは以下。Unit ASRは「音声認識」が標準
- 仅语音识别: 音声認識
- 语音识别+自学习: 音声認識+自己学習、オフラインで10以下のコマンドを学習させることができるとのこと
- 语音识别+深度降噪: 音声認識+徹底的なノイズ低減、周囲のノイズが多い状況での利用を想定とのこと
- 语音识别+声纹识别: 音声認識+声紋認識、別途オプション契約が必要な模様
- 语音识别+男女声纹识别: 音声認識+男性と女性の声紋認識、別途オプション認証が必要な模様
- 语音识别+AEC打断(限单MIC): 音声認識+AEC割り込み(単一マイクのみ)、長い発話/音楽再生中に割り込み
- 语音识别+自学习+AEC打断(限单MIC): 音声認識+自己学習+AEC割り込み(単一マイクのみ)、長い発話/音楽再生中に割り込み
- 哭声检测: 泣き声検出、別途オプション認証が必要な模様、この機能選択時は音声認識は使えない
- 鼾声检测: いびき検出、別途オプション認証が必要な模様、この機能選択時は音声認識は使えない
- 文字转语音: テキスト読み上げ、別途オプション認証が必要な模様

自然说: 機械学習を利用した自然は音声合成と思われるが、日本語では選択不可
- 不支持: サポートしない

2.Pin脚配置（ピン設定）

M5Stack Unit ASRではGPIO等は使用できないため無効です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/807410f4-c79a-49ff-987b-8ff73282e697.png)

UART0_TXの速度、ビット数、ストップビット、パリティビットが変更できます。
UART0_RXのヘッダー（AA 55）、トレイラー（55 AA）が変更できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/8723dd83-b317-4a7a-8316-006bbb8d55e2.png)


3.唤醒词自定义（ウェイクワード・カスタマイズ）

ここでウェイクワードを設定することができます。5.命令词自定义でもウェイクワードを設定することができ、デフォルトのファームウェアではそちらで設定されていて、ここでは使っていません。「rqwerqwerqwerqwerqwerq」というダミー値が設定されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/0d02e76d-c77d-465f-87d2-518bd752a12c.png)


4.自选协议配置

設定項目がありません。

5.命令词自定义（コマンドワード・カスタマイズ）

音声認識、音声合成のワード設定を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/9111083b-5ab2-4c57-b191-354161303f9f.png)

- 基础信息: 基本情報タブ、コマンドバイト（0x00～0xFF）とコマンド/応答を割り当てます
  - 序号: 連番
  - 行为: 行為、識別用の英数字文字列
  - 触发方式: トリガー方法
      - 命令词: コマンドワード、音声認識によりトリガー
      - 串口输入: シリアルポート入力、シリアルに（M5Stack側から）データを送信してトリガー
      - GPIO输入: GPIO入力、Unit ASRではGPIO入力は利用できない
      - ADC输入: ADC入力、Unit ASRではADC入力は利用できない
      - 脉冲输入: パルス入力、Unit ASRではパルス入力は利用できない
      - 事件触发: イベントトリガー
          - 退出唤醒: ウェイクアップ終了
              - 语音触发: 音声トリガー
              - 自动触发: 自動トリガー
              - 接口触发: インターフェーストリガー
          - 系统启动: システムの起動
              - 上电启动: 電源オン起動
              - 重置启动: リセット起動
          - 播音开始: 発話開始
          - 播音结束: 発話終了
          - 定时器超时: タイムアウト
          - 自学习事件: 自己学習イベント
          - 声纹识别事件: 声紋認識イベント
          - 声源定位事件: 音源定位イベント
      - 附加条件: 追加条件
  - 命令词: コマンドワード
  - 回复语: 応答
  - 操作: 操作、削除、詳細設定

- 控制详情: コントロールの詳細タブ、トリガー時の動作を設定します
  - 序号: 連番、基本情報タブの値を表示
  - 行为: 行為、識別用の英数字文字列、基本情報タブの値を表示
  - 命令词: コマンドワード、ここで追加/変更が可能、複数指定可能、音声認識とシリアル入力でトリガーするなど
  - 控制类型: コントロールの種類、複数指定可能
      - 端口输出: ポート出力（シリアル、GPIOの出力）
      - 播放语音: 音声発話
          - 打断播报: 再生の割り込み
      - 系统设置: システム設定
          - 播放控制: 発話制御
              - 停止播放: 再生停止
              - 最小音量: 音量を最小にする
              - 最大音量: 音量を最大にする
              - 中等音量: 音量を中にする
              - 增加音量: 音量を上げる
              - 减少音量: 音量を下げる
              - 设为静音: ミュート
              - 取消静音: ミュート解除
              - 无回复播报: 復帰報告なし
              - 有回复播报: 復帰報告あり
              - 免打扰模式: じゃましないモード
              - 正常播报模式: 通常放送モード
          - 识别控制: 識別制御
              - 退出唤醒: ウェイクアップ終了
              - 进入唤醒: ウェイクアップに入る
              - 允许语音识别: 音声認識を有効にする
              - 关闭语音识别: 音声認識を無効にする
              - 允许识别词: 指定した単語の認識を許可する
              - 禁止识别词: 指定した単語の認識を不可にする
              - 禁止超时退出唤醒: タイムアウト終了ウェイクアップを無効にする
              - 允许超时退出唤醒: タイムアウト終了ウェイクアップを有効にする
          - 重启控制: リセット制御
              - 重置重启: リセット再起動
          - 定时器控制: タイマー制御
              - 启动定时器
              - 停止定时器
          - 流程控制: プロセス制御
              - 跳转行为
          - 声纹识别: 音声認識
              - （学習等を行わせることができる、利用不可）
          - 声源定位: 音源定位
              - （定位の取得）
      - 变量设置: 
  - 动作: アクション
  - 动作参数: アクションパラメータ
  - 操作: 操作、削除、詳細設定

- 变量定义: 変数の定義タブ
  制御に使う変数を定義します、int、char、double、unsigned charの型があります

- 定时器: タイマー・タブ
  タイマーを定義します

- 语音导航: 音声ナビゲーション・タブ


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/ac209e03-76e0-4bf9-bf14-bd4062b7b0e4.png)

- 免唤醒的命令词（唤醒词加上免唤醒的命令词，总数不能超过20条）：ウェイクアップを必要としないコマンドワード（ウェイクアップワードとウェイクアップを必要としないコマンドワードの合計数は20以下）

  上記で登録したコマンドワードは、通常ウェイクワードで起動した後に認識します。ウェイクワードの指定は、3.唤醒词自定义（ウェイクワード・カスタマイズ）で指定する方法と、5.命令词自定义（コマンドワード・カスタマイズ）の識別制御で、コマンドワード入力時にウェイクアップするという指定の方法があります。後者の場合は、ここでウェイクアップワード不要のコマンドワードとして指定することになります。

- 防止误识别的命令词（不能和唤醒词、命令词重复，多条词条之间用“|”隔开）：コマンドワードの誤認を防ぐ (ウェイクアップワードやコマンドワードと重複することはできません。複数の単語は「|」で区切られます)


6.发音人配置（話者設定）

日本語の話者は櫻子さんのみです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/ea141716-1f07-44cb-ad67-c0743b72f9df.png)


7.其它配置（その他設定）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/18b1df03-8a59-4778-8772-cfc6b5358894.png)


8.个性化音频（パーソナライズ音声）

音声合成/読み上げを、文字列ではなくwav/mp3の音声ファイルで設定できます。日本語の音声合成は問題があるので、こちらの利用を検討した方がよいかもしれません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/89f82f6a-0e20-4efa-b0c8-8df257a3420f.png)

こちらはmp3を登録した例。wavも対応しているらしいが、うまくアップロードできなかった。（フォーマットは16k/16ビット/1チャンネルと思われるが）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/cdcf5e3e-8db4-414f-9f4c-506e3d602fc9.png)



9.优化配置（最適化設定）

閾値等を詳細に設定できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555397/7668c714-710a-4fdf-9122-aedabb1fb201.png)