1. 引言
城市规模的不断扩大,随即带来越来越大的管理信息量,便需要城市管理的智能化程度的不断提高。对于电力资源的管理离不开电表的智能化管理,而目前的手工抄表模式工作量巨大,并且人工处理过程中容易出现错误,基于此需求进行系统研制,通过图像处理和字符识别的应用来实现管理系统的统一化、标准化、实时性 [1] [2] 。
图像识别的主要目的是利用计算机自动处理图片信息,用来取代人工去对图像进行分类和识别。对图像上信息的识别而言,即光学识别(Optical Character Recognition, OCR),Tesseract-OCR是较为强大的识别技术 [3] ,而且该项技术是完全开源的。而传统OCR技术对图像的要求较大,所以对图像进行前期处理有利于达到更好的识别效果 [4] 。当前OCR技术应用在电表识别的案例中采用的处理设备比较昂贵,胡立夫 [5] 等人研究可持式的低成本设备,通过设计具有获取图像、图像处理、光学识别和数据存储等技术的内置嵌入式系统以完成数字识别、数据记录和统计等任务。
本文为了解决现阶段识别方法的价格昂贵、存在错误率和识别图像要求高等难题,在进行光学识别之前进行图像处理,并通过试验来选取系统最优的处理模式和参数。本文研发系统的目的是将数字图像的光学识别应用于电表的抄表工作,以此来实现减少抄表的工作量、节省工作时间和提高识别准确率 [6] 。本文的识别系统的硬件设备是树莓派,其与现有的大型识别系统来比较,具有成本低、速度快、设备体积小、易于携带和操作开发周期短等优点。
2. 读表系统的构成与工作原理
2.1. 读表系统的硬件构成
读表系统工作流程模块图,如图1所示。它的硬件部分主要由摄像头、光源和控制芯片等组成。光源采用节能的LED灯组,给图像获取提供必要的光线条件,从而保证较高的识别准确率。获取图像的摄像头采用树莓派官方摄像头(Raspberry Pi Camera Module v2)。控制和处理系统的硬件采用树莓派(Raspberry Pi),在树莓派上的读表系统主要有图片处理、OCR识别、数据记录表存储和云传输等功能。
2.2. 读表系统的工作原理
该系统的基本工作原理为:通过树莓派摄像头获取待识别的电表图像,然后对图像进行预处理,

Figure 1. System process module diagram
图1. 系统流程模块图
处理后的图像使用OCR识别,识别后的数据记录在设备。工作流程为:LED灯源开启后,提供必要的光线环境,树莓派发出获取图片的控制命令,摄像头开始工作,聚焦完毕后获取一张带有电表数字的图片保存在设备。如图2所示,图像处理的步骤为归一化尺寸、灰度化、高斯模糊、二值化处理和连通区域提取,所有的图像处理通过采用开源的Python-OpenCV程序实现。经过处理后的图像具有较高的可识别性,使用Python内安装的Tesseract模块对图像进行OCR识别,得出电表显示的数字。每次识别完之后将数据以txt文件保存在设备,可通过GPRS通讯模块或者WIFI连接网络后将汇总数据发送到云端。
3. 读表系统软件的关键算法
3.1. 高斯模糊算法及用OpenCV的实现
高斯模糊算法,实质上是一种数据平滑(Data Smoothing)技术。应用在图像处理上,实质是“模糊”像素点,每一个像素都取周围像素的平均值。高斯模糊算法为了合理分配权重,依据据图像的连续性,使得距离越近的点权重越大,距离越远的点权重越小。高斯模糊算法的核心权重分配模式即是正态分布(高斯分布)。
正态分布的密度函数称为“高斯函数(Gaussian function)”,由于需要处理像素点为二维的,故需要使用公式(1)二维高斯函数:
(1)
利用高斯函数可以求得每个点的权重,选定中心点之后可以得到权重矩阵,每个点的像素值乘以各自的权重得到最后的高斯模糊矩阵。为了简化算法计算步骤,图像采取灰度化处理,即只需要对每个像素点的灰度值进行高斯模糊处理。
在Python-OpenCV中实现的方法是调用cv2.GaussianBlur函数:
函数的第一个参数“img”是图像源,光学字符读表系统的此处图像是灰度化图像,第二个参“(5,5)”是高斯矩阵的尺寸,第三个参数“0”是标准差(高斯公式中的“σ”值)。根据高斯公式可知道,高斯矩阵的尺寸越大,标准差越大,图像模糊程度就越大。如图3所示,分别采用左边“(5,5)”和右边“(11,11)”的高斯矩阵尺寸进行图像的高斯模糊处理,得出的“(11,11)”尺寸下的模糊程度更大。
3.2. 图像二值化在OpenCV实现的原理
图像二值化能够去除图像里的绝大部分的背景和噪声,并且提取出目标物体,常用的实现方法就是

