一种基于STM32 的电表数字识别系统

2023-08-16 05:01马金辉赵明冬
无线互联科技 2023年11期
关键词:电表读数字符

马金辉,周 斌,赵明冬

(郑州科技学院,河南 郑州 450064)

0 引言

电表是检测用电安全和统计用电量的重要手段和工具,但由于使用成本和某些特殊场景需求的限制,大多数电表并未更换为新一代智能电表。 目前多维人工定时读取电表数据,记录用电量,这种方法存在主观性大、工作效率和识别率低等缺陷,因此,电表数字的自动识别成了当前研究的热点问题。 如通过同态滤波和改进的Bersen 算法对电表数字区域的自动定位[1];通过优化Faster R-CNN 网络识别电表读数[2];基于BP 神经网络的机械式电表数字自动识别方法[3]。 目前,数字电表识别的解决方案大多依赖较为复杂的算法,这导致硬件系统的处理速度受到限制,难以形成轻量化系统。 为此,本文提出基于STM32 单片机的电表自动识别方法,以达到轻量化数字识别的需求。

1 系统组成

本系统以STM32F103ZET6TR 单片机作为控制核心,完成电表数字识别系统的设计与制作,系统框如图1 所示,包括了主控模块、数字检测与识别模块、电源模块、按键模块,能够完成自动识别电表读数的功能。

图1 电表数字识别系统

2 硬件分析

2.1 主控模块设计

主控模块以STM32F103ZET6TR 单片机作为系统主控系统,其内核为性能强、高性价比、低功耗的嵌入式应用专门设计的cortex-M 内核,该单片机上集成了32~512 KB 闪存,数据处理非常迅速,功能极其强大,时钟频率可达到72 MHz,是同类产品中性能最好的产品,完全能够满足系统的图像处理需求,并且能达到系统轻量化的目标。

2.2 数字检测与识别模块

系统选用OpenMV 摄像头作为数字检测与识别模块,OpenMV 为一个开源,高性价比,是具有功能强大的机器视觉系统,不仅搭载了OV7725 摄像芯片,而且相较于其他图像识别模块,OpenMV 可以在有限的硬件条件下实现核心机器视觉算法,并具有数据存储的卡槽,可以通过SD 卡存储大量的字模图片。 用户能够把控图像品质、数据格式和传输模式。 而其自身独有的OV 图像传感器技术,还可以得到清晰稳定的图像,达到本实验所需的图像效果。

与此同时,其内置了一些图像处理算法,使用时可以直接调用库实现数字识别功能。 此模块负责对电表图像进行采集和预处理,并在此基础上构建出字模库[4];再由字模库与采集的图像进行字符匹配。

2.3 TFT(Thin Film Transistor)显示模块

系统采用TFT 液晶显示屏作为读数图像显示模块,采用ILI9341 作为2.8 英寸的TFT-LCD 的液晶控制驱动。 TFT 液晶显示屏不仅可以直接显示出识别出的结果,便于判断系统识别数字的准确性和调试系统时结果的实时性,还可以显示系统当前状态,以便进行复位或切换模式等操作;其本身所具有的价格便宜、操作简单、抗干扰能力强等优点非常适合本系统。

2.4 电源模块

电源模块由两节18650 锂电池串联经过MP1584和AMS1117 的变压处理,为整个系统提供5V 或者3.3V 电压,再经过滤波部分、稳压部分,确保电路的正常稳定工作。

2.5 按键模块

按键模块由1×3 的按键矩阵构成,其功能分别为:复位、向上切换模式、向下切换模式;由于外界因素和硬件本身的不确定性,会导致系统在使用过程中产生较大的误差,因此需要进行复位以保证系统可以正常运行;而通过触发上下切换模式的按键,则会切换系统内储存的各类电表的字符库,减少了在PC 端配置的步骤,令整个系统更加便捷化、轻量化。

3 软件分析

3.1 算法流程

该系统软件使用C 语言进行软件编写,采用Keil 5 进行编程,搭配Proteus 进行仿真测试,最后用Stcisp 烧录软件下载至STM32F103ZET6TR 单片机中。主程序流程如图2 所示。 系统进行初始化程序,根据要识别电表的实际情况设置识别参数,通过OpenMV采集图片;进入灰度化处理、二值化处理、识别读数区域、字符裁剪的图像预处理子程序;进入数字识别子程序,使用字符匹配对电表读数进行识别;将识别结果输出至TFT 液晶显示屏上。

图2 主程序流程

3.2 图像预处理子程序

因为OpenMV 采集的图像为彩色图像,不利于本系统对读数的识别,所以为了便于后续的处理工作,在接收到图像后,首先要对其进行灰度化和二值化处理。 通过像素点之间的灰度值差异程度来确定要识别读数的区域;对识别区域的图像再次进行二值化处理,获得相邻字符间的边界,并按照其左右边界将连续的字符串分割为单个字符;对字符图片进行归一化。

