您的当前位置:首页正文

人工智能在手写字符识别领域的应用

来源:个人技术集锦
人工智能在手写字符识别领域的应用

作者:谭仁杰

来源:《中国新通信》 2018年第20期

谭仁杰 大连市第三十六中学

【摘要】 OCR 归属于模式识别。根据字体分类,可分为两类:打印识别和手写识别。手写识别可分为限制手写和无限制识别,根据识别模式可分为联机识别和脱机识别。 而目前较为棘手的问题便是对于手写字符的识别。 迄今为止, 汉字识别研究取得了极大的进步,但距实际应用还有着不小的差距。 在手写数字识别方面, 通过研究人员的多年研究的积累沉淀, 手写字符识别已被推广至现实应用当中,为手写字符输入开辟了一条“高速路”。

【关键词】 人工智能 计算机视觉 手写字符识别

引言:现阶段,人工智能技术成为了社会热点话题,在人们看来,人工智能技术科技不断发展的高级产物,远离现实生活。实际上人工智能早已渗透到我们日常生活中的方方面面,例如无人驾驶公交车,智能机器人,乃至我们手中的苹果手机中的 siri 等。而最先走进我们日常生活的,也是技术相对较成熟的便是手写字符识别。手写识别是指将汉字编码过程中的信息写入手写设备时跟踪信息,实际上是将手写体轨迹坐标与汉字编码一一映射过程中的人机交互是最自然、最简便的手段之一。随着数据库的不断更新,手写识别的准确率也逐步上升,日渐成熟。但是,在实际生活当中,无论是在线识别,抑或是离线识别,手写字符都具有字体多样,不标准,不规则的特点。这便导致了手写字符识别准确率不及预期,处理速度变慢。而人工智能的介入,不仅能够大幅增高系统容错率、提升准确率,同时还节省了大量人力与时间,提升工作效率,从而增加利益。

一、对于人工智能在手写字符识别领域应用的研究概述

1.1 本文主要工作

1)通过学习以 python 为基本算法的人工智能来对手写字符识别进行推广应用。

2)研究多层感知机的构造以及原理学习如何运用人工智能与多层感知机对手写体进行在线识别和脱机识别。

1.2 创新点

一般情况下字符识别传统方法有以下几种

1)模板匹配。模板匹配并不需要特征提取过程。字符的图象直接作为特征,与字典中的模板相比,相似度最高的模板类即为识别结果。这种方法简单易行,可以并行处理;但是一个模板只能识别同样大小、同种字体的字符,对于倾斜、笔划变粗变细均无良好的适应能力。

2)利用变换特征的方法。对字符图象进行二进制变换( 如 Walsh, Hardama 变换 ) 或更复杂的变换 ( 如 Karhunen-Loeve, Fourier,Cosine,Slant 变换等 ),变换后的特征的维数大大降低。但是这些变换不是旋转不变的,因此对于倾斜变形的字符的识别会有较大的偏差。二进制变换的计算虽然简单,但变换后的特征没有明显的物理意义。K-L 变换虽然从最小均方误差角度来说是最佳的,但是运算量太大,难以实用。总之,变换特征的运算复杂度较高。

3)投影直方图法。利用字符图象在水平及垂直方向的投影作为特征。该方法对倾斜旋转非常敏感,细分能力差。

针对传统方法的种种缺点, 人工智能则表现的更为智能。人工智能模拟的是人类的学习方式,通过学习相关的案例图片来得到得到关于不同种类手写图片的知识,然后记录下不同字符的特征,从而省去了人工标注的麻烦,大大节省了精力和时间。而且,使用人工智能可以实现端到端的训练,我们仅仅需要设置好数据集,人工智能便可以自动学习,在经过一定轮数的迭代学习以后,就可以学到很不错的特征。

二、研究方法

2.1 人工神经网络原理

人工神经网络源于对人脑的模拟,神经网络中最基本的单位是神经元也就是其中的每个处理器,又称之为节点。一个前馈神经网络可以包含三种节点:

1)输入节点,从外部世界向隐藏节点提供信息,不进行任何计算。

2)隐藏节点,与外部世界没有直接联系,这些节点惊醒计算,并将信息从输入节点传递到输出节点。

3)输出节点,负责计算,并向外部世界传递信息一个个的神经元便组成了神经网络。 感知器则是最基本的连接各神经元的结构

多层感知器至少有一个隐藏节点,是多层前馈网络的单向传播模型,具有高的非线性映射能力,也就是说他不仅能学习线性函数,也可以学习非线性函数。

而实验中我们采用的则是深度学习的主流框架之一Mxnet

2.2 MXNET 简介

