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





