# 图像预处理

## 灰度化和二值化

def convert_to_bw(im):
im = im.convert("L")
im.save("sample_L.bmp")
im = im.point(lambda x: WHITE if x > 196 else BLACK)
im = im.convert('1')
im.save("sample_1.bmp")
return im

## 图片的分割和规范化：

def split(im):
assert im.mode == '1'
result = []
w, h = im.size
xs = [0, 23, 57, 77, 106, 135, 159, 179, 205, 228, w]
ys = [0, 22, 60, 97, 150, h]
for i, x in enumerate(xs):
if i + 1 >= len(xs):
break
for j, y in enumerate(ys):
if j + 1 >= len(ys):
break
box = (x, y, xs[i+1], ys[j+1])
t = im.crop(box).copy()
box = box + ((i + 1) % 10, )
#			save_32_32(t, 'num_%d_%d_%d_%d_%d'%box)
result.append((normalize_32_32(t, 'num_%d_%d_%d_%d_%d'%box), (i + 1) % 10))
return result

## 产生训练数据集和测试数据集

0 0 4 4 4 2 0 0 0 0 0 0 0 0 2 4 0 0 4 4 4 2 0 0 0 0 0 0 0 0 2 4 2 2 4 4 2 1 0 0 0 0 0 0 1 2 3 4 4 4 4 4 0 0 0 0 0 0 0 0 2 4 4 4 4 4 4 4 0 0 0 0 0 0 0 0 2 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 2 4 4 4 4 4 0 0 0 0 0 0 0 0 0 0 2 4 4 4 4 4 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 0 0 0 0 0 0 0 4 4 4 4 4 4 4 4 4 2 2 2 2 2 2 2 4 4 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 0 2 4 4 4 2 2 2 2 4 3 2 2 2 2 2 0 2 4 4 4 0 0 0 0 4 2 0 0 0 0 0 0 2 4 4 4 0 0 0 0 4 2 0 0 0 0 0 0 2 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 2 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 2 4 4 4

f = open('train.data', 'wt')
print >>f, len(result), 256, 10
for input, output in result:
print >>f, input
print >>f, output

# BP神经网络

## 训练结果

connectionRate = 1
learningRate = 0.008
desiredError = 0.001
maxIterations = 10000
iterationsBetweenReports = 100
inNum= 256
hideNum = 64
outNum=10
class NeuNet(neural_net):
def __init__(self):
neural_net.__init__(self)
neural_net.create_standard_array(self,(inNum, hideNum, outNum))

def train_on_file(self,fileName):
neural_net.train_on_file(self,fileName,maxIterations,iterationsBetweenReports,desiredError)

if __name__ == "__main__":
ann = NeuNet()
ann.train_on_file("train.data")
ann.save("number_char_recognize2.net")

## 测试结果

if __name__ == "__main__":
ann = NeuNet()
ann.create_from_file("number_char_recognize.net")
for k, v in data.iteritems():
k = string_to_list(k)
v = string_to_list(v)
result = ann.run(k)
print euclidean_distance(v, result)


# 小结

## Python(TensorFlow框架)实现手写数字识别系统

• louishao
• 2017年03月08日 09:57
• 7965

## Python scikit-learn 学习笔记—手写数字识别

• leo_is_ant
• 2015年04月28日 12:14
• 7140

## Python代码实现简单的MNIST手写数字识别（适合初学者看）

Python代码KNN算法实现识别MNIST手写数字库（初学）
• zugexiaodui
• 2017年08月12日 20:51
• 2408

## Python徒手实现识别手写数字—图像识别算法(K最近邻)

• Hanpu_Liang
• 2017年10月30日 22:46
• 837

## python 实现识别手写 MNIST数字集的程序

python 实现识别手写 MNIST 数字集的程序 我们需要做的第⼀件事情是获取 MNIST 数据。如果你是⼀个 git ⽤⼾，那么你能够 通过克隆这本书的代码仓库获得数据，  实现我们的⽹络来分类...
• chen_shiqiang
• 2016年07月14日 21:53
• 13748

## Python徒手实现识别手写数字—图片的读入与处理

• Hanpu_Liang
• 2017年10月14日 23:17
• 986

## [机器学习]kNN算法python实现(实例:数字识别)

# 使用好任何机器学习算法的前提是选好Features from numpy import * import operator from os import listdir def c...
• qq_21970857
• 2015年05月09日 17:54
• 1130

## SVM手写数字的识别---python

SVM手写数字的识别---python 1、SVM手写数字识别 识别步骤： （1）样本图像的准备。 （2）图像尺寸标准化：将图像大小都标准化为8*8大小。 （3）读取未知样本图像，提...
• liyuqian199695
• 2017年01月08日 19:46
• 2488

## Python Opencv实战之数字识别之knn算法入门

• yellow_red_people
• 2017年02月26日 22:51
• 1301

## Opencv Python版学习笔记（八）字符识别-分类器（SVM，KNearest，RTrees，Boost，MLP）

OpenCV提供了几种分类器，例程里通过字符识别来进行说明的 1、支持向量机（SVM）：给定训练样本，支持向量机建立一个超平面作为决策平面，使得正例和反例之间的隔离边缘被最大化。 函数原型：训练原...
• wuhaiwei002
• 2017年04月23日 21:42
• 633

举报原因： 您举报文章：用BP人工神经网络识别手写数字——《Python也可以》之三 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)