基于BP神经网络的单数字字符识别算法实现

摘要:提出一个BP神经网络的单数字字符识别算法的总体实现方案,实现单数字字符图像的采集、储存、识别和显示。根据BP神经网络的原理,把识别算法分成工作期算法和学习期算法,并采用VC++6.0软件,运用VC语言分别设计并实现其算法,用MFC设计了系统的显示界面,最终可以在液晶屏幕上看到字符的识别结果。结果显示运用该算法,单数子图像识别率在90%以上,而且学习次数越多,识别率越高。基于BP神经网络的单数字字符识别算法可以广泛应用到数字仪表、车牌识别、卫星定位等很多领域,具有一定的应用价值。

关键词:单数字字符;识别算法;BP网络

中图分类号:TP183文献标识码:A文章编号:1009-3044(2008)29-0461-03

Recognition Algorithm of Single Numeric Character Based on BP Neural Network

PAN Zhi-jie, REN Sai-jun, CHEN You-rong

(Information Science & Technology College,Zhejiang Shuren University,Hangzhou 310015,China)

Abstract: Propose an overall realized project that recognition algorithm of single numeric character based on BP neural network, realizes single numeric character image collection, storage, recognition and display. According to the BP neural network"s principle,the recognition algorithm is divided into the work algorithm and the study algorithm. Use the software of VC++6.0, respectively design and realize the algorithms with the VC language, design system"s display interface with MFC. Finally the character recognition results display on the liquid crystal screen. The result showed that utilizes this algorithm, the recognition rate of single numeric character image is above 90%, moreover the more times of study are, the higher recognition rate is. Recognition algorithm of single numeric character based on BP neural network is widely applied in the digital instrument, the car license recognition, the satellite positioning and so on many field, and it has certain application prospect.

Key words: single alphanumeric character; recognition algorithm; BP network

1 引言

数字图像处理技术发展到今天,数字图像识别技术已经获得长足的进步。在工程、工业以及科学研究中的应用有着广阔的前景。特别在化工、电力、流量统计、技术检测等行业的自动控制中数字字符显示的自动动态识别问题具有重要的研究意义,由于人眼的判别易产生视觉疲劳和失误而引起错判、误判,甚至对一些关键信息漏判造成不可挽回的损失。因此,对数字字符显示的动态计算机自动识别、自动控制有着迫切的要求和现实的意义。特别我国已成为制造业大国,故在化工、电力、流量统计、技术检测等行业实现自动控制中数字字符显示的计算机自动动态识别、自动控制在提高产品附加值和提高生产的效率、效益具有其特殊意义[1]。

2 系统设计方案

随着多媒体技术的不断发展,数字图像处理技术被广泛应用于可视电话、电视会议、监控系统等各种民用、商用及工业生产领域中。但在字符识别系统中,主要的问题就是字符识别的方法。当前的字符识别属于模式识别的范畴[2]。

模式识别研究的目的是构造自动处理某些信息的机器系统 ,以代替人完成分类和辨识的任务。一个图像识别系统可分为三个主要部分:1) 图像信息的获取;2) 信息的加工和处理抽取特征;3) 判断或分类[3]。其框图如图1所示。

在图像识别系统中常用的字符识别的方法主要有:模板匹配法,遗传算法,分形法,支持向量机法,人工神经网络法等。“人工神经网络”(ARTIFICAIL NEURAL NETWORK,简称A.N.N)是在对人脑组织结构和运行机制的认识理解基础上模拟其结构和智能行为的一种工程系统。由于人工神经网络具有与人脑的高度并行性、良好的容错性和联想记忆功能、自适应和自学习能力等特点,特别是以改进型BP网络为代表的神经网络具有良好的自学习能力、强大的分类能力、容错能力和鲁棒性,可以实现输入到输出的非线性映射。因此采用三层BP神经网络法来进行数字字符的识别。

3 三层BP神经网络原理

