APP下载

Android下的机械式电表数字识别技术研究

2016-12-22赵世峰

软件导刊 2016年11期
关键词:Android系统神经网络

赵世峰

摘 要:针对Android系统下机械式电表数字识别应用,提出一种电表读数图像ROI提取方法。为消除光照不均及反光的影响,结合Canny边缘检测、局部自适应阈值二值化与全局阈值二值化实现电表读数图像二值化。使用Opencv的人工神经网络多层感知器模型完成电表数字识别,测试结果显示,该技术对机械式电表读数具有较高的识别率。

关键词:Android系统;Opencv;ROI提取;图像二值化;神经网络

DOIDOI:10.11907/rjdk.162503

中图分类号:TP317.4

文献标识码:A 文章编号文章编号:16727800(2016)011019603

0 引言

随着社会的进步和电子技术的发展,传统的机械式电表正逐步被电子式电表和智能电表取代。尽管如此,在一些旧城区,尤其是广大边远农村地区,机械式电表用户仍然大量存在。机械式电表用户用电数据主要依靠电力抄表员人工读取记录,受人为因素影响较大。近年来,随着Android智能手机的普及和机器视觉技术的发展,利用具有摄像头的Android智能手机APP采集和识别机械式电表读数成为代替人工读数的有效途径。

OpenCV(Open Source Computer Vision Library) 是一个由一系列C函数和少量C++类构成的开源跨平台计算机视觉库,Qt是芬兰Digia公司所有的一个跨平台的C++图形用户界面应用程序框架。Android平台最初仅支持使用Java开发应用,Qt on Android和Qt Quick框架的推出为开发者使用C/C++开发Android应用提供了有力工具,也为Android中使用OpenCV快速开发图像处理应用提供了强大支持[1]。本文在PC机上建立了Qt for Android+Opencv的开发环境,可完成PC机应用程序及Android 手机应用的开发。Qt的版本为qt-opensource-windows-x86-android-5.3.0,Qt Creator的版本为3.1.1,NDK的版本为android-ndk-r9d,Opencv选择2.4.9版本,用于Android应用的是OpenCV-2.4.9-android。

1 图像获取与ROI提取

电表图像通过手机摄像头拍摄获取,为rgb模式的彩色图像。考虑到手持拍摄的可操作性,图像获取视窗应尽量宽大,表盘读数位于其中即可。这里设定图像获取视窗为长宽比2:1的区域,获取的较具有代表性的电表图像如图1所示。

图1(a)所示的电表图像背景较为单一,图1(b)所示的电表图像背景较为杂乱。电表读数区域为六位黑底白字的整数(红底白字的小数位一般无需读取),需进行提取。首先对图像进行均值低通滤波以降低噪声,接着消除彩色像素对ROI提取可能产生的影响(本文规定r、g、b值中最大与最小值之比大于1.5即为彩色像素),即以灰度直方图中峰值对应的灰度值替代彩色像素的r、g、b值;消除彩色像素后,将图像灰度化并使用OTSU算子对图像进行二值化,反转黑白后利用OpenCV中的morphologyEx函数进行闭运算以填充和连通表盘背景,最后定位表盘读数区域外轮廓,旋转校正并进行提取。提取过程如图2所示。

2 图像二值化与字符提取

图像二值化是字符识别过程的关键步骤,其效果直接关系到字符提取和字符识别的成败。电表读数极易受反光及光照不均影响,其二值化与字符提取难度远高于车牌识别系统。图3(a)所示的电表读数图像较为明显地受到了反光和暗角的影响,经典的全局OTSU算子[2]对其二值化的效果如图3(b)所示,效果较差。对于复杂条件下的图像二值化,目前的方法主要有根据背景光照分布对图像进行分割处理、背景光照均匀化、经典的局部阈值算法、结合Canny算子和局部阈值的方法等[35],其对同时受反光和光照不均影响的电表读数图像二值化效果均不理想。

基于Opencv的图像处理接口,本文提出了结合Canny边缘检测、局部自适应阈值二值化与全局阈值二值化的电表读数图像二值化方法,具体方法为:

Step1:对如图3(a)所示的电表读数图像,将其高度统一为100像素,灰度化并高斯平滑滤波。

Step2:对电表读数图像进行双阈值Canny检测,得到图4(a)所示的边缘图像。

