水表是常见的家庭设备,不过类似图一的类比水表多达数千种,需要技术人员每个月到现场人工记录资料,才能计算当月的使用量,这是十分费时且费力的工作。现在,电表逐渐被智慧电表所取代,不过成本仍然很高,对于缺乏连缐能力的使用者,或尚未规画更换经费的国家来说,这更加是艰鉅的任务。


本文叙述如何透过使用具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模型的结果。我们将仪表设定为每五秒驱动一次,因此数字每五秒更新一次。以下是未经编辑的实际萤幕撷取画面。



图十
图十