3.1 神经网络简介

神经网络[4]是由大量处理单元(神经元、处理元件、电子元件、光电元件等)广泛互连而成的网络。它是在现代神经科学研究成果的基础上提出的,反映了人脑功能的基本特征。但它并不是人脑的真实描写,而只是它的某种抽象、简化与模拟。网络的信息处理由神经元之间的相互作用来实现;知识与信息的存储表现为网络元件互连间分布式的物理联系;网络的学习和识别决定于各神经元连接权系的动态演化过程。它实际上是一个超大规模非线性连续时间自适应时间自适应信息处理系统。虽然单个神经元的组成和功能极其有限,但大量神经元构成的网络系统。所能实现的功能,却是极其丰富多彩的。

神经网络的工作方式,由两个阶段组成:

1) 学习期:神经元之间的连接权值可由学习规则进行修改,以使目标函数达到最小。

2) 工作期:连接权值不变,由网络的输入得到相应的输出。

3.2 三层BP网络算法

3.2.1 三层BP网络工作算法

本系统采用图2所示的具有一个隐层的三层BP网络来实现字符的识别[5]。

图2中,输入层、隐含层和输出层的单元数分别是N、L和M。输入为x1,x2,…,xN;中间层输出为h1,h2,…hL;网络实际输出为y1,y2,…,yM;d1,d2,…dM表示学习样本期望输出。输入单元i到隐含单元j的权值vij,隐含单元j到输出单元k的权值为wij。用θk和ψj来分别表示输出单元和隐含单元的阈值。于是,隐含层各单元的输出为:

输出层各单元的输出为:

其中,隐含层激活函数为Sigmoid 函数,输出层激活函数为线性函数,即f2(x)=x。

误差函数:

(3)

3.2.2 BP算法学习算法:

1) 将权值、阈值初始化为0~1之间的随机值;

2) 从样本中取出x1,x2,…,xN输入网络,指定期望输出d1,d2,…dM;

3) 计算中间层输出h1,h2,…hL和网络实际输出y1,y2,…,yM;

4) 计算实际输出与期望输出的误差:

计算中间层误差:

5) 计算全局自适应学习因子α:

学习因子修正公式为:

当E(n+1)

6) 调整权值:

其中η为动量系数,取0.9,Δωjk(n-1)和Δvij(n-1)为上次学习时计算出的调整量。

7) 返回第二步,用所有样本反复学习网络,多次迭代,直到权值达到稳定。实际学习时,再定义收敛规则:

其中,P为学习样本数,ε为给定误差范围,这里取为0.01,当满足E<ε时,结束学习。固定已完成学习任务的神经网络权值,该网络便构成了一个模式分类器,当学习样本组以外的输入模式输入网络时,根据实际进行模式识别。

4 BP神经网络设计

4.1 网络参数选择

输入层神经元个数

输入层神经元个数为字符归一化后的维数,这里为8×6,即输入层有48节点。

输出层神经元个数

待识别的数字为0~9,即十个数字,所以这里我们采用十个输出神经元,用1000000000来表示0,0100000000来表示1,以此类推。

隐层个数

Funahashi、Cybenko、Hornik[6]等分别用不同的方法证明了一个共同的结论,即仅含一个隐含层的前馈网络能以任意精度逼近定义在Rn中的一个集上的任意非线性函数,实现任意分类问题。这里我们采用一个三层网络。

隐含层神经元个数

隐含层节点数的选择比较复杂,隐含层神经元个数的过少或过多将导致神经网络的学习能力不够或归纳能力很差。隐含层神经元数目较少时,网络每次学习时间相对较短,但有可能因为映射容量不够,使整个网络权值矩阵无法包含全部学习样本中的信息,导致权值疲于来回调整而无法达到全局最小。隐含层神经元数目较大时,学习能力得到增强,但网络每次所需的学习时间相对较长,网络需要的存储容量也随之变大。另外,网络对未知输入的归纳能力变差。因此BP网络应有一个最佳隐含层节点数。

