如何使用TinyML構(gòu)建一個(gè)完全離線運(yùn)行的語音控制智能家居自動化系統(tǒng)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
1. 介紹
想象一下,早上醒來,只要簡單地說一聲“開燈”,你房間的燈就會立刻亮起來。當(dāng)你開始一天的工作時(shí),你一邊啜飲咖啡,一邊指示“開啟風(fēng)扇”,感受涼爽的微風(fēng)。之后,當(dāng)你放松下來的時(shí)候,你說“Mood Lights On”,用柔和的燈光創(chuàng)造一個(gè)放松的氛圍。有了離線關(guān)鍵字定位,所有這一切都無縫地發(fā)生,沒有互聯(lián)網(wǎng)延遲,確??焖?,私人和可靠的體驗(yàn)。隨著Edge AI和TinyML的進(jìn)步,智能家居自動化變得更加高效和易用。本項(xiàng)目演示了如何使用TinyML構(gòu)建一個(gè)完全離線運(yùn)行的語音控制智能家居自動化系統(tǒng)。通過利用XIAO ESP32S3 Sense微控制器,我們可以在不依賴云服務(wù)的情況下本地處理“開燈”和“關(guān)燈”等語音命令。這種方法確保了隱私、減少了延遲,并最大限度地降低了功耗。
主要特點(diǎn):
?離線語音命令識別使用TinyML。
?通過繼電器控制交流電器。
?手動覆蓋開關(guān),可靠性高。
?節(jié)能設(shè)計(jì)與睡眠模式。
2. 硬件需求
組件:
1. XIAO ESP32S3 Sense:內(nèi)置麥克風(fēng)的雙核微控制器。
2. 1通道繼電器模塊:用于交流電器的開關(guān)。
3. 降壓轉(zhuǎn)換器:微控制器降壓(5V輸出)。
4. SPDT開關(guān):手動控制覆蓋。
5. *交流燈泡和燈座*:演示負(fù)載。
6. *跳線和PCB*:用于電路組裝。
工具*:
—烙鐵、萬用表、螺絲刀。
3. 系統(tǒng)工作流程
?XIAO ESP32S3 Sense通過其板載麥克風(fēng)持續(xù)監(jiān)聽語音命令。
?TinyML模型處理音頻輸入并檢測特定的關(guān)鍵字。
?一旦檢測到一個(gè)有效的命令,微控制器觸發(fā)繼電器模塊開關(guān)各自的設(shè)備上或關(guān)閉。
?手動控制開關(guān)允許另一種操作設(shè)備的方法。
4. 一步一步的教程
第一步:Altium中1通道繼電器和XIAO的PCB設(shè)計(jì)和制造
組件:
步驟1a:電路設(shè)計(jì)
繼電器模塊電路包括:
?繼電器控制:
XIAO的D0引腳通過晶體管驅(qū)動繼電器線圈(未列出,但在電路中假設(shè))。
1N4007二極管橫跨繼電器線圈進(jìn)行反電動勢保護(hù)。
?狀態(tài)指標(biāo):
紅色LED (330Ω電阻)顯示電源狀態(tài)。
綠色LED (1kΩ電阻)表示繼電器激活。
步驟1b: PCB布局
?組件放置:
將XIAO的足跡放置在邊緣附近,以便于訪問。
將繼電器和led靠近各自的電阻。
?跟蹤路由:
電源線使用20 - 30mil走線。
保持信號走線(D0到繼電器)短以減少噪聲。
?小集成:
為XIAO的D0、5V和GND引腳設(shè)計(jì)接線頭/焊盤。
步驟1c:生成Gerber文件
在Altium:文件→制作輸出→Gerber文件。
包括層:頂級銅,絲印,鉆。
步驟1d。PCB制造
步驟1:準(zhǔn)備覆銅板
清潔表面:
用鋼棉擦洗銅片以去除氧化。
用異丙醇擦拭,使表面無油脂。
步驟2:轉(zhuǎn)印設(shè)計(jì)
傳熱方式:
在光面紙上打印PCB布局(鏡像)。
將紙放在銅片上,通過加熱輥(180°C)加熱5-10分鐘。
將紙浸泡在水中,將墨粉留在銅片上。
3 .蝕刻
用氯化鐵蝕刻:
將銅片浸入氯化鐵溶液中(與水的比例為1:3)。
輕輕攪拌,直到不需要的銅溶解(10-30分鐘)。
安全:佩戴手套和護(hù)目鏡。
清潔PCB:
用鋼絲絨擦掉墨粉。
用清水沖洗并擦干。
鉆孔:
組件引線使用0.8-1mm鉆頭。
步驟1e裝配與測試
步驟1:焊接元件
大會順序:
電阻→led→二極管→繼電器→XIAO頭。
焊接小貼士:
加熱襯墊,而不是部件。
用鋼絲鉗修剪多余的引線。
第二步:連續(xù)性檢查
使用萬用表在連續(xù)模式下驗(yàn)證:
5V與GND之間無短路。
D0引腳連接繼電器控制電路。
使用萬用表在連續(xù)模式下驗(yàn)證:
5V與GND之間無短路。
D0引腳連接繼電器控制電路。
步驟3:功能測試
力量:
連接5V到XIAO。紅色LED應(yīng)該會發(fā)光。
力量:
連接5V到XIAO。紅色LED應(yīng)該會發(fā)光。
繼電器測試:
將代碼上傳到XIAO以切換D0(參見下面的代碼片段)。
當(dāng)繼電器激活時(shí),綠色LED應(yīng)該亮起。
繼電器測試:
將代碼上傳到XIAO以切換D0(參見下面的代碼片段)。
當(dāng)繼電器激活時(shí),綠色LED應(yīng)該亮起。
第二步:在XIAO ESP32S3 Sense上訓(xùn)練基于TinyML模型的音頻
XIAO ESP32S3傳感器介紹
一個(gè)緊湊但功能強(qiáng)大的開發(fā)板,旨在啟動您的智能語音和視覺AI之旅。憑借其集成的相機(jī)傳感器,數(shù)字麥克風(fēng)和SD卡支持,這個(gè)小板包一個(gè)punch,提供嵌入式機(jī)器學(xué)習(xí)計(jì)算能力和攝影功能。無論您是深入研究邊緣計(jì)算還是探索人工智能應(yīng)用,XIAO ESP32S3 Sense都是您輕松高效地實(shí)現(xiàn)創(chuàng)新項(xiàng)目的首選工具。
邊緣脈沖介紹
Edge Impulse是一個(gè)專門為邊緣設(shè)備和嵌入式系統(tǒng)設(shè)計(jì)的機(jī)器學(xué)習(xí)模型開發(fā)平臺。它提供了一套全面的工具和服務(wù),使開發(fā)人員能夠快速創(chuàng)建、訓(xùn)練和部署機(jī)器學(xué)習(xí)模型,而不需要深入的機(jī)器學(xué)習(xí)專業(yè)知識。
錄音音頻與XIAO ESP32S3傳感器
讓我們使用板載SD卡讀卡器來保存。wav音頻文件,我們需要首先調(diào)整XIAO PSRAM。
將micro - sd卡插入micro - sd卡插槽。請注意插入方向,金手指的那一面要朝內(nèi)。
將以下程序編譯上傳到XIAO ESP32S3。
現(xiàn)在,編譯并運(yùn)行代碼,獲取不同大象聲音的樣本。你也可以捕捉噪音和其他聲音。串行監(jiān)視器將提示您接收要記錄的標(biāo)簽。
發(fā)送標(biāo)簽(例如,l_on, l_off)。程序?qū)⒌却硪粋€(gè)命令:rec。每次發(fā)送命令rec時(shí),程序?qū)㈤_始記錄新的樣本。文件將保存為l_on.1.wav、l_on.2.wav、l_on.3.wav等,直到發(fā)送新標(biāo)簽(例如,notice)。在這種情況下,您應(yīng)該為每個(gè)新示例發(fā)送命令rec,它將被保存為Noice1.wav, noice2 .wav, noice3 .wav等。最后,我們將在SD卡上獲得保存的文件。
先發(fā)送第一個(gè)標(biāo)簽名稱,通過串行監(jiān)視器
然后發(fā)送命令rec,并開始使用XIAO記錄命令。
以相同的量收集兩種樣品。
使用讀卡器將存儲在SD卡內(nèi)的所有聲音樣本保存到您的計(jì)算機(jī)。
訓(xùn)練輸出模型與邊緣脈沖。
我們應(yīng)該在Edge Impulse發(fā)起一個(gè)新項(xiàng)目,并給它起同樣的名字“mini”。
創(chuàng)建項(xiàng)目后,在Data Acquisition部分中選擇Upload Data工具。選擇要上傳的文件。
確保訓(xùn)練和測試集之間的平衡。80/20是推薦的最佳比例。
數(shù)據(jù)集上所有數(shù)據(jù)的長度都是1s,但上一節(jié)記錄的樣本長度為10s,必須分成1s個(gè)樣本才能兼容。單擊樣本名稱后的三個(gè)點(diǎn),然后選擇Split sample。
進(jìn)入工具后,將數(shù)據(jù)分割為1秒記錄。如果需要,添加或刪除段。所有樣品都應(yīng)重復(fù)此步驟。
后藤動力設(shè)計(jì)
脈沖獲取原始數(shù)據(jù),使用信號處理提取特征,然后使用學(xué)習(xí)塊對新數(shù)據(jù)進(jìn)行分類。首先,我們將使用一個(gè)1秒的窗口獲取數(shù)據(jù)點(diǎn),增加數(shù)據(jù),每隔500毫秒滑動該窗口。注意,設(shè)置了選項(xiàng)0 -pad數(shù)據(jù)。用小于1秒的零樣本填充是很重要的(在某些情況下,我減少了分割工具上的1000毫秒窗口,以避免噪音和尖峰)。
下一步是創(chuàng)建下一階段要訓(xùn)練的圖像。我們可以保持默認(rèn)參數(shù)值或利用DSP Autotuneparameters選項(xiàng),我們將這樣做。
我們將使用卷積神經(jīng)網(wǎng)絡(luò)(CNN)模型?;炯軜?gòu)由兩個(gè)Conv1D + MaxPooling塊(分別有8和16個(gè)神經(jīng)元)和0.25 Dropout定義。在最后一層,四個(gè)神經(jīng)元被壓平后,每個(gè)類別一個(gè)。
性能校準(zhǔn)導(dǎo)航到Edge Impulse Studio的“性能校準(zhǔn)”選項(xiàng)卡。
配置測試設(shè)置:
選擇噪音標(biāo)簽:識別代表背景噪音或靜音的標(biāo)簽。
忽略特定的標(biāo)簽:選擇在測試過程中應(yīng)該忽略的任何標(biāo)簽。
選擇音頻樣本類型:選擇“模擬真實(shí)世界音頻”從您的測試數(shù)據(jù)集生成合成音頻流,或上傳您自己的錄音在.zip文件。
運(yùn)行測試:單擊“運(yùn)行測試”啟動性能校準(zhǔn)。系統(tǒng)將評估你的模型的準(zhǔn)確性,重點(diǎn)是假陽性和假陰性。
選擇并保存配置
檢查錯誤接受率(FAR)和錯誤拒絕率(FRR)圖表上給出的建議配置。邊緣脈沖文檔
選擇一種能夠平衡假陽性和假陰性之間的取舍的配置,與您的項(xiàng)目需求保持一致。邊緣脈沖文檔
單擊“Save selected config”以在部署期間應(yīng)用此配置。
導(dǎo)出為Arduino庫
Edge Impulse將打包所有所需的庫,預(yù)處理功能和訓(xùn)練模型,將它們下載到您的計(jì)算機(jī)上。您應(yīng)該選擇Arduino Library選項(xiàng),并在底部選擇Quantized (Int8)并按下Build按鈕。當(dāng)選擇Build按鈕時(shí),將創(chuàng)建一個(gè)Zip文件并將其下載到計(jì)算機(jī)上。部署模型到XIAO ESP32S3 Sense
部署模型到XIAO ESP32S3 Sense
將壓縮文件上傳到Arduino IDE
在使用下載的庫之前,我們需要啟用ESP NN加速器。為此,您可以從項(xiàng)目GitHub下載一個(gè)初步版本,解壓縮它,并將其替換為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等)。
編寫檢測關(guān)鍵字的代碼:
這部分代碼遍歷機(jī)器學(xué)習(xí)模型輸出的每個(gè)預(yù)測(或標(biāo)簽)。對于每個(gè)標(biāo)簽,它首先檢查標(biāo)簽是否為“l(fā)_on”(意思是“燈亮”),以及模型對該標(biāo)簽的置信度是否為70%或更高。如果兩個(gè)條件都為真,它打印“燈已打開”到串行監(jiān)視器,然后發(fā)送一個(gè)高信號到繼電器引腳,它打開連接的燈。同樣,它檢查標(biāo)簽是否為“l(fā)_off”(意思是“關(guān)燈”),以及置信度是否至少為70%。如果是,它打印“燈已關(guān)閉”,并發(fā)送一個(gè)低信號到繼電器,關(guān)閉燈。這種邏輯允許系統(tǒng)對模型識別的特定語音命令做出反應(yīng),并相應(yīng)地控制燈光,但前提是模型對聽到的聲音有足夠的信心
第三步:布線和組裝
該電路由XIAO ESP32S3感測微控制器、2通道繼電器模塊、降壓轉(zhuǎn)換器以及風(fēng)扇、燈泡和LED燈帶等常見家用設(shè)備組成。一個(gè)9-12V的電源被送入降壓轉(zhuǎn)換器,降壓轉(zhuǎn)換器將其降壓至5V,為ESP32S3和繼電器模塊供電。ESP32S3通過VCC、GND和GPIO控制引腳連接到繼電器模塊。這些控制引腳作為信號線來激活繼電器。繼電器輸出連接到風(fēng)扇和燈泡,使交流電源通過繼電器接通或關(guān)閉。此外,雙向開關(guān)與繼電器并聯(lián)連接,無論智能系統(tǒng)狀態(tài)如何,都可以手動控制設(shè)備。
XIAO ESP32S3傳感器通過連接的軟件平臺或嵌入式語音識別系統(tǒng)接收語音命令。根據(jù)命令,通過其GPIO引腳向繼電器模塊發(fā)送HIGH或LOW信號。當(dāng)繼電器接收到高信號時(shí),它激活并關(guān)閉電路,允許交流電流流向相應(yīng)的電器(風(fēng)扇或燈泡)。低信號打開繼電器,關(guān)閉電器。繼電器作為低壓控制側(cè)(ESP32S3)和高壓交流負(fù)載側(cè)之間的橋梁。手動雙向開關(guān)確保設(shè)備仍然可以傳統(tǒng)操作,如果需要的話。所有高壓連接都是仔細(xì)和安全的,遵循適當(dāng)?shù)慕^緣和安全措施。
第四步:測試
觀察
該設(shè)置經(jīng)過了徹底的測試,以確??煽康男阅?。XIAO ESP32S3能夠正確識別“開燈”和“關(guān)燈”等語音命令,準(zhǔn)確率很高。繼電器開關(guān)反應(yīng)迅速,幾乎沒有延遲。語音模型在設(shè)備上完全脫機(jī)運(yùn)行,因此不需要互聯(lián)網(wǎng)連接,這使得響應(yīng)時(shí)間更快。
第五步:3D設(shè)計(jì)的外殼在融合360
在Fusion 360中設(shè)計(jì)了一個(gè)定制的外殼,以整齊地容納繼電器模塊和XIAO ESP32S3微控制器。設(shè)計(jì)的重點(diǎn)是實(shí)用功能,如通風(fēng)散熱,易于訪問的端口,并安裝插槽固定的情況下。外殼的外觀也與家庭內(nèi)部很好地融合在一起。外殼使用PLA材料在FDM打印機(jī)上進(jìn)行3D打印,并使用螺釘進(jìn)行組裝,以確保清潔和安全。
優(yōu)勢
?離線處理——消除對互聯(lián)網(wǎng)的依賴
?增強(qiáng)隱私-沒有數(shù)據(jù)發(fā)送到云服務(wù)
?通過Edge AI實(shí)現(xiàn)低功耗
?與基于云的系統(tǒng)相比,響應(yīng)時(shí)間更快
?可定制和可擴(kuò)展的系統(tǒng)架構(gòu)
?人性化的免提操作
結(jié)論
本項(xiàng)目展示了使用TinyML和谷歌Assistant的高效、可擴(kuò)展的智能自動化解決方案。它利用本地語音識別進(jìn)行離線控制,并利用云集成進(jìn)行遠(yuǎn)程訪問。該方法可以擴(kuò)展到多個(gè)設(shè)備,并擴(kuò)展到工業(yè)或農(nóng)村自動化系統(tǒng)。
本文編譯自hackster.io