当前位置:文档之家› 手写数字识别实践指导手册

手写数字识别实践指导手册

手写数字系统实践指导手册
1 问题描述
设计一个简单的手写数字识别系统,能够识别手写输入的数字1-9并且能够识别选中的文本文件中的数字,应具有简单方便的操作界面,输入输出等。

1.1功能需求分析
通过分析,以及从用户的角度考虑,系统应该具有以下功能:
(1)数字的手写输入。

作为一个手写数字识别系统,首先应该能够让用户过绘制窗口进行数字绘制,系统得到用户的手写输入进行处理。

(2)直接选择文件。

用户还可以选择系统中的文本文件进行处理。

(3)数据预处理。

包括计算数据大小、二值化、格式化处理等。

(4)数字提取。

将经过二值化后的图像中的个数字区域进行提取,只有能够将数字进行准确的提取,才能将其一一识别。

(5)基准库的选择与建立。

选择一个可供系统训练和测试的样本库非常重要,本系统的训练集和测试集选择的是《机器学习实战》中所给的数据。

(6)识别数字。

经过训练集进行训练后,使用knn算法对需要识别的数字识别。

2 数据集获取
●任务要求:
从网上爬取或者下载适合进行手写数字识别系统的训练集和测试集
●实践指导:
方式一:自己从网上找适合的数据下载
方式二:推荐数据集:“手写数字数据集的光学识别”一文中的数据集合,该文登载与2010年10月3日的UCI机器学习资料库中/ml
3 功能设计与实现
3.1手写数字识别系统结构图:
图一:系统结构图
3.2识别用户选择手选文件功能设计与实现
●任务要求:
用户可以自己从电脑中选择文本文件进行识别。

●实践指导:
KNN分类器的构造思路及原理如下:
1)选择训练集和测试集。

系统所采用的数据集选用的是“手写数字数据集的光学识别”一文中的数据集合。

0-9每个数字大约有200个训练数据20个测试数据。

数字的文本格式如图所示。

文本格式存储的数字的文件命名也很有特点,格式为:数字的值_该数字的样本序号,如图所示。

2)格式化处理数据。

将训练集中32*32的二进制图像矩阵转换为1*1024的向量。

用于knn距离的计算
3)将训练集中所有的文件内容存在列表中,创建一个m*1024的训练矩阵,矩阵的每行存储一个图像。

4)将需要进行预测的测试集的图像矩阵转换为1*1024的向量。

5)编写KNN算法对训练集进行训练,然后对测试集进行预测。

如果使用python的话,可以调用sklearn.neighbors中的KNeighborsClassifier函数对
测试集进行预测。

5)真实值与预测值进行比较。

数据中的文件按照规则命名,我们可以从文件名中解析出分类数字,如文件9_1.txt分类时9,他是数字9的第一个实例。

3.3识别用户手写输入功能设计与实现
●任务要求:
用户可以在手写识别系统的界面上用鼠标进行手写输入,然后系统自动识别出用户的输入。

●实践指导:
识别用户手写输入的思路和原理如下:
(1)简单说就是把数字划分成很多很多的小块,如图二所示:每个数字被划分成了4*5=20个小块。

分好了小块以后,其实我们要知道每个小块是由很多个像点素构成的。

比如数字8,是由5行4列共计:5*4=20个小块构成。

(2)数一下每个小块内,有多少个黑色的点。

比如第一行:
第2个小块中,共有28个点,记为28.
第3个小块中,共有10个点,记为10.
第4个小B中,共有0个点,记为0.
以此类推,可以计算出每一行的每一个小块数字是多少。

(3)为了方便,我们把得到的特征,排成一排(数组)就好了。

(4)照着葫芦画瓢,每个数字的特征其实都是一堆数字构成的。

这个数字类似于我们的身份证号码,一般来说,是独一无二的。

(5)识别原理:就是比较要识别的数字特征和步骤4中的哪个数字的特征最接近。

这里为了方便,假设要识别数字“8”,然后看看怎么从一堆数字里面选出来他
到底应该是几。

具体方法时计算其欧式距离,距离越小代表其相似性越大。

4 系统评估
(1) 比较测试集中各个样本的分类结果和真实类别,统计下表中a,b,c,d
(2) 根据下列公式计算查准率、查全率、F1值、正确率
查准率:
查全率:
F1值:
正确率:
如不能完全实现查准率、查全率、F1值、正确率,至少计算下准确率。

5 简单的系统界面
设计良好的图形用户界面来展示系统功能。

输入:用户选择的文本文件或者鼠标的手写输入 输出:识别后的数字结果
%100⨯+=
B A A
precision %100⨯+=
C A A
recall %10021⨯+=
R P PR
F %
100⨯++++=
D C B A D
A Accurarcy。

相关主题