Step3:采用Opencv的局部自适应阈值二值化函数对电表图像进行二值化,像素阈值T(x,y)的选取采用以像素点为中心的局部邻域块的高斯加权和(与高斯窗口的互相关),邻域块的大小为blocksize×blocksize,blocksize为奇数,将其设置为电表读数图像高度的三分之一,二值化结果如图4(b)所示。

Step4:以电表读数灰度图像的平均灰度值作为全局阈值对电表读数图像进行二值化,结果如图4(c)所示。

Step5:对如图4(b)所示的每个前景点,分别做如下处理:①若其在图4(c)的图像中对应位置不是前景点,则将其从前景点中剔除;②在如图4(a)的边缘图像中,以前景点的对应位置为中心的15×15邻域(高度统一为100像素的电表读数图像中数字的笔画宽度约为10像素)中统计边缘点(非零像素)个数,剔除其中邻域边缘点个数小于8的前景点,得到如图4(d)所示的二值化图像。

由图4可见,本文方法对受到光照不均及反光影像的电表读数图像具有较好的二值化效果,提取二值化后图像中的所有外轮廓,并对其按尺寸、长宽比、位置(轮廓中心横坐标相同或接近的,选取其中尺寸最大的)进行筛选,旋转截取后即可得到电表读数字符。筛选后的电表字符外轮廓定位和采用Zhang快速迭代算法[6]细化后的字符如图5所示。

3 字符特征提取与识别

在研究过程中,使用手机摄像头采集了3 000余幅电表图像,利用本文方法对其进行ROI提取、二值化及字符提取与细化,将提取的字符图像大小统一为20×20像素,字符特征提取与神经网络训练由Qt编写的PC机应用程序完成,具体方法为:①对于数字0~9各选取1 000个图像样本,每个图像样本以其水平、垂直直方图数据及15×15分辨率图像像素信息构成265维特征向量,构成训练样本数据;②使用Opencv的CvANN_MLP类建立人工神经网络多层感知器模型,层数设定为3层,输入层节点数与字符图像特征向量维数相同,输出层节点数为10,隐含层节点数设定为50,激活函数选取Sigmoid函数。通过训练样本数据对神经网络进行训练,将训练后的神经网络参数以XML文档方式保存。

在进行电表读数识别时,首先按本文方法进行ROI提取、二值化及字符提取,对提取的字符由神经网络模型进行分类识别,并按照字符中心位置在电表读数图像中的横坐标进行排序,即可得到电表读数。为验证技术的有效性,使用Qt for Android+Opencv开发环境开发了电表识别测试APP,APP中使用经PC机应用程序训练的神经网络模型,将其部署在华为荣耀3手机上。测试结果显示,在图像受光照不均及反光影像较小的情况下,电表读数识别的正确率达到90%,取得了较好效果。在图像受光照不均及反光影像较大时,由于ROI提取及二值化效果不佳,因而识别效果较差。

4 结语

由测试结果可以看出,本文提出的Android下的机械式电表数字识别技术可有效实现电表读数ROI提取,对易受光照不均及反光影响的电表读数图像二值化有较好效果,在Android平台下通过Opencv人工神经网络多层感知器模型对电表读数达到了较高的识别率,具有较高的应用价值。

参考文献:

[1] 安晓辉.Qt on Android核心编程[M].北京:电子工业出版社,2014.

[2] OTSU N.A threshold selection method from gray-level histograms[J].IEEE Transactions on Systems Man and Cybernetic,1979,9(1):6266.

[3] 陈强,朱立新,夏德深.结合Canny算子的图像二值化[J].计算机辅助设计与图形学学报,2005,17(6):13021305.

[4] 郭佳,刘晓玉,吴冰,等.一种光照不均匀图像的二值化方法[J].计算机应用与软件,2014,31(3):184186.

[5] 许海洋,马龙龙,吴健.基于背景估计和边缘检测的文档图像二值化[J].计算机应用与软件,2014,31(8):196200.

[6] ZHANG T Y,SUEN C Y.A fast parallel algorithm for thinning digital patterns[J].Comm ACM,1984(27):236239.

(责任编辑:孙 娟)

猜你喜欢

Android系统神经网络
神经网络抑制无线通信干扰探究
Android系统上的移动互联网集成平台开发机制
基于神经网络的拉矫机控制模型建立
复数神经网络在基于WiFi的室内LBS应用
基于支持向量机回归和RBF神经网络的PID整定