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