水表是常見的家庭設備,不過類似圖一的類比水表多達數千種,需要技術人員每個月到現場人工記錄資料,才能計算當月的使用量,這是十分費時且費力的工作。現在,電表逐漸被智慧電表所取代,不過成本仍然很高,對於缺乏連線能力的使用者,或尚未規畫更換經費的國家來說,這更加是艱鉅的任務。
本文敘述如何透過使用具MCU嵌入式連線能力的低解析度攝影機所組成的低功耗、低成本系統,有效地將類比儀表數位化。.
經由採用意法半導體(STMicroelectronics;ST)的STM32WL55,透過攝影機擷取水表讀錶區域,接著利用MCU上執行的 AI 演算法識別讀表。AI分類器演算法的結果(也就是讀錶)以STM32WL(如 LoRaWAN)支援的遠端 sub-GHz 無線網路傳輸。傳統的連線裝置會將影像傳送到雲端,而ST的解決方案則是傳輸讀數。這個方案的優勢,在於透過本地 AI 模型可以快速準確地識別讀數,然後只需要將讀數傳送回資料中心即可。
這種方法不僅可以有效保護使用者資料的隱私(僅傳輸推論結果),而且效率更高,並且節省頻寬。如此,使用者就能以低成本、低功耗、高效率的方式解決這個問題。
WL 系列是全世界第一款支援長距離無線通訊的 MCU。
STM32WL系列為一款可以連接LoRa低功耗廣域網路的系統晶片,其整合STM32L4超低功耗系列和支援多種調變方案的Sub-GHz射頻子系統。
STM32 成功的重要因素為其強大的生態系統。從事STM32WL工作的開發人員可以運用已在市場上獲得驗證之成熟的STM32生態系統,使用STM32通用開發所熟悉開發的工具,以及 subGHz 無線電開發和 AI 設計工具專用的套裝軟體組成。如此即可大幅降低開發門檻,加速產品上市時間。
生態系統中的資源,包括STM32CubeMX專案配置和程式碼產生工具、STM32CubeMonitor執行階段監控、視覺化工具,以及 STM32CubeProgrammer 程式碼燒錄工具。
STM32Cube.AI有助於使用者將經過訓練的AI模型快速部署到STM32上並進行驗證測試。STM32CubeWL MCU套裝軟體元件,包含STM32WL系列執行所需的所有嵌入式軟體模組,包括周邊裝置驅動程式、ST LoRaWAN 通訊協定堆疊、Sigfox通訊協定堆疊,以及使用ST 安全啟動和安全韌體更新技術實現LoRaWAN韌體無線更新的範例程式碼。
另外,還有兩個採用STM32WL的核板,用於快速原型設計:NUCLEO-WL55JC1(868pm 915amp 923 MHz)和NUCLEO-WL55JC2(433Accord470 MHz),以及兩個Nucleo開發板板,用於快速原型研發。而本文的使用範例即採用了NUCLEO-WL55JC2開發板。
除了NUCLEO-WL55JC2之外,這個專案的另一個關鍵元件是攝影機。
攝影機模組(採用低成本OV2640 感測器)透過標準GPIO直接連接到NUCLEO-WL55JC2 開發板中的STM32 MCU。由於STM32WL系列中沒有可用的DCMI 介面,在示範中使用了電磁計數器,這個計數器在多數常見的線上商店容易取得,因此容易複製重現。
實驗系統如圖五所示。
當所有硬體準備就緒之後,使用者就可以製作資料集進行模型訓練。
在電腦視覺中有典型的入門專案,就是識別 MNIST 資料集。MNIST資料集收集0-9共十個 阿拉伯數字的手寫字型,包括訓練集中6萬個樣本和測試集中的1千個樣本。對於想要使用現實世界資料,嘗試學習技術和模式識別方法,同時在預處理和格式化方面動用最少的人力來說,這是很好用的資料庫。
不過,我們無法直接使用這個資料集,因為水表上的數字字型和色彩與此資料集有極大的不同,為了達到更好的效能,我們會使用上述所提到的設備,讓資料集與MNIST類似。
以下討論這個專案,開啟 STM32 電腦視覺的大門。
這個資料集大約有 4千個樣本,每個樣本包含五個數字。資料集的部分樣本,如圖七所示。
當有資料集之後,就可以建立神經網路,並使用自己的資料集訓練模型。在這個模型中,輸入40X32(數字)的灰階影像來識別從0到19的20個類別,分別為:0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19。圖八則是訓練中失誤和準確度的變化。這個資料集背景很簡單,由於數字字型很規則,因此訓練效果很好。其實可以收集不同的水表讀數(不同的字型和色彩)一起訓練,如此一來,模型就可以識別多個水表讀數。
訓練結束後會取得模型檔案。迄今我們可以使用STM32cube.AI 工具,將模型轉化為最佳化程式碼,快速部署到 NUCLEO-WL55JC2開發板上。
由於整合STM32Cube,讓STM32Cube.AI使用者能夠有效地將模型移植到多樣化的STM32 微控制器系列中。而且對於類似模型也適用於不同產品的情況,能夠在STM32產品組合中輕鬆移轉,而此專案亦是利用STM32Cube.AI將模型部署到STM32WL。
此外,可以透過外掛程式擴充STM32CubeMX的功能,自動轉換預訓練的人工智慧演算法,並將產生的最佳化資料庫整合到使用者專案中,而不是建構手動輸入的程式碼。而且還能將深度學習解決方案嵌入各種STM32 微控制器產品組合中,藉以對每個產品新增智慧功能。
STM32Cube.AI 提供對各種深度學習框架的原生支援,例如 Keras、TensorFlow Lite、ConvNetJs,並支援所有可以匯出為ONNX標準格式的架構,例如PyTorch、Microsoft Cognitive Toolkit、MATLAB等。
此外,STM32Cube.AI支援來自大量機器學習開放原始碼程式庫Scikit-Learn的標準機器學習演算法,例如Isolation Forest、支援向量機器(SVM)、K-Means。
在這個專案中,使用了TensorFlow 架構。
最後,我們來看看實際效能。為了方便展示,我們將攝影機拍攝的影像和MCU上的識別結果傳送到電腦螢幕。影片中黑底白字的數字為攝影機所拍攝的圖片,第一行是AI模型的結果。我們將儀表設定為每五秒驅動一次,因此數字每五秒更新一次。以下是未經編輯的實際螢幕擷取畫面。