使用ESP32 + Audio + MQTT構(gòu)建BeeGuard:一種邊緣人工智能系統(tǒng)
關(guān)鍵特性
?邊緣AI蜂窩應(yīng)力檢測使用音頻信號
?ESP32-S3 AI攝像頭與PDM麥克風輸入
?使用邊緣脈沖的設(shè)備上推理(無云ML)
?信號門控(RMS + ZCR)忽略靜音和無關(guān)噪聲
?穩(wěn)健的決策邏輯使用M-of-N投票和冷卻
?通過MQTT (HiveMQ公共代理)進行全球監(jiān)控
?低延遲,低帶寬,適合遠程部署
數(shù)據(jù)準備
BeeGuard系統(tǒng)使用“是否要蜜蜂”數(shù)據(jù)集進行訓(xùn)練,該數(shù)據(jù)集是一個開放的音頻數(shù)據(jù)集,包含在不同蜂巢條件下收集的真實蜂巢錄音。
該數(shù)據(jù)集包括:
?長時間的蜂巢錄音
?自然背景噪音和環(huán)境變化
?與正常和壓力蜂群活動相對應(yīng)的聲音模式
為了將原始錄音轉(zhuǎn)換為適合Edge AI訓(xùn)練和部署的數(shù)據(jù)集,開發(fā)了兩個自定義Python腳本。
完整數(shù)據(jù)集準備(prepare_beeguard_dataset.py)
這個腳本負責將原始蜂巢聲音數(shù)據(jù)集轉(zhuǎn)換為邊緣脈沖準備的音頻數(shù)據(jù)集。
腳本執(zhí)行的主要任務(wù):
?將所有音頻文件標準化到16 kHz單聲道,匹配固件錄制配置
?將長錄音分割為2秒音頻窗口,與ESP32-S3上使用的實時推理窗口保持一致
?自動組織音頻片段到標簽類文件夾:正?;驂毫?
?生成一個干凈的,可復(fù)制的目錄結(jié)構(gòu),可以直接上傳到邊緣脈沖
通過自動分割和標記,該腳本確保訓(xùn)練數(shù)據(jù)與設(shè)備上的音頻管道緊密匹配,并降低人為標記錯誤的風險。
快速迭代子集創(chuàng)建(make_ei_subset_2h.py)
訓(xùn)練和實驗大型音頻數(shù)據(jù)集可能很耗時。為了加速開發(fā),使用第二個腳本來生成輕量級訓(xùn)練子集。這個腳本:
?獲取由prepare_beeguard_dataset.py生成的完全準備好的數(shù)據(jù)集
?從完整數(shù)據(jù)集中選擇一個有時間限制的子集(約2小時的音頻)
?保持正常和壓力等級之間的平衡分布
?輸出一個緊湊的數(shù)據(jù)集,在邊緣脈沖內(nèi)優(yōu)化快速迭代
這種方法允許在對完整數(shù)據(jù)集執(zhí)行最終訓(xùn)練之前對預(yù)處理參數(shù)和模型架構(gòu)進行快速實驗。
邊緣脈沖:數(shù)據(jù)預(yù)處理
將數(shù)據(jù)集上傳到Edge Impulse后,使用Mel頻率倒譜系數(shù)(MFCC)從原始蜂巢音頻信號中提取有意義的特征。
mfc非常適合這項任務(wù),因為它們捕獲蜂群聲音的頻譜特征,同時保持嵌入式設(shè)備的計算效率。
MFCC配置
預(yù)處理流水線配置如下:
?系數(shù):13
?幀長/步幅:30毫秒/ 15毫秒
?濾波器組:32
?FFT長度:256
?頻率范圍:100hz - 8khz
?預(yù)加重:0.97
選擇這些參數(shù)是為了平衡噪聲魯棒性、特征分辨率和設(shè)備上性能。
設(shè)備內(nèi)置性能
邊緣脈沖估計表明預(yù)處理階段需要:
~968 ms DSP時間
~ 29kb峰值RAM
這證實了整個預(yù)處理管道可以在ESP32-S3上高效運行,實現(xiàn)完全的設(shè)備上推理,而不依賴于云。
邊緣脈沖:模型訓(xùn)練
神經(jīng)網(wǎng)絡(luò)分類器使用Edge Impulse進行訓(xùn)練,并針對ESP32-S3的部署進行了優(yōu)化。訓(xùn)練進行了50個周期,學(xué)習率為0.005,使用int8量化來減少內(nèi)存占用并提高嵌入式硬件上的推理效率。模型的輸入由1716個MFCC特征組成,通過兩個帶有dropout的1D卷積和池化層進行處理以減少過擬合,然后是一個包含normal和stress兩類的輸出層。模型架構(gòu)故意保持緊湊,以平衡分類性能和資源約束。
在驗證數(shù)據(jù)集上,訓(xùn)練模型的準確率為84.3%,損失為0.39,加權(quán)f1分數(shù)為0.84。當使用Edge Impulse的EON編譯器編譯時,該模型顯示出強大的設(shè)備上性能,推理時間約為9 ms,峰值RAM使用量約為14.6 KB,閃存使用量約為46.5 KB。這些結(jié)果證實了該模型適用于ESP32-S3上的實時、設(shè)備上的蜂窩應(yīng)力檢測。
部署
經(jīng)過訓(xùn)練和驗證,Edge Impulse模型被部署為c++推理庫,并集成到基于arduino的固件中,運行在ESP32-S3 AI相機上。使用I2S接口在16 kHz從PDM麥克風實時捕獲音頻數(shù)據(jù),并在2秒窗口內(nèi)處理,與數(shù)據(jù)集準備和模型訓(xùn)練期間使用的配置相匹配。
在推理之前,每個音頻窗口都經(jīng)過輕量級的設(shè)備上預(yù)處理,包括DC偏移去除,增益歸一化和基于RMS和過零率(ZCR)的信號門控。此門控步驟防止了對沉默或無關(guān)噪聲的不必要推斷,并提高了整個系統(tǒng)的魯棒性。一旦檢測到有效的蜂群聲音,處理后的音頻被傳遞給邊緣脈沖分類器來估計壓力的概率。
為了進一步減少誤報,固件采用M-of-N投票機制,在確認警報之前需要連續(xù)進行多次壓力檢測,并有一段冷卻期以避免警報泛濫。當確認壓力狀況時,設(shè)備使用MQTT向公共HiveMQ代理發(fā)布遙測和警報,從而實現(xiàn)從任何地方進行遠程監(jiān)控。所有推理都完全在設(shè)備上運行,MQTT僅用于輕量級數(shù)據(jù)傳輸,使系統(tǒng)適合低功耗和遠程蜂窩部署。
MQTT (HiveMQ)配置+主題
這一部分將設(shè)備配置為向HiveMQ公共代理發(fā)布遙測和警報,使用簡短的MQTT主題來保持負載輕量級。
特征提取:RMS + ZCR(信號門控)
在運行ML模型之前,固件計算兩個簡單的音頻特征- RMS(信號能量)和ZCR(過零率)。這些用于門控推理和避免處理沉默或無關(guān)噪聲。
投票機制(M-of-N) +揭牌概念
原始分類器輸出可以在不同窗口之間波動,因此BeeGuard實現(xiàn)了M-of-N投票機制,只有在重復(fù)檢測后才能確認壓力。
冷卻以避免警報泛濫
即使在確認壓力后,固件也會強制執(zhí)行一段冷卻期,所以如果蜂巢保持壓力一段時間,警報不會向代理發(fā)送垃圾郵件。
MQTT發(fā)布:遙測+警報
固件發(fā)布:
?連續(xù)遙測(bg/tel),包括RMS/ZCR +概率+投票
?確認警報(bg/alert)時,壓力檢測和投票+冷卻允許它
結(jié)果與驗證
在測試過程中,BeeGuard可靠地檢測到與壓力有關(guān)的蜂房聲音,而忽略了寂靜和無關(guān)的噪音。RMS/ZCR門控顯著減少了不必要的推斷,壓力警報只有在反復(fù)確認后才會觸發(fā)。使用MQTT Explorer成功地實時接收了MQTT遙測和警報。
電源和邊緣優(yōu)勢
所有音頻處理和推理都在ESP32-S3上本地執(zhí)行,從而消除了對連續(xù)云流的需求。MQTT僅用于傳輸緊湊的遙測和警報,使系統(tǒng)適用于低功耗、遠程和潛在的太陽能蜂窩部署。
局限性和經(jīng)驗教訓(xùn)
目前的系統(tǒng)依賴于公開的蜂箱音頻數(shù)據(jù),并將受益于在真實蜂箱中捕獲的額外錄音。環(huán)境因素(如風和雨)也會影響音頻質(zhì)量,應(yīng)該在未來的迭代中加以解決。
本文編譯自hackster.io