Figure 3. Contrast diagram of Gaussian blur
图3. 高斯模糊对比示意图
设置一个阈值,用阈值将图像的的数据分为两部分,一个是大于阈值的像素群,另一个是小于阈值的像素群,分别进行像素值的置换处理。
在Python-OpenCV中提供了cv2.threshold(阈值)函数:

第一个参数“img”是指图像源,光学字符读表系统的此处来源是高斯模糊处理之后的图像,第二个参数“x”是用来对像素值进行分类的阈值,第三个参数“y”是指赋予新的像素值(最大值),第四个参数“Methods”指不同的阈值方法。不同的阈值方法对阈值上下两部分的像素点的处理方式不同(图4)。
THRESH_BINARY方法对大于阈值的像素设定为阈值函数中的最大值“y”,小于阈值的像素点设定为0,如图5所示。
THRESH_BINARY_INV方法对大于阈值的像素点设定为0,小于阈值的设定为最大值,如图6所示。
THRESH_TRUNC方法对大于阈值的像素点设定为该阈值,对小于阈值的像素点不进行改变,如图7所示。

Figure 4. Pixel point value (solid line) and threshold (dotted line) of initial image
图4. 初始图像像素点值(粗实线)和阈值(虚线)

Figure 6. THRESH_BINARY_INV method
图6. THRESH_BINARY_INV方法
THRESH_TOZERO方法将大于阈值的像素点设定为0,小于阈值的像素点不进行改变,如图8所示。
图8中THRESH_TOZERO_INV方法将大于阈值的像素点不进行改变,对小于阈值的像素点设定为0,如图9所示。
相反的阈值方法处理的像素点数值不同,处理完之后的图像效果相反,如图10、图11所示。

Figure 9. THRESH_TOZERO_INV method
图9. THRESH_TOZERO_INV方法

Figure 10. THRESH_BINARY effect diagram
图10. THRESH_BINARY方法效果示意图

Figure 11. THRESH_BINARY_INV effect diagram
图11. THRESH_BINARY_INV方法效果示意图
4. 读表系统参数试验及结果
4.1. 高斯矩阵尺寸试验数据
用不同的高斯矩阵尺寸对相同的10张样本图像进行高斯模糊处理,之后的图像处理步骤一致,通过对比,尺寸为(5,5)的高斯模糊效果最终实现的图像识别率最高,故光学字符读表系统选用(5,5)的矩阵尺寸,如图12所示。
4.2. 图像二值化处理的参数选择
由于每张图像进行灰度化之后的灰度值都有一定的差距,所以阈值的大小不能固定在某个数值,本文的读表系统在对电表类样本进行试验之后建议取值区间为25~75,如表1所示。为了最大限度地体现电表数字的轮廓,选用255作为最大值。由于电表数字较为单一且轮廓较为简单,可以直接选用二值化函数中的THRESH_BINARY/THRESH_BINARY_INV作为阈值模式,较为极端的处理能够更好的去除噪音,只需要凸显数字的形状。
4.3. 系统识别效果图
对电表图片进行尺寸归一化以后得到原始图片如图13所示,经过本文3.1和3.2章节的关键算法处理后得到最后的待识别图片,系统随即用Tesseract (Python环境下)进行OCR识别,得到电表数字。系统试验结果,如图14所示,得到的字符“9138”就是电表显示的数字。

Figure 12. Different gauss matrix result line graph
图12. 不同高斯矩阵尺寸识别率折线图

Table 1. The proposed value of binarization processing arguments
表1. 系统二值化处理参数建议值表
5. 结论
为了实现电表数字的自动化识别,缩短电表数据记录的过程,减少仪器成本和人为错误率,将光学识别应用在电表数字识别上,本文建立了电表数据的精准识别和数据记录的系统。首先介绍了读表系统的工作原理、硬件组成、图像处理算法和工作流程,并对核心图像处理的算法进行了研究,最后对关键参数的选值进行分析和验证。试验结果表明:在高斯矩阵设定为(5,5)且二值化处理的阈值设定区间为25~75的条件下,在试验设定的光照环境下,能够全部成功识别,成功率可达到100%,并且每张识别时间都小于1秒,满足光学字符读表系统的要求。
致谢
本文获得2017国家级大学生创新创业训练计划资助。
NOTES
*通讯作者。