使用ESP32 + Audio + MQTT构建BeeGuard:一种边缘人工智能系统
扫描二维码
随时随地手机看文章
关键特性
•边缘AI蜂窝应力检测使用音频信号
•ESP32-S3 AI摄像头与PDM麦克风输入
•使用边缘脉冲的设备上推理(无云ML)
•信号门控(RMS + ZCR)忽略静音和无关噪声
•稳健的决策逻辑使用M-of-N投票和冷却
•通过MQTT (HiveMQ公共代理)进行全球监控
•低延迟,低带宽,适合远程部署
数据准备
BeeGuard系统使用“是否要蜜蜂”数据集进行训练,该数据集是一个开放的音频数据集,包含在不同蜂巢条件下收集的真实蜂巢录音。
该数据集包括:
•长时间的蜂巢录音
•自然背景噪音和环境变化
•与正常和压力蜂群活动相对应的声音模式
为了将原始录音转换为适合Edge AI训练和部署的数据集,开发了两个自定义Python脚本。
完整数据集准备(prepare_beeguard_dataset.py)
这个脚本负责将原始蜂巢声音数据集转换为边缘脉冲准备的音频数据集。
脚本执行的主要任务:
•将所有音频文件标准化到16 kHz单声道,匹配固件录制配置
•将长录音分割为2秒音频窗口,与ESP32-S3上使用的实时推理窗口保持一致
•自动组织音频片段到标签类文件夹:正常或压力
•生成一个干净的,可复制的目录结构,可以直接上传到边缘脉冲
通过自动分割和标记,该脚本确保训练数据与设备上的音频管道紧密匹配,并降低人为标记错误的风险。
快速迭代子集创建(make_ei_subset_2h.py)
训练和实验大型音频数据集可能很耗时。为了加速开发,使用第二个脚本来生成轻量级训练子集。这个脚本:
•获取由prepare_beeguard_dataset.py生成的完全准备好的数据集
•从完整数据集中选择一个有时间限制的子集(约2小时的音频)
•保持正常和压力等级之间的平衡分布
•输出一个紧凑的数据集,在边缘脉冲内优化快速迭代
这种方法允许在对完整数据集执行最终训练之前对预处理参数和模型架构进行快速实验。
边缘脉冲:数据预处理
将数据集上传到Edge Impulse后,使用Mel频率倒谱系数(MFCC)从原始蜂巢音频信号中提取有意义的特征。
mfc非常适合这项任务,因为它们捕获蜂群声音的频谱特征,同时保持嵌入式设备的计算效率。
MFCC配置
预处理流水线配置如下:
•系数:13
•帧长/步幅:30毫秒/ 15毫秒
•滤波器组:32
•FFT长度:256
•频率范围:100hz - 8khz
•预加重:0.97
选择这些参数是为了平衡噪声鲁棒性、特征分辨率和设备上性能。
设备内置性能
边缘脉冲估计表明预处理阶段需要:
~968 ms DSP时间
~ 29kb峰值RAM
这证实了整个预处理管道可以在ESP32-S3上高效运行,实现完全的设备上推理,而不依赖于云。
边缘脉冲:模型训练
神经网络分类器使用Edge Impulse进行训练,并针对ESP32-S3的部署进行了优化。训练进行了50个周期,学习率为0.005,使用int8量化来减少内存占用并提高嵌入式硬件上的推理效率。模型的输入由1716个MFCC特征组成,通过两个带有dropout的1D卷积和池化层进行处理以减少过拟合,然后是一个包含normal和stress两类的输出层。模型架构故意保持紧凑,以平衡分类性能和资源约束。
在验证数据集上,训练模型的准确率为84.3%,损失为0.39,加权f1分数为0.84。当使用Edge Impulse的EON编译器编译时,该模型显示出强大的设备上性能,推理时间约为9 ms,峰值RAM使用量约为14.6 KB,闪存使用量约为46.5 KB。这些结果证实了该模型适用于ESP32-S3上的实时、设备上的蜂窝应力检测。
部署
经过训练和验证,Edge Impulse模型被部署为c++推理库,并集成到基于arduino的固件中,运行在ESP32-S3 AI相机上。使用I2S接口在16 kHz从PDM麦克风实时捕获音频数据,并在2秒窗口内处理,与数据集准备和模型训练期间使用的配置相匹配。
在推理之前,每个音频窗口都经过轻量级的设备上预处理,包括DC偏移去除,增益归一化和基于RMS和过零率(ZCR)的信号门控。此门控步骤防止了对沉默或无关噪声的不必要推断,并提高了整个系统的鲁棒性。一旦检测到有效的蜂群声音,处理后的音频被传递给边缘脉冲分类器来估计压力的概率。
为了进一步减少误报,固件采用M-of-N投票机制,在确认警报之前需要连续进行多次压力检测,并有一段冷却期以避免警报泛滥。当确认压力状况时,设备使用MQTT向公共HiveMQ代理发布遥测和警报,从而实现从任何地方进行远程监控。所有推理都完全在设备上运行,MQTT仅用于轻量级数据传输,使系统适合低功耗和远程蜂窝部署。
MQTT (HiveMQ)配置+主题
这一部分将设备配置为向HiveMQ公共代理发布遥测和警报,使用简短的MQTT主题来保持负载轻量级。
特征提取:RMS + ZCR(信号门控)
在运行ML模型之前,固件计算两个简单的音频特征- RMS(信号能量)和ZCR(过零率)。这些用于门控推理和避免处理沉默或无关噪声。
投票机制(M-of-N) +揭牌概念
原始分类器输出可以在不同窗口之间波动,因此BeeGuard实现了M-of-N投票机制,只有在重复检测后才能确认压力。
冷却以避免警报泛滥
即使在确认压力后,固件也会强制执行一段冷却期,所以如果蜂巢保持压力一段时间,警报不会向代理发送垃圾邮件。
MQTT发布:遥测+警报
固件发布:
•连续遥测(bg/tel),包括RMS/ZCR +概率+投票
•确认警报(bg/alert)时,压力检测和投票+冷却允许它
结果与验证
在测试过程中,BeeGuard可靠地检测到与压力有关的蜂房声音,而忽略了寂静和无关的噪音。RMS/ZCR门控显著减少了不必要的推断,压力警报只有在反复确认后才会触发。使用MQTT Explorer成功地实时接收了MQTT遥测和警报。
电源和边缘优势
所有音频处理和推理都在ESP32-S3上本地执行,从而消除了对连续云流的需求。MQTT仅用于传输紧凑的遥测和警报,使系统适用于低功耗、远程和潜在的太阳能蜂窝部署。
局限性和经验教训
目前的系统依赖于公开的蜂箱音频数据,并将受益于在真实蜂箱中捕获的额外录音。环境因素(如风和雨)也会影响音频质量,应该在未来的迭代中加以解决。
本文编译自hackster.io





