采用 EFR32xG24 的語音控制 Zigbee 開關(guān)的AI學(xué)習(xí)
采用 EFR32xG24 的語音控制 Zigbee 開關(guān)
要?jiǎng)?chuàng)建支持 ML 的應(yīng)用程序,需要兩個(gè)主要步驟。第一步是創(chuàng)建一個(gè)無線應(yīng)用程序,您可以使用 Zigbee、BLE、Matter 或任何基于 2.4 GHz 協(xié)議的專有應(yīng)用程序來完成。它甚至可以是未連接的應(yīng)用程序。第二步是構(gòu)建 ML 模型以將其與應(yīng)用程序集成。
如上所述,Silicon Labs 提供了多種選項(xiàng)來為其 MCU 創(chuàng)建 ML 應(yīng)用程序。此處選擇的方法是使用具有預(yù)定義模型的現(xiàn)有示例應(yīng)用程序。在這個(gè)例子中,模型被訓(xùn)練來檢測兩個(gè)語音命令:“on”和“off”。
EFR32xG24 應(yīng)用程序入門
|
要開始使用,請獲取 EFR32MG24 開發(fā)人員套件 BRD2601A(左)。 該開發(fā)套件是一個(gè)緊湊型電路板,嵌入了多個(gè)傳感器(IMU、溫度、相對濕度等)、LED 和 Stereo I?2?S 麥克風(fēng)。 該項(xiàng)目將使用 I?2?S 麥克風(fēng)。 這些設(shè)備可能不像 GPU 那樣稀有,但如果您沒有機(jī)會(huì)獲得這些套件之一,您還可以使用基于系列 1 的舊開發(fā)套件,稱為“Thunderboard Sense 2”參考。SLTB004A(右)。 但是,此 MCU 沒有 MVP,將使用主內(nèi)核執(zhí)行所有推理,無需加速。 |
? |
接下來,您需要 Silicon Labs 的 IDE Simplicity Studio 來創(chuàng)建 ML 項(xiàng)目。它提供了一種下載 Silicon Labs 的 Gecko SDK 軟件套件的簡單方法,該套件提供了應(yīng)用程序所需的庫和驅(qū)動(dòng)程序,如下所示。
·?無線網(wǎng)絡(luò)堆棧(本例中為 Zigbee)
·?硬件驅(qū)動(dòng)程序(用于 I2S 麥克風(fēng)以及 MVP)
·?TensorFlow Lite 框架
·?一個(gè)已經(jīng)訓(xùn)練過的用于檢測命令詞的模型
IDE 還提供工具來進(jìn)一步分析您的應(yīng)用程序功耗或網(wǎng)絡(luò)操作。
創(chuàng)建啟用 MVP 的 Zigbee 3.0 Switch 項(xiàng)目
Silicon Labs 提供了一個(gè)即用型示例應(yīng)用程序 Z3SwitchWithVoice,您將創(chuàng)建和構(gòu)建該應(yīng)用程序。該應(yīng)用程序已經(jīng)附帶了一個(gè) ML 模型,因此您無需創(chuàng)建一個(gè)。
創(chuàng)建后,請注意 Simplicity Studio 項(xiàng)目由組件帶來的源文件組成,這些組件是 GUI 實(shí)體,通過簡化復(fù)雜軟件的集成,可以輕松使用 Silicon Labs 的 MCU。在這種情況下,您可以看到默認(rèn)安裝了 MVP 支持和 Zigbee 網(wǎng)絡(luò)堆棧。
主要應(yīng)用程序代碼位于 app.c 源文件中。
在網(wǎng)絡(luò)方面,應(yīng)用程序可以通過一個(gè)簡單的按鈕與任何現(xiàn)有的 Zigbee 3.0 網(wǎng)絡(luò)配對,也稱為“網(wǎng)絡(luò)轉(zhuǎn)向”。聯(lián)網(wǎng)后,MCU 將尋找兼容且可配對的照明設(shè)備,也稱為“綁定”。
當(dāng)應(yīng)用程序的網(wǎng)絡(luò)部分啟動(dòng)并運(yùn)行時(shí),MCU 將定期輪詢麥克風(fēng)數(shù)據(jù)樣本并在其上運(yùn)行推理。此代碼位于keyword_detection.c 中。
/************************************************* ******************************//** ?* 處理來自 output_tensor 的輸出?************** ****************************************************** **************/ sl_status_t ?process_output?()
{
// 根據(jù)推理的輸出判斷是否識(shí)別到命令
uint8_t found_command_index = 0;
uint8_t分?jǐn)?shù) = 0;
bool?is_new_command = false?;
uint32_t current_time_stamp;
// 獲取 CommandRecognizer 所需的當(dāng)前時(shí)間戳
current_time_stamp = sl_sleeptimer_tick_to_ms(sl_sleeptimer_get_tick_count());
TfLiteStatus process_status = command_recognizer->ProcessLatestResults(
sl_tflite_micro_get_output_tensor(), current_time_stamp, &found_command_index, &score, &is_new_command);
if?(process_status !=?kTfLiteOk?) {
?return?SL_STATUS_FAIL;
}
if?(is_new_command) {
?if?(found_command_index == 0 || found_command_index == 1) {
printf( "聽說 %s (%d) @% ldms?\r\n" , kCategoryLabels[found_command_index],
分?jǐn)?shù),current_time_stamp);
檢測到的關(guān)鍵字(found_command_index);
}
}
返回SL_STATUS_OK;
}
檢測到關(guān)鍵字后,app.c 中的處理程序?qū)l(fā)送相應(yīng)的 Zigbee 命令:
靜態(tài)?無效檢測到_keywork_event_handler ( sl_zigbee_event_t *事件)
{
EmberStatus狀態(tài);
如果(emberAfNetworkState()==?EMBER_JOINED_NETWORK){
emberAfGetCommandApsFrame()-> sourceEndpoint = SWITCH_ENDPOINT;
if?(detected_keyword_index == 0) {
emberAfFillCommandOnOffClusterOn();
} else ?if?(detected_keyword_index == 1) {
emberAfFillCommandOnOffClusterOff();
}
狀態(tài) = emberAfSendCommandUnicastToBindings();
sl_zigbee_app_debug_print( "%s: 0x%02X\n" , "發(fā)送到綁定" , status);
}
}
此時(shí),您已在無線 MCU 上運(yùn)行硬件加速推理以進(jìn)行邊緣計(jì)算。
自定義 TensorFlow 模型以使用不同的命令詞
如前所述,實(shí)際模型已經(jīng)集成到該應(yīng)用程序中,并且沒有進(jìn)一步修改。但是,如果您自己集成模型,則可以通過以下步驟進(jìn)行:
1.?收集和標(biāo)記數(shù)據(jù)
2.?設(shè)計(jì)和構(gòu)建模型
3.?評(píng)估和驗(yàn)證模型
4.?為嵌入式設(shè)備轉(zhuǎn)換模型
無論您對機(jī)器學(xué)習(xí)多么熟悉,都必須遵循這些步驟。不同之處在于如何構(gòu)建模型,如下所示:
1.?如果您是 ML 的初學(xué)者,Silicon Labs 建議使用我們易于使用的端到端第三方合作伙伴平臺(tái)之一:Edge Impulse 或 SensiML 來構(gòu)建您的模型。
2.?如果您是 Keras/TensorFlow 方面的專家并且不想使用第三方工具,您可以使用機(jī)器學(xué)習(xí)工具包 (MLTK),它是一個(gè)自助式、自助式的 Python 包。Silicon Labs 圍繞音頻用例創(chuàng)建了這個(gè)參考包,可以擴(kuò)展、修改或以其他方式挑選專家認(rèn)為有吸引力的部分。該包將在 GitHub 上提供,附帶文檔。您也可以直接導(dǎo)入一個(gè) .tflite 文件,該文件在 TensorFlow lite 的嵌入式版本上運(yùn)行,用于為 EFR32 產(chǎn)品線進(jìn)行微編譯。您必須確保數(shù)據(jù)上的特征提取對于訓(xùn)練模型與在目標(biāo)芯片上運(yùn)行推理完全相同。
在 Simplicity Studio 中,后者是最簡單的。要在 Simplicity Studio 中更改模型,請將 .tflite 模型文件復(fù)制到項(xiàng)目的 config/tflite 文件夾中。項(xiàng)目配置器提供了一個(gè)工具,可以自動(dòng)將 .tflite 文件轉(zhuǎn)換為 sl_ml_model 源文件和頭文件。