3.2.1 灰度化处理

一幅彩色图像的任一像素上的颜色均由R、G、B这3 种单色构成,每个像素的颜色值又称为灰度,指黑白图像中点的颜色深度,范围一般从0 到255,白色为255,黑色为0。 对图像进行灰度化测试处理,其原图像与灰度化图像如图3 所示,通过灰度化处理令图像的内存占有更小,运算速度更快[5]。 可以排除不必要的信息,增强对比,更加突出目标区域,为下一步的二值化处理做基础。

图3 原图像与灰度化图像

3.2.2 二值化处理

图像二值化就是将图像上的像素点的灰度值设置为0 或255,也就是将整个图像呈现出明显的黑白效果的过程。 经过灰度化处理后虽然排除了一些不必要的信息,但图像还是包含了要识别的目标区域、背景和其他干扰因素。 为了之后对图像进行分割操作,还要对灰度化处理后的图像进行二值化处理,使图像中数据量大为减少,从而凸显出更清晰的特征信息。

本系统使用大津法(OTSU 算法)对图像进行二值化处理[6]。 设灰度图像灰度级是1~m 级,则将灰度范围在K 处截为C0={1~K}与C1={K+1~m}两部分,通过计算得出两部分出现的概率ω0和ω1,平均值μ0和μ1与整体灰度平均值μ,最后求出两部分之间的方差σ2(K),如下式(1)所示:

σ2(K)= ω0(μ0-μ)2+ω1(μ1-μ)2= ω0ω1(μ1-μ0)2= [μ × ω(K) - μ(K)]2/ω(K)[1 - ω(K)] (1)

计算当σ2(K)最大时K 的值K∗,那么这时K∗即为大津法二值化的最佳阈值。

对图像进行测试处理,其灰度化图像和二值化图像的结果如图4 所示。

图4 灰度化与二值化图像

3.2.3 识别读数区域

通过二值化分析出各行的跳变点,因为读数区域为字符,与其他范围差10 个,通过跳变点的分析和判断,即可判断出需要识别的读数区域。 本系统程序中设定跳变点大于10 个,在连续行存在多个跳变点大于10 的位置处即为识别区域的上边边界Y-start,结束位置设定为识别区域的下边边界Y-end。 再通过同样的方法识别出车牌区域的左边边界X-start 和右边边界X-end。 这样既可获取读数区域的准确边界,从而确定目标读数区域,如图5 示。

图5 目标读数区域

3.2.4 字符裁剪

由于系统使用的是匹配法识别数字,所以需要将数字串切割为单个数字,以便于下一步的数字识别操作,在目标读数区域确定后,再次通过二值化进行字符的分割处理。 在处理过程中,首先获取各个字符的左边边界B-left 和右边边界B-right,接着按照边界切割数字,对于一般电表,若分割出6 个字符,则认为分割结果比较准确,数字切割后图像如图6 所示。

图6 切割处理后的图像

3.3 数字识别子程序

系统使用基于NCC(Normalized Cross Correlation)算法,归一化互相关匹配法,来实现数字识别功能[7]。

NCC 算法是OpenMV 中一种常用的成熟的图像匹配算法,其优点为抗干扰能力强,当灰度变化不大时精度很高,符合本系统的要求。 NCC 算法结果只会在-1 到1 之间,所以非常容易量化比较结果,只要给出一个阈值就可以判别结果的好与坏。

在原始图像中任取一个点( px,py) 作为一个n ×n 匹配范围的基准点。 接着对于目标相对位置(px+d,py) 同样构建一个n ×n 大小的匹配范围,对两个范围进行相似度对比。 NCC 算法公式如下:

其中, NCC(p,d) 的区间为[- 1,1],Wp为匹配区间,I1(x,y) 为初始图像的像素值为初始区间内的像素均值,I2(x + d,y) 为对应点在x 方向上偏移d 后的像素值,为平移后目标范围内的像素均值。

当NCC=-1 时,则表示两个匹配区间完全不相关,反之,当NCC=1 时,则表示两个匹配区间强相关。此时,系统就会输出与模板强相关所代表的数字作为这一位的读数结果。

4 系统调试结果

使用系统对目标进行识别,研究表明:在上午8点光照条件良好的情况下,系统识别的正确率可达到90%;在晚上八点时光照条件不理想的情况下,系统不能识别出电表读数。

5 结语

为满足生活中数字电表读数的轻量化需求,本文利用STM32 单片机结合自构字符实现了电表数字的识别功能。 在光照条件良好的情况下,该方法能够实现90%以上的正确率,达到了设计效果。 但是在设计中仍存在一些需要改进的方面,例如光线过暗时需要辅助照明、数据通过无线网络上传系统终端等。

猜你喜欢
电表读数字符
字符代表几
一种USB接口字符液晶控制器设计
消失的殖民村庄和神秘字符
读数
读数
读数
读数
看电表
一种电表模拟软件的应用研究