采用 EFR32xG24 的语音控制 Zigbee 开关的AI学习
扫描二维码
随时随地手机看文章
采用 EFR32xG24 的语音控制 Zigbee 开关
要创建支持 ML 的应用程序,需要两个主要步骤。第一步是创建一个无线应用程序,您可以使用 Zigbee、BLE、Matter 或任何基于 2.4 GHz 协议的专有应用程序来完成。它甚至可以是未连接的应用程序。第二步是构建 ML 模型以将其与应用程序集成。
如上所述,Silicon Labs 提供了多种选项来为其 MCU 创建 ML 应用程序。此处选择的方法是使用具有预定义模型的现有示例应用程序。在这个例子中,模型被训练来检测两个语音命令:“on”和“off”。
EFR32xG24 应用程序入门
|
要开始使用,请获取 EFR32MG24 开发人员套件 BRD2601A(左)。 该开发套件是一个紧凑型电路板,嵌入了多个传感器(IMU、温度、相对湿度等)、LED 和 Stereo I 2 S 麦克风。 该项目将使用 I 2 S 麦克风。 这些设备可能不像 GPU 那样稀有,但如果您没有机会获得这些套件之一,您还可以使用基于系列 1 的旧开发套件,称为“Thunderboard Sense 2”参考。SLTB004A(右)。 但是,此 MCU 没有 MVP,将使用主内核执行所有推理,无需加速。 |
|
接下来,您需要 Silicon Labs 的 IDE Simplicity Studio 来创建 ML 项目。它提供了一种下载 Silicon Labs 的 Gecko SDK 软件套件的简单方法,该套件提供了应用程序所需的库和驱动程序,如下所示。
· 无线网络堆栈(本例中为 Zigbee)
· 硬件驱动程序(用于 I2S 麦克风以及 MVP)
· TensorFlow Lite 框架
· 一个已经训练过的用于检测命令词的模型
IDE 还提供工具来进一步分析您的应用程序功耗或网络操作。
创建启用 MVP 的 Zigbee 3.0 Switch 项目
Silicon Labs 提供了一个即用型示例应用程序 Z3SwitchWithVoice,您将创建和构建该应用程序。该应用程序已经附带了一个 ML 模型,因此您无需创建一个。
创建后,请注意 Simplicity Studio 项目由组件带来的源文件组成,这些组件是 GUI 实体,通过简化复杂软件的集成,可以轻松使用 Silicon Labs 的 MCU。在这种情况下,您可以看到默认安装了 MVP 支持和 Zigbee 网络堆栈。
主要应用程序代码位于 app.c 源文件中。
在网络方面,应用程序可以通过一个简单的按钮与任何现有的 Zigbee 3.0 网络配对,也称为“网络转向”。联网后,MCU 将寻找兼容且可配对的照明设备,也称为“绑定”。
当应用程序的网络部分启动并运行时,MCU 将定期轮询麦克风数据样本并在其上运行推理。此代码位于keyword_detection.c 中。
/************************************************* ******************************//** * 处理来自 output_tensor 的输出 ************** ****************************************************** **************/ sl_status_t process_output ()
{
// 根据推理的输出判断是否识别到命令
uint8_t found_command_index = 0;
uint8_t分数 = 0;
bool is_new_command = false ;
uint32_t current_time_stamp;
// 获取 CommandRecognizer 所需的当前时间戳
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],
分数,current_time_stamp);
检测到的关键字(found_command_index);
}
}
返回SL_STATUS_OK;
}
检测到关键字后,app.c 中的处理程序将发送相应的 Zigbee 命令:
静态 无效检测到_keywork_event_handler ( sl_zigbee_event_t *事件)
{
EmberStatus状态;
如果(emberAfNetworkState()== EMBER_JOINED_NETWORK){
emberAfGetCommandApsFrame()-> sourceEndpoint = SWITCH_ENDPOINT;
if (detected_keyword_index == 0) {
emberAfFillCommandOnOffClusterOn();
} else if (detected_keyword_index == 1) {
emberAfFillCommandOnOffClusterOff();
}
状态 = emberAfSendCommandUnicastToBindings();
sl_zigbee_app_debug_print( "%s: 0x%02X\n" , "发送到绑定" , status);
}
}
此时,您已在无线 MCU 上运行硬件加速推理以进行边缘计算。
自定义 TensorFlow 模型以使用不同的命令词
如前所述,实际模型已经集成到该应用程序中,并且没有进一步修改。但是,如果您自己集成模型,则可以通过以下步骤进行:
1. 收集和标记数据
2. 设计和构建模型
3. 评估和验证模型
4. 为嵌入式设备转换模型
无论您对机器学习多么熟悉,都必须遵循这些步骤。不同之处在于如何构建模型,如下所示:
1. 如果您是 ML 的初学者,Silicon Labs 建议使用我们易于使用的端到端第三方合作伙伴平台之一:Edge Impulse 或 SensiML 来构建您的模型。
2. 如果您是 Keras/TensorFlow 方面的专家并且不想使用第三方工具,您可以使用机器学习工具包 (MLTK),它是一个自助式、自助式的 Python 包。Silicon Labs 围绕音频用例创建了这个参考包,可以扩展、修改或以其他方式挑选专家认为有吸引力的部分。该包将在 GitHub 上提供,附带文档。您也可以直接导入一个 .tflite 文件,该文件在 TensorFlow lite 的嵌入式版本上运行,用于为 EFR32 产品线进行微编译。您必须确保数据上的特征提取对于训练模型与在目标芯片上运行推理完全相同。
在 Simplicity Studio 中,后者是最简单的。要在 Simplicity Studio 中更改模型,请将 .tflite 模型文件复制到项目的 config/tflite 文件夹中。项目配置器提供了一个工具,可以自动将 .tflite 文件转换为 sl_ml_model 源文件和头文件。