水表是常見的家用設(shè)備。模擬式水表(如下圖中所示)數(shù)量龐大,需要技術(shù)人員每月現(xiàn)場抄表并手工記錄數(shù)據(jù),以計算當(dāng)月的用水量。整個過程枯燥且費力。當(dāng)前,雖然聯(lián)網(wǎng)儀表正在取代模擬式水表,但成本也會隨之上漲;更何況,一些并不具備接入全球網(wǎng)絡(luò)的能力,而有的家庭和公司也無計劃支付更換儀表的費用。
意法半導(dǎo)體為你演示如何使用低功耗、低成本的系統(tǒng)(由采用MCU嵌入式連接的低分辨率攝像機組成)高效地將模擬式儀表數(shù)字化。
該方法以STM32WL55為基礎(chǔ),通過攝像頭捕捉水表讀數(shù)區(qū)域,然后通過MCU上運行的人工智能算法識別水表讀數(shù)。之后,AI分類器算法的運行結(jié)果(即儀表讀數(shù))通過STM32WL支持的遠程sub-GHz無線網(wǎng)絡(luò)(如LoRaWAN)進行傳輸。傳統(tǒng)的聯(lián)網(wǎng)設(shè)備會將圖像傳送到云端,而我們的解決方案傳送的是讀數(shù)。
該解決方案的優(yōu)點是:通過本地AI模型,可以快速準(zhǔn)確地識別讀數(shù),只需將結(jié)果發(fā)送回數(shù)據(jù)中心即可。此舉不僅能有效保護用戶數(shù)據(jù)隱私(僅傳輸推理結(jié)果),而且效率更高,還節(jié)省帶寬。這樣,我們就能以低成本、低功耗、高效率的方式解決問題。
STM32WL系列是世界上一款支持遠程無線通信的MCU。
作為市場上一款可以連接LoRa低功耗廣域網(wǎng)的系統(tǒng)級芯片,STM32WL集成了STM32L4超低功耗微控制器和支持多種調(diào)制方案的Sub-GHz射頻子系統(tǒng)。
STM32取得成功的一個重要因素是其強大的生態(tài)系統(tǒng)?;?/span>STM32WL產(chǎn)品的開發(fā)人員可以借用已經(jīng)被市場證明成熟可靠的STM32生態(tài)系統(tǒng)。該生態(tài)系統(tǒng)包含已經(jīng)熟練掌握的開發(fā)工具(支持基于STM32進行通用開發(fā))、專門用于sub-GHz無線電開發(fā)的軟件包,以及AI設(shè)計工具,由此大大降低了開發(fā)難度,并縮短了產(chǎn)品上市時間。
生態(tài)系統(tǒng)中的資源包括STM32CubeMX項目配置和代碼生成工具、STM32CubeMonitor運行時監(jiān)測和可視化工具,以及STM32CubeProgrammer代碼燒錄工具。
STM32Cube.AI可以幫助用戶快速將經(jīng)過訓(xùn)練的AI模型部署到STM32并進行驗證測試。
STM32CubeWL MCU軟件包的組件包含STM32WL系列運行所需的所有嵌入式軟件模塊,包括外設(shè)驅(qū)動程序、意法半導(dǎo)體的LoRaWAN協(xié)議棧、Sigfox協(xié)議棧,以及利用意法半導(dǎo)體安全啟動和安全固件更新技術(shù)實現(xiàn)LoRaWAN固件無線更新的示例代碼。
此外,還有兩種基于STM32WL的nucleo板件可用于快速原型制作:NUCLEO-WL55JC1(868pm 915amp 923 MHz)和NUCLEO-WL55JC2(433Accord470 MHz)。與此同時,有兩種基于Nucleo的Nucleo板可用于快速原型開發(fā)。該項目基于NUCLEO-WL55JC2開發(fā)板。
除了NUCLEO-WL55JC2,該項目的另一個關(guān)鍵組成部分是攝像頭。
攝像頭模塊(基于低成本的OV2640傳感器)通過標(biāo)準(zhǔn)GPIO直接連接到NUCLEO-WL55JC2開發(fā)板,因為STM32WL系列產(chǎn)品不提供DCMI接口。為方便進行演示,我們使用了一款常見的電磁計數(shù)器,這樣更容易進行模型演示。
實驗系統(tǒng)如下圖所示。我們將直流電源轉(zhuǎn)化成方波,用于驅(qū)動電磁計數(shù)器,然后攝像頭就可以采集計數(shù)器的讀數(shù)畫面,通過GPIO傳輸?shù)?/span>NUCLEO-WL55JC2,由MCU上運行的AI模型進行識別。
所有硬件準(zhǔn)備就緒后,我們就可以自己制作一個數(shù)據(jù)集,用于模型訓(xùn)練。
在計算機視覺應(yīng)用中,有一個經(jīng)典的入門級項目 - 識別MNIST數(shù)據(jù)集。MNIST數(shù)據(jù)集收集0-9這10個阿拉伯?dāng)?shù)字的手寫字體,包括訓(xùn)練集中的60000個樣本和測試集中的1000個樣本。有的用戶想要通過真實數(shù)據(jù)來嘗試學(xué)習(xí)技巧和模式識別方法,同時盡可能地節(jié)省在預(yù)處理和格式化方面花費的精力,對于此類用戶, MNIST是一個很好的練手項目。
但是我們不使用該數(shù)據(jù)集,因為水表上的數(shù)字的字體和顏色與該數(shù)據(jù)集差別很大。為了使模型獲得更好的表現(xiàn),我們將使用上面提到的設(shè)備制作一個類似于MNIST的數(shù)據(jù)集。
該數(shù)據(jù)集大約有4000個樣本。每個樣本包含5位數(shù)字。數(shù)據(jù)集的部分樣本如下所示:
擁有數(shù)據(jù)集之后,我們可以構(gòu)建一個神經(jīng)網(wǎng)絡(luò),并用自己的數(shù)據(jù)集來訓(xùn)練模型。在該模型中,我們輸入一幅40 X32(單個字符)的灰度圖像來識別從0到19(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)的20個類。下圖顯示了訓(xùn)練中的損失和準(zhǔn)確率的變化。該數(shù)據(jù)集的特點是背景簡單和字體規(guī)則,看起來訓(xùn)練效果非常好。實際上,我們可以收集不同的水表讀數(shù)(不同的字體和顏色)進行訓(xùn)練,這樣一個模型就可以識別多個不同水表讀數(shù)。
訓(xùn)練結(jié)束后,我們將得到一個模型文件。此時,我們可以使用前面文章中提到的STM32cube.AI工具將模型轉(zhuǎn)換為優(yōu)化的代碼,并快速將其部署到NUCLEO-WL55JC2板。
STM32Cube集成使STM32Cube.AI用戶能夠有效地在廣泛的STM32微控制器系列產(chǎn)品之間移植模型,并且(在相似型號適用于不同產(chǎn)品的情況下)在STM32產(chǎn)品之間輕松遷移。該項目使用STM32cube.AI將模型部署到STM32WL。
該插件擴展了STM32CubeMX功能,可自動轉(zhuǎn)換預(yù)訓(xùn)練人工智能模型和將生成的優(yōu)化庫集成到用戶項目中,而不是人工構(gòu)建代碼,并支持將深度學(xué)習(xí)解決方案嵌入到廣泛的STM32微控制器產(chǎn)品組合中,從而為每個產(chǎn)品添加新的智能化功能。
STM32Cube.AI原生支持各種深度學(xué)習(xí)框架,如Keras、TensorFlow? Lite、ConvNetJs,并支持可導(dǎo)出為ONNX標(biāo)準(zhǔn)格式的所有框架,如PyTorch?、Microsoft®Cognitive Toolkit、MATLAB®等。
此外,STM32Cube.AI支持來自廣泛ML開源庫Scikit-Learn的標(biāo)準(zhǔn)機器學(xué)習(xí)算法,如孤立森林、支持向量機(SVM)、K-Means。
在該項目中,我們使用的是TensorFlow框架。
最后,讓我們看看實際表現(xiàn)如何。為了便于演示,我們將攝像頭捕捉到的圖像和MCU上的識別結(jié)果傳輸?shù)接嬎銠C屏幕上。視頻中黑色背景上的數(shù)字(白色字體)是攝像頭捕捉到的圖像,一行是AI模型的識別結(jié)果。我們將水表設(shè)置為每五秒鐘驅(qū)動一次,這樣數(shù)字每隔五秒就會更新一次。該視頻顯示的是未經(jīng)編輯的錄屏。在演示過程中,我們采用了遮擋的光線的方式,去模擬不同的光照條件,證明模型的魯棒性很好。