Mxnet 是一种深度学习库,有高级别的深度学习模型,并且可以在任何硬件上运行。提供了对 python, R、Julia、C++、Scala、Matlab ,和 Javascript 的接口。其主要由四大部分组成,分别是 Ndarray, Symbol, Module, Lterators.

1)ndarray。NDArray 是一组同类型数据的集合,是所有的数学计算中的关键数据结构。每个 ndarray 代表一个多维的、固定大小的均匀阵列。

2)Symbol。MXNet 提供了符号接口,用于符号编程的交互。它不同于单步解释命令编程,我们首先要定义一个图。而我们要搭建的学习框架便是由这一个个计算图构成的。后来, 这个图是编译生成一个函数, 可以绑定到ndarray和运行。

3)Module。训练神经网络涉及不少的步骤。在训练过程中,我们需要进行大量冗余的步骤,,这无疑会给工作人员增添大量不必要的麻烦,甚至导致错误的产生。幸运的是,MXNet 的模块封装(简称 MOD)模块化的通用代码的培训

和推理。模块提供用于执行预定义网络的高级和中间接口。我们可以互换使用两个接口。

4) Iterators。MXNet 中的数据迭代器类似于 Python 迭代器对象。在 Python 中,该功能允许为 ITER 的未来得到所有的参数()由一个对象如 Python 列表。迭代器提供了各种类型的迭代器遍历集合的抽象接口,而不需要提供有关基础数据源的详细信息。

三、实验架构

3.1 实验数据

在这里我们需要引进数据集这一概念,数据集,又称为资料集、数据集合或资料集合,是一种由数据所组成的集合。通常表格为主要形式。数据集中每条信息通常会带有多位代码表示的编号,每个编号代表不同的类别,从而使数据集中数据整齐有序。现阶段若数据集中数据量足够大,足够全面实验中我们使用的是 MNIST 数据集,来自美国国家标准与技术研究所,由 250 个不同的人的手写数字构成。其中 50%是高中学生,50% 来自人口普查局的工作人员,测试集也是同样比例的手写数字数据。通过手写字符与数据集中数据进行对比,便可以较为准确的识别出手写字符。但这样的准确率仍不足以保证使用的顺畅,准确。于是我们需要的借助多层感知机来进一步提高准确率。

3.2 实验设计

第一步设置编码方式,将实验中所需要的大量的繁杂的编码用简单易懂的代码来表示,同时保证计算机能够唯一表示他们,不会重复。从而降低操作难度。当我们想实现某个功能时,可能别人已经实现好了,所以,第二步我们引用这样的 py 文件,并获取 MNIST 数据集。接下来,我们需要设置尺寸为 5*5 的绘图面板,再将图片的 shape 由 1*28*28 改为 28*28. 之后创建一个两排、每排五张图片的画布,取第一个画布绘画,分别用手写绘出 1-10 十个数字。接下来设定批次,令其一次性送十张图片。做完以上这些准备工作后,我们开始建立计算图。建图完毕后,我们人为设定其学习次数 10 次进行迭代训练,在迭代过程中,分为前向传播与后向传播。

简单的来说就是程序正向运行得出结果,之后在反向代入进行验证。经程序运行我们发现,每一次学习过后,电脑对图片中数字识别准确率都有明显的提高,十习过后,准确率可达到 96%。

此图 1 为深度学习之前对简单手写字符识别结果, 可见,其结果与实际有着很大差别。

此图 2 为深度学习之后对简单手写字符识别结果, 可见,其结果较深度学习前相比准确率有了极大提升。

3.3 实验分析

实验过程中,我们只设置迭代训练过程为 10 次,但准确率已达到了较高水平。实验显示,通过人工智能神经网络不断深入学习,手写字符识别的准确率与效率都得到了大幅提高,由此可见,人工智能在手写字符识别领域作用巨大。

四、展望

本实验中采用的是个 3 层的简单感知机,层数较浅,面对自然场景下的复杂图片处理能力并不足够,在深度学习领域,浅层的网络对于数据的表达能力可能并不能达到令人满意的程度, 更深的网络则可以大大提升神经网络的泛化能力,在后续的研究过程中,可以考虑通过增加更多的层数来达到对于复杂场景下文字识别的更好的效果从而更能体现出深度学习的威力。

五、结论

现如今,字符识别技术愈发成熟,但在我们的生活当中,数据的录入往往仍会耗费大量的人力,而人力录入恰恰会为我们带来大量的问题:如人力成本,时间耗费以及数据的错误录入甚至泄露等。而利用计算机手写字符识别便可以有效地避免这些问题,本文的研究便是为了提高工作效率,使数据处理更加安全高效。

因篇幅问题不能全部显示,请点此查看更多更全内容