当前位置:首页 > > 新基建
[导读]要创建支持 ML 的应用程序,需要两个主要步骤。第一步是创建一个无线应用程序,您可以使用 Zigbee、BLE、Matter 或任何基于 2.4 GHz 协议的专有应用程序来完成。它甚至可以是未连接的应用程序。第二步是构建 ML 模型以将其与应用程序集成。 如上所述,Silicon Labs 提供了多种选项来为其 MCU 创建 ML 应用程序。此处选择的方法是使用具有预定义模型的现有示例应用程序。在这个例子中,模型被训练来检测两个语音命令:“on”和“off”。

采用 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 麦克风。

该项目将使用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 源文件和头文件。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