4.2 网络结构

输入量的提取与表示:由摄像头获取一幅像素为150x150的单数字图像,并在作为网络输入前压缩为10x10的特征提取二值图像。

输出量的表示:输出层可以表示0到9的数值,用“n中取1”表示法,可把输出0-9分别表示为000000001、0000000010、0000000100、0000001000、0000010000、0000100000、0001000000、0010000000、0100000000、100000000.其中n=10,可表示为输出节点个数,由于这中表示方法的直观性和学习样本设定比较容易,因此本设计采用该方法。

输入输出层个数:本设计实现的数字识别,因此输入和输出量为数值变量,并且在输出层设置10个输出神经元,每个神经元便是一个数值。网络在输入层获取10×10的二值数值图片,因此可设10个出入层神经元。

隐层个数:确定最佳隐层节点个数的一个常用方法是试凑法,先设置了5个节点,在网络测试过程中逐渐增加隐层节点数,用同一样本进行学习,从中确定在网络误差最小时对应的隐层节点数为10。

4.3 识别算法流程

识别算法采用VC++6.0软件,运用VC语言[7]设计并实现其算法,并用MFC设计了系统的显示界面,其具体的实现流程图如图3。

开始,初始化,设置变量和参数,其中包括学习样本,权值矩阵,学习速率,给各个权值矩阵一个较小的随机非零向量。然后输入随机样本,对输入样本,前向计算BP网络每层神经元的输入信号和输出信号。由实际输出和期望输出求得误差。判断是否满足误差范围,若满足则判断是否学习完所有的样本,是则结束,否则断续训练下一个样本;不满足判断是否已经到了最大迭代次数,若到,判断是否学习完所有的样本,是则结束,否则断续训练下一个样本;没到则反向计算每层神经元的局部梯度。然后根据局部梯度修正各个矩阵的权值。学习完后输入识别数字,根据误差函数的值来判断该图像是否匹配参考图像,从中判断该图像是否匹配,从中得出该图像代表的数字值[8]。其软件流程图如图3。

5 识别结果及分析

测试数据选取了30幅图片,根据学习次数的不同,因为学习次数的不同,识别的结果接不同,最后的识别率见表1。试验结果显示学习次数越多,识别率越高。图4是其部分识别的图像以及识别的结果。

6 总结

本文提出一个BP神经网络的单数字字符识别算法的总体实现方案,并用VC++6.0设计并实现了其算法,并最后给出了算法识别的结果图。测试实验表明:经过5次训练后,对单数字字符的的识别率能达到97%,所以经过多次训练,该系统能够实现对单数字字符的正确识别,说明在实际应用中它具有可行性,可以用在现实的很多方面,如应用到数字仪表、车牌识别、卫星定位等很多领域,同时具有一定的经济价值。

参考文献:

[1] 何斌.Visual C++数字图像处理[M].北京:人民邮电出版社,2003:386-393.

[2] 焦李成.神经网络系统理论[M].西安:西安电子科技大学出版社,1996:3-20.

[3] 谭浩强.C程序设计[M].北京:清华大学出版社,2005.

[4] 高隽.人工神经网络原理及仿真实例[M].北京.机械工业出版社,2003.

[5] 申小阳.数字仪表动态显示字符的计算机自动识别[D].浙江工业大学硕士论文,2004.

[6] Homik K. Approximation Capabilities of Multilayer Feedforward Network[J].Neural Networks,1997,4(2):251-257.

[7] 刘春雨,李俊.一种字符识别算法在自动识别系统中的应用[J].微电子学与计算机,2008(3):71-73.

[8] 贾少锐,李丽宏,安庆宾.BP神经网络算法在字符识别中的应用[J].科技情报开发与经济,2007(2):167-169.

推荐访问:神经网络 算法 字符 识别 数字