# 基于BP神经网络的字符识别研究

OCR统一识别，每月200次

原文作者：Andrew Kirillov. http://www.codeproject.com/KB/cs/neural_network_ocr.aspx

0 引言

1 流行的方法

5×6点阵方式表示的26个大写英文字母，如图所示：

float[] input_letterK = new float[] {

0.5f, -0.5f, -0.5f, 0.5f, 0.5f,

0.5f, -0.5f, 0.5f, -0.5f, -0.5f,

0.5f, 0.5f, -0.5f, -0.5f, -0.5f,

0.5f, -0.5f, 0.5f, -0.5f, -0.5f,

0.5f, -0.5f, -0.5f, 0.5f, -0.5f,

0.5f, -0.5f, -0.5f, -0.5f, 0.5f};

float[] output_letterK = new float[] {

-0.5f, -0.5f, -0.5f, -0.5f, -0.5f,

-0.5f, -0.5f, -0.5f, -0.5f, -0.5f,

0.5f, -0.5f, -0.5f, -0.5f, -0.5f,

-0.5f, -0.5f, -0.5f, -0.5f, -0.5f,

-0.5f, -0.5f, -0.5f, -0.5f, -0.5f,

-0.5f};

// pattern size

int patternSize = 30;

// patterns count

int patterns = 26;

// learning input vectors

float[][] input = new float[26][]

{

...

new float [] {

0.5f, -0.5f, -0.5f, 0.5f, 0.5f,

0.5f, -0.5f, 0.5f, -0.5f, -0.5f,

0.5f, 0.5f, -0.5f, -0.5f, -0.5f,

0.5f, -0.5f, 0.5f, -0.5f, -0.5f,

0.5f, -0.5f, -0.5f, 0.5f, -0.5f,

0.5f, -0.5f, -0.5f, -0.5f, 0.5f}, // Letter K

...

};

// learning ouput vectors

float[][] output = new float[26][]

{

...

new float [] {

-0.5f, -0.5f, -0.5f, -0.5f, -0.5f,

-0.5f, -0.5f, -0.5f, -0.5f, -0.5f,

0.5f, -0.5f, -0.5f, -0.5f, -0.5f,

-0.5f, -0.5f, -0.5f, -0.5f, -0.5f,

-0.5f, -0.5f, -0.5f, -0.5f, -0.5f,

-0.5f},                // Letter K

...

};

// create neural network

AForge.NeuralNet.Network neuralNet =

new AForge.NeuralNet.Network(new BipolarSigmoidFunction(2.0f),

patternSize, patterns);

// randomize network`s weights

neuralNet.Randomize();

// create network teacher

AForge.NeuralNet.Learning.BackPropagationLearning teacher = new

AForge.NeuralNet.Learning.BackPropagationLearning(neuralNet);

teacher.LearningLimit    = 0.1f;

teacher.LearningRate    = 0.5f;

// teach the network

int i = 0;

do

{

teacher.LearnEpoch(input, output);

i++;

}

while (!teacher.IsConverged);

System.Diagnostics.Debug.WriteLine("total learning epoch:" + i);

// "K" letter, but a little bit noised

float[] pattern = new float [] {

0.5f, -0.5f, -0.5f, 0.5f, 0.5f,

0.5f, -0.5f, 0.5f, -0.5f, 0.5f,

0.5f, 0.5f, -0.5f, -0.5f, -0.5f,

0.5f, -0.5f, 0.5f, -0.5f, -0.5f,

0.5f, -0.5f, -0.5f, 0.5f, -0.5f,

0.3f, -0.5f, -0.5f, 0.5f, 0.5f};

// get network's output

float[] output = neuralNet.Compute(pattern);

int i, n, maxIndex = 0;

// find the maximum from output

float max = output[0];

for (i = 1, n = output.Length; i < n; i++)

{

if (output[i] > max)

{

max = output1[i];

maxIndex = i;

}

}

System.Diagnostics.Debug.WriteLine("network thinks it is - " + (char)((int) 'A' + maxIndex));

2 另一种方法

usability = OuterEntropy * ( 1 - AverageInnerEntropy)

3 测试应用程序

(原来的程序是识别26个英文大写字母，这里我改成识别中文字符“人工智能”四个字，并且换成幼圆字体来训练网络，幼圆字体和鼠标画汉字的图像差不多，经测试识别效果理想。)

AForge.NET （www.aforgenet.com）是一个用C#语言写的开源软件，它可用在机器视觉和人工智能领域：图像处理，神经网络，遗传算法，机器学习，机器人等等，作者是英国的一个软件工程师Andrew Kirillov.

1）我们需要产生的初始接受器集。在应用程序启动它已经产生的，如果不打算改变最初的接受器数量或过滤数量，可以跳过这一步。

2）选择字体用来训练网络。第一次定义为Arial字体。

3）生成数据。在这一步的产生初始训练数据。

4）过滤数据。在此步骤中初始接受器集也就是训练数据将被过滤。

5）创建一个神经网络。

6）训练神经网络。

7）让我们来看看misclassified值.它应该是“0 / 26”，意思是，经过训练的网络可以成功地识别所有图案（即26个字母）。

8）我们可以使用“Draw”和“Recognize”按钮来确定以上的识别过程。

4 结论

[1] Andrew Kirillov. http://www.codeproject.com/KB/cs/neural_network_ocr.aspx

[2] Andrew Kirillov. http://www.aforgenet.com/

[3] 蒋宗礼. 人工神经网络导论. 北京:高等教育出版社,2001.

|
10月前
|

FOA-BP分类预测 | Matlab果蝇优化算法优化BP神经网络分类预测
FOA-BP分类预测 | Matlab果蝇优化算法优化BP神经网络分类预测
87 0
|

76 0
|

114 0
|

114 0
|

78 0
|

217 0
|

BP神经网络对指纹识别的应用（Matlab代码实现）
BP神经网络对指纹识别的应用（Matlab代码实现）
110 0
|

【BP分类】基于遗传算法优化BP神经网络的数据分类附matlab代码
【BP分类】基于遗传算法优化BP神经网络的数据分类附matlab代码
252 0
|

223 0
|

【CNN分类】基于贝叶斯优化卷积神经网络BO-CNN实现故障诊断附matlab代码
【CNN分类】基于贝叶斯优化卷积神经网络BO-CNN实现故障诊断附matlab代码
254 0