Local Voice Commands 與市面上的智慧音箱、你我手機裡頭的語音助理不同,可以不需要透過網路即可執行語音命令,除了在應用上帶來些許便利性,也保障了使用者的隱私安全;與高成本的 MPU 架構不同,只需透過賽微科技 (Cyberon) 提供的 DSpotter 搭配 NXP i.MX RT106S MCU 即可實現 Local Voice Commands。
i.MX RT106S 專案提供 Automatic Speech Recognition (ASR) 及 Audio Front End (AFE) 幫助語音辨識準確率及基礎抗噪能力,將語音資料進行上述處理後,再經由 DSpotter 進行語音辨識。
下圖為 DSpotter 所需資源,因中文相較其他語言多了音調,故在資源上需求較多。
隨著命令越長需要的處理資源也越多,每 4 音節多 0.08 MIPS
賽微 (Cyberon) 提供語音辨識配置軟體 DSpotter 可供使用者透過文字轉成語音並搭配 NXP 專案 sln_local2_iot_local_demo 進行整個 Local Voice Commands 建立,DSpotter 在辨識語音上是以 Phoneme 進行辨識,以這樣基礎下單一字辨識後去尋找命令表中最符合的選項藉此組合成命令,這樣的架構可以降低語音模組的體積,也便於擴展命令。
Cyberon 安裝檔中需安裝以下三種 Tool
• Cyberon DSpotter Modeling Tool (DSMT) V2
• DSpotter Offline Test Tool V2
• DSpotter Online Test Tool V2
其中 DSpotter Online Test Tool V2 及 DSpotter Offline Test Tool V2 將在後續章節進行說明
本文將以Cyberon DSpotter Modeling Tool 版本為 V2.2 進行說明
以下為 DSpotter 建立語音相關參數進行說明
1.由於 DSpotter使用時會判斷帳號、密碼以及 Mac Address,故使用時務必要有網路連線。至於如何取得 DSpotter,請聯繫 WPI NXP 產品線洽詢。
2.下圖為 DSpotter Modeling Tool 介面,點選 File à New Project
3.在 Select Language 中 Project Name 輸入專案名稱,在下一個下拉選項中選擇所需的語言,當選擇完畢後點選 OK。
4.選擇指定資料夾,在此會產生 DSpotter 執行檔案 ( *.dsmt ) 及相關配置的語音 module 檔案會存放在此。
5.在 Select Project settings 中其他選項僅有預設值,當中只有 Model size Level 可以調整,根據CPU、ROM、RAM 能力選擇對應的 Model Level size
參數說明如下
l SampleRate:
聲音取樣率
l FeatureDimension:
特徵向量的維度,維度越多,辨識率越好,但計算量與模型大小會上升
l FrameRate:
每秒取多少個Frame做特徵向量轉換Frame Rate越高,辨識率越好,但計算量會上升
l Model Size Level:
數字越大,模型大小越大,辨識率越好,但計算量會上升
6.下圖為 DSpotter 介面
a. Input Command:
要新增的語音命令,輸入對應的語言的命令
b. Add:
新增語音命令或者直接在 Input Command 輸入 Enter
c. Batch Add:
從txt 載入命令,此處 txt 為 DSpotter 產出之 Command Text 必須為UTF-16LE編碼
d. Command List:
確認輸入的命令,Reward值代表 Confidence Reward,在 Command 欄進行配置,CmdMapID 會額外產生指令映射的檔案,可將多個指令映射為同一個ID
e. UP、Down、Delete、Edit:
調整 Commands List 中項目的先後順序。
f. Command Phoneme:
命令音素,此部分可以參考 Phoneme Table 其中標示出所有字元對應的音素
g. Play、Update、Default:
當命令建立完成後點選對應的命令會顯示對應的 Command Phoneme,點選 Play 會根據 Command Phoneme 進行撥放語音藉此確認發音與預期是否相符,當調整完 Phoneme 後點選 Update 將調整完成的 Command Phoneme 上傳到系統後再點選 Play 才會撥放更新後的發音
點選 Default 會將 Command Phoneme 更改為系統預設的發音。
h. Confidence Reward(command):
此項分數越高代表聲音和指令模型越相似,此Reward的調整是針對單一指令,此處數值越大,該指令越容易辨識,但可能提高誤動作率,一般調整範圍為-10~10。
i. Global (調整是針對整個群組,):
n Energy Threshold:
數值越大,則辨識需要的音量較大,數值越小,則所需音量較小,但可能提高誤動作率,此數值為RMS值,一般調整範圍為0~200。
n Confi. Reward:
數值越大,代表指令越容易辨識,但可能提高誤動作率,Cyberon建議如果需要調整此參數,則需要進行實地測試為佳,一般調整範圍為 -10~10,辨識引擎會將個別指令的Confidence Reward和群組的Confidence Reward相加計算。
n SG Diff. Reward:
分數越高代表聲音和非指令(Silence/Garbage)的模型越不相似。此處的數值越大,代表指令越容易辨識,但可能提高誤動作率,Cyberon建議如果需要調整SG Difference Reward,則需要進行實地測試為佳,一般調整範圍為-10~10。
n Ending Silence(sec.):
為指令結束後,辨識引擎計算指令是否已經唸完的長度,此參數的調整是針對整個群組,數值越小,則等待時間越短,數值越大,產生false trigger的機會相對較低,如在語音命令 “twenty”和“twenty-one” 如果 Ending Silence 數值太低,命令 “twenty-one”會被誤判為 “twenty”。
n Reset:
將 Global 設定的參數變成系統預設值。
j. Extra Output
n Pack Model Text:
將勾選的檔案與基本模型合併成一個。
u Command Text:
指令的文字檔案。
u Trimap bin:
SD應用時才會使用到的Triphone mapping binary檔案,一般辨識時不會使用到。
u Map ID:
記錄MapID內容的檔案。
n Big Endian:
根據 MCU 系統勾選,預設為 little Endian,RT106S 為 Little Endian不需要勾選此項。
7.當透過 Input Command 新增語音命令時,有些命令會出現後綴 ^1、^2 等帶數字命令項目,這是因為每個命令可能因為ㄧ些口音原因在發音上有些不同,如英文的 The 就有三種發音。
The
The^1
The^2
8.命令的 CmdMapID 決定應用類別,在 NXP 專案中配置 CmdMapID 0 為 garbage Word,CmdMapID 1 為 Wakeup Word,當中 Wakeup Word 編號為固定 1,不能改變,其餘部分根據專案需求進行調整。
9.如需新增分頁可點選 Group à Insert 即可,新增分頁後預設名稱為 Group_1,要修改名稱選擇 Group à Rename即可修改分頁名稱。
10.配置完成後點選 Save Project 即會在 DSpotter 執行檔 ( *.dsmt ) 所在位置產生相關檔案
l Cyberon DSMT Tool V2 使用說明 (https://tool.cyberon.com.tw/DSMT_V2/)
l Phoneme Table (https://tool.cyberon.com.tw/DSMT_V2/phoneme.php)
l Cyberon DSpotter v2 Introduction