使用Edge Impulse和麦克风构建完全离线的ESP32语音助手
扫描二维码
随时随地手机看文章
语音接口已经成为与电子产品交互的最直观的方式之一。然而,大多数语音识别系统依赖于云服务、互联网接入和外部api。这会带来延迟、隐私问题和持续的服务限制。如果你能建立一个完全离线的语音助手,直接在微控制器上运行呢?
在这个项目中,我们将ESP32变成一个完全由Edge Impulse驱动的独立离线语音识别模块。与基于互联网的平台不同,这种方法允许在ESP32的双核240 MHz处理器上进行本地推理。结果是一个完全独立的语音激活系统,能够在不向云发送音频的情况下识别唤醒词和命令分类。
您将使用ESP32、INMP441 I²S麦克风、用于数据集训练的Edge Impulse和直接通过Arduino IDE部署的轻量级神经网络来构建嵌入式语音识别管道。到最后,您将拥有一个完整的语音助手,通过“开”,“关”等命令控制led,以及“马文”等唤醒词。
这是一个完整的工程级指南,适用于制造商,嵌入式开发人员和ML工程师,他们希望实际介绍基于边缘的语音识别。
项目的特性
基于原始文档,这个ESP32语音转文本系统提供:
•完全离线语音识别
•自定义唤醒词和命令检测
•实时ML推理
•没有云,没有API调用,没有网络依赖
•低延迟(总计200-500 ms)
•低功率运行
•可扩展架构,支持更多命令
嵌入式机器学习、数字音频捕获和ESP32处理的结合使这成为一个紧凑但功能强大的边缘计算演示。
INMP441由于其低噪声,MEMS结构和数字I²S接口而被使用,使其成为音频推理的理想选择。
系统架构概述
•ESP32语音助理系统遵循这个工作流程
•音频采集(INMP441→ESP32 I²S)
•预处理(MFCC或光谱特征)
•神经网络推理(边缘脉冲模型)
•唤醒词决策逻辑
•命令的分类
•LED输出执行
这种混合管道允许ESP32连续侦听唤醒字,然后解释后续命令。
步骤1:数据集收集
本项目使用谷歌Speech Commands V2数据集:本项目使用谷歌Speech Commands V2数据集
•噪音
•马文(唤醒词)
•开
•关
您还可以记录自定义剪辑或扩展多语言数据。如文中所述,现实世界的准确性可以通过以下方式提高:
•多个扬声器
•不同的口音
•各种背景条件
•与麦克风的距离不同
Edge Impulse接受批量上传,基于文件夹的导入,以及每个声音类别的标签。
步骤2:训练边缘脉冲下的语音识别模型
本节源自源文档中的分步接口说明
•创建你的Edge冲动项目
•登录
创建一个新项目
将其命名为ESP32_STT_Recognition之类的东西
上传音频数据集
使用数据采集→添加数据→上传数据,为每个标记的类选择文件夹。正确的标签对于准确的关键词分类是必不可少的。
设计冲动
冲动设计下:
•添加音频(MFCC)处理块
•添加分类学习块
•选择1秒的窗口大小
•训练模型
设置:
•训练周期:50-100次
•学习率:默认
•验证分割:自动
点击“保存并训练”。
您将收到训练输出图表,准确性指标和混淆矩阵。
验证模型
使用所有分类对保留的数据集进行测试。目的:
•85%以上用于原型设计
•90%以上用于生产
步骤3:将模型部署到ESP32
从源文件中的部署说明中获取
•打开部署
•选择arduino Library并单击Build
•下载ZIP文件
•通过Sketch→Include Library→Add.ZIP Library安装
这将完整的神经网络推理引擎添加到Arduino IDE中。
步骤4:硬件布线
布线信息取自文件中的布线表和引脚图以及麦克风引脚部分。布线信息取自文件中的布线表和引脚图
麦克风接线(INMP441)
INMP441引脚
•L / R
•WS
•SCK
•SD
•VDD
•GND
LED布线
•指示灯LED→GPIO23→220 Ω→GND
•命令LED→GPIO22→220 Ω→GND
步骤5:基本代码和完全修改的代码
原始文件包括测试示例和扩展的生产就绪代码。
I²S音频配置
从文件的代码块中
核心数据缓冲结构
从原始代码部分
信心的阈值
步骤6:实时测试
上传代码后打开串口监视器。
您将看到类似如下的输出:
这为每个检测到的单词提供了实时分类置信度。
结论
你现在有一个完整的离线ESP32语音识别使用边缘脉冲,能够检测唤醒词和执行语音命令完全在设备上。该项目展示了嵌入式机器学习的功能,并可作为语音控制物联网系统、家庭自动化、机器人和可访问设备的理想起点。
该系统是完全可扩展的:收集更多的语音样本,重新训练,并重新部署新的模型到您的ESP32。
本文编译自hackster.io





