STM32低功耗计算机视觉:模拟仪表展示
水表是常见的家庭设备,不过类似图一的模拟水表多达数千种,需要技术人员每个月到现场人工记录数据,才能计算当月的使用量,这是十分费时且费力的工作。现在,电表逐渐被智慧电表所取代,不过成本仍然很高,对于缺乏联机能力的使用者,或尚未规画更换经费的国家来说,这更加是艰巨的任务。
本文叙述如何透过使用具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模型的结果。我们将仪表设定为每五秒驱动一次,因此数字每五秒更新一次。以下是未经编辑的实际屏幕快照。
图十
评论