如何使用TinyML构建一个完全离线运行的语音控制智能家居自动化系统
扫描二维码
随时随地手机看文章
1. 介绍
想象一下,早上醒来,只要简单地说一声“开灯”,你房间的灯就会立刻亮起来。当你开始一天的工作时,你一边啜饮咖啡,一边指示“开启风扇”,感受凉爽的微风。之后,当你放松下来的时候,你说“Mood Lights On”,用柔和的灯光创造一个放松的氛围。有了离线关键字定位,所有这一切都无缝地发生,没有互联网延迟,确保快速,私人和可靠的体验。随着Edge AI和TinyML的进步,智能家居自动化变得更加高效和易用。本项目演示了如何使用TinyML构建一个完全离线运行的语音控制智能家居自动化系统。通过利用XIAO ESP32S3 Sense微控制器,我们可以在不依赖云服务的情况下本地处理“开灯”和“关灯”等语音命令。这种方法确保了隐私、减少了延迟,并最大限度地降低了功耗。
主要特点:
•离线语音命令识别使用TinyML。
•通过继电器控制交流电器。
•手动覆盖开关,可靠性高。
•节能设计与睡眠模式。
2. 硬件需求
组件:
1. XIAO ESP32S3 Sense:内置麦克风的双核微控制器。
2. 1通道继电器模块:用于交流电器的开关。
3. 降压转换器:微控制器降压(5V输出)。
4. SPDT开关:手动控制覆盖。
5. *交流灯泡和灯座*:演示负载。
6. *跳线和PCB*:用于电路组装。
工具*:
—烙铁、万用表、螺丝刀。
3. 系统工作流程
•XIAO ESP32S3 Sense通过其板载麦克风持续监听语音命令。
•TinyML模型处理音频输入并检测特定的关键字。
•一旦检测到一个有效的命令,微控制器触发继电器模块开关各自的设备上或关闭。
•手动控制开关允许另一种操作设备的方法。
4. 一步一步的教程
第一步:Altium中1通道继电器和XIAO的PCB设计和制造
组件:
步骤1a:电路设计
继电器模块电路包括:
•继电器控制:
XIAO的D0引脚通过晶体管驱动继电器线圈(未列出,但在电路中假设)。
1N4007二极管横跨继电器线圈进行反电动势保护。
•状态指标:
红色LED (330Ω电阻)显示电源状态。
绿色LED (1kΩ电阻)表示继电器激活。
步骤1b: PCB布局
•组件放置:
将XIAO的足迹放置在边缘附近,以便于访问。
将继电器和led靠近各自的电阻。
•跟踪路由:
电源线使用20 - 30mil走线。
保持信号走线(D0到继电器)短以减少噪声。
•小集成:
为XIAO的D0、5V和GND引脚设计接线头/焊盘。
步骤1c:生成Gerber文件
在Altium:文件→制作输出→Gerber文件。
包括层:顶级铜,丝印,钻。
步骤1d。PCB制造
步骤1:准备覆铜板
清洁表面:
用钢棉擦洗铜片以去除氧化。
用异丙醇擦拭,使表面无油脂。
步骤2:转印设计
传热方式:
在光面纸上打印PCB布局(镜像)。
将纸放在铜片上,通过加热辊(180°C)加热5-10分钟。
将纸浸泡在水中,将墨粉留在铜片上。
3 .蚀刻
用氯化铁蚀刻:
将铜片浸入氯化铁溶液中(与水的比例为1:3)。
轻轻搅拌,直到不需要的铜溶解(10-30分钟)。
安全:佩戴手套和护目镜。
清洁PCB:
用钢丝绒擦掉墨粉。
用清水冲洗并擦干。
钻孔:
组件引线使用0.8-1mm钻头。
步骤1e装配与测试
步骤1:焊接元件
大会顺序:
电阻→led→二极管→继电器→XIAO头。
焊接小贴士:
加热衬垫,而不是部件。
用钢丝钳修剪多余的引线。
第二步:连续性检查
使用万用表在连续模式下验证:
5V与GND之间无短路。
D0引脚连接继电器控制电路。
使用万用表在连续模式下验证:
5V与GND之间无短路。
D0引脚连接继电器控制电路。
步骤3:功能测试
力量:
连接5V到XIAO。红色LED应该会发光。
力量:
连接5V到XIAO。红色LED应该会发光。
继电器测试:
将代码上传到XIAO以切换D0(参见下面的代码片段)。
当继电器激活时,绿色LED应该亮起。
继电器测试:
将代码上传到XIAO以切换D0(参见下面的代码片段)。
当继电器激活时,绿色LED应该亮起。
第二步:在XIAO ESP32S3 Sense上训练基于TinyML模型的音频
XIAO ESP32S3传感器介绍
一个紧凑但功能强大的开发板,旨在启动您的智能语音和视觉AI之旅。凭借其集成的相机传感器,数字麦克风和SD卡支持,这个小板包一个punch,提供嵌入式机器学习计算能力和摄影功能。无论您是深入研究边缘计算还是探索人工智能应用,XIAO ESP32S3 Sense都是您轻松高效地实现创新项目的首选工具。
边缘脉冲介绍
Edge Impulse是一个专门为边缘设备和嵌入式系统设计的机器学习模型开发平台。它提供了一套全面的工具和服务,使开发人员能够快速创建、训练和部署机器学习模型,而不需要深入的机器学习专业知识。
录音音频与XIAO ESP32S3传感器
让我们使用板载SD卡读卡器来保存。wav音频文件,我们需要首先调整XIAO PSRAM。
将micro - sd卡插入micro - sd卡插槽。请注意插入方向,金手指的那一面要朝内。
将以下程序编译上传到XIAO ESP32S3。
现在,编译并运行代码,获取不同大象声音的样本。你也可以捕捉噪音和其他声音。串行监视器将提示您接收要记录的标签。
发送标签(例如,l_on, l_off)。程序将等待另一个命令:rec。每次发送命令rec时,程序将开始记录新的样本。文件将保存为l_on.1.wav、l_on.2.wav、l_on.3.wav等,直到发送新标签(例如,notice)。在这种情况下,您应该为每个新示例发送命令rec,它将被保存为Noice1.wav, noice2 .wav, noice3 .wav等。最后,我们将在SD卡上获得保存的文件。
先发送第一个标签名称,通过串行监视器
然后发送命令rec,并开始使用XIAO记录命令。
以相同的量收集两种样品。
使用读卡器将存储在SD卡内的所有声音样本保存到您的计算机。
训练输出模型与边缘脉冲。
我们应该在Edge Impulse发起一个新项目,并给它起同样的名字“mini”。
创建项目后,在Data Acquisition部分中选择Upload Data工具。选择要上传的文件。
确保训练和测试集之间的平衡。80/20是推荐的最佳比例。
数据集上所有数据的长度都是1s,但上一节记录的样本长度为10s,必须分成1s个样本才能兼容。单击样本名称后的三个点,然后选择Split sample。
进入工具后,将数据分割为1秒记录。如果需要,添加或删除段。所有样品都应重复此步骤。
后藤动力设计
脉冲获取原始数据,使用信号处理提取特征,然后使用学习块对新数据进行分类。首先,我们将使用一个1秒的窗口获取数据点,增加数据,每隔500毫秒滑动该窗口。注意,设置了选项0 -pad数据。用小于1秒的零样本填充是很重要的(在某些情况下,我减少了分割工具上的1000毫秒窗口,以避免噪音和尖峰)。
下一步是创建下一阶段要训练的图像。我们可以保持默认参数值或利用DSP Autotuneparameters选项,我们将这样做。
我们将使用卷积神经网络(CNN)模型。基本架构由两个Conv1D + MaxPooling块(分别有8和16个神经元)和0.25 Dropout定义。在最后一层,四个神经元被压平后,每个类别一个。
性能校准导航到Edge Impulse Studio的“性能校准”选项卡。
配置测试设置:
选择噪音标签:识别代表背景噪音或静音的标签。
忽略特定的标签:选择在测试过程中应该忽略的任何标签。
选择音频样本类型:选择“模拟真实世界音频”从您的测试数据集生成合成音频流,或上传您自己的录音在.zip文件。
运行测试:单击“运行测试”启动性能校准。系统将评估你的模型的准确性,重点是假阳性和假阴性。
选择并保存配置
检查错误接受率(FAR)和错误拒绝率(FRR)图表上给出的建议配置。边缘脉冲文档
选择一种能够平衡假阳性和假阴性之间的取舍的配置,与您的项目需求保持一致。边缘脉冲文档
单击“Save selected config”以在部署期间应用此配置。
导出为Arduino库
Edge Impulse将打包所有所需的库,预处理功能和训练模型,将它们下载到您的计算机上。您应该选择Arduino Library选项,并在底部选择Quantized (Int8)并按下Build按钮。当选择Build按钮时,将创建一个Zip文件并将其下载到计算机上。部署模型到XIAO ESP32S3 Sense
部署模型到XIAO ESP32S3 Sense
将压缩文件上传到Arduino IDE
在使用下载的库之前,我们需要启用ESP NN加速器。为此,您可以从项目GitHub下载一个初步版本,解压缩它,并将其替换为ESP NN文件夹下的:src/edge-impulse-sdk/ portingespressif /ESP-NN,在您的Arduino库文件夹中。
第三步:编写并上传控制代码
使用Arduino IDE:
•安装必要的库(TensorFlow Lite for微控制器,Edge Impulse SDK等)。
•使用Arduino IDE:安装必要的库(TensorFlow Lite for微控制器,Edge Impulse SDK等)。
编写检测关键字的代码:
这部分代码遍历机器学习模型输出的每个预测(或标签)。对于每个标签,它首先检查标签是否为“l_on”(意思是“灯亮”),以及模型对该标签的置信度是否为70%或更高。如果两个条件都为真,它打印“灯已打开”到串行监视器,然后发送一个高信号到继电器引脚,它打开连接的灯。同样,它检查标签是否为“l_off”(意思是“关灯”),以及置信度是否至少为70%。如果是,它打印“灯已关闭”,并发送一个低信号到继电器,关闭灯。这种逻辑允许系统对模型识别的特定语音命令做出反应,并相应地控制灯光,但前提是模型对听到的声音有足够的信心
第三步:布线和组装
该电路由XIAO ESP32S3感测微控制器、2通道继电器模块、降压转换器以及风扇、灯泡和LED灯带等常见家用设备组成。一个9-12V的电源被送入降压转换器,降压转换器将其降压至5V,为ESP32S3和继电器模块供电。ESP32S3通过VCC、GND和GPIO控制引脚连接到继电器模块。这些控制引脚作为信号线来激活继电器。继电器输出连接到风扇和灯泡,使交流电源通过继电器接通或关闭。此外,双向开关与继电器并联连接,无论智能系统状态如何,都可以手动控制设备。
XIAO ESP32S3传感器通过连接的软件平台或嵌入式语音识别系统接收语音命令。根据命令,通过其GPIO引脚向继电器模块发送HIGH或LOW信号。当继电器接收到高信号时,它激活并关闭电路,允许交流电流流向相应的电器(风扇或灯泡)。低信号打开继电器,关闭电器。继电器作为低压控制侧(ESP32S3)和高压交流负载侧之间的桥梁。手动双向开关确保设备仍然可以传统操作,如果需要的话。所有高压连接都是仔细和安全的,遵循适当的绝缘和安全措施。
第四步:测试
观察
该设置经过了彻底的测试,以确保可靠的性能。XIAO ESP32S3能够正确识别“开灯”和“关灯”等语音命令,准确率很高。继电器开关反应迅速,几乎没有延迟。语音模型在设备上完全脱机运行,因此不需要互联网连接,这使得响应时间更快。
第五步:3D设计的外壳在融合360
在Fusion 360中设计了一个定制的外壳,以整齐地容纳继电器模块和XIAO ESP32S3微控制器。设计的重点是实用功能,如通风散热,易于访问的端口,并安装插槽固定的情况下。外壳的外观也与家庭内部很好地融合在一起。外壳使用PLA材料在FDM打印机上进行3D打印,并使用螺钉进行组装,以确保清洁和安全。
优势
•离线处理——消除对互联网的依赖
•增强隐私-没有数据发送到云服务
•通过Edge AI实现低功耗
•与基于云的系统相比,响应时间更快
•可定制和可扩展的系统架构
•人性化的免提操作
结论
本项目展示了使用TinyML和谷歌Assistant的高效、可扩展的智能自动化解决方案。它利用本地语音识别进行离线控制,并利用云集成进行远程访问。该方法可以扩展到多个设备,并扩展到工业或农村自动化系统。
本文编译自hackster.io