基于Androidopencv的光栅字符识别毕业论文
2020-02-13 22:27:46
摘 要
这个时代是信息化的时代,智能手机在广泛地普及,而在中国,手机大多数都是采用的Android系统。本文通过Android和OpenCV来实现对于光学字符的识别。描述的Android设计系统通过对保存在手机SD card中的图片进行识别。通过算法实现图片的预处理、特征提取等一系列的处理工作,最后将图片中的字符以文本输出。
论文主要设计内容如下:图片的预处理工作,主要包括灰度化、去噪、二值化、倾斜矫正、字符切割、归一化等一系列操作;特征的确定和特征提取;运用人工神经网络(ANN)来进行字符的识别,重要的一点是神经网络的训练。
通过对相关知识,如Android、OpenCV、人工神经网络等知识的查询以及学习,在软件Eclipse搭建的Android环境下利用OpenCV库初步实现了对字符的识别,能将图片中含有的数字显示输出,达到了预期的效果。本设计是运用了人工神经网络来实现对字符的识别。
关键词:Android;OpenCV;ANN;光学字符识别;Eclipse
Abstract
This era is an era of informationization,and and smartphones are widely used. In China, most mobile phones are Android systems. In this paper, optical character recognition is realized by Android and OpenCV. The described Android design system identifies images that are saved in the phone#39;s SD card. The algorithm implements a series of processing operations such as image preprocessing and feature extraction, and finally outputs the characters in the image as text.
The main design contents of the thesis are as follows:Image preprocessing work mainly includes a series of operations such as grayscale, denoising, binarization, tilt correction, character cutting, and normalization;Feature determination and feature extraction;Using artificial neural networks (ANN) for character recognition, an important point is the training of neural networks.
Through the query and learning of relevant knowledge, such as Android, OpenCV, artificial neural network, etc., the OpenCV library is used to realize the recognition of characters in the Android environment built by the software Eclipse, and the digital display output in the picture can achieve the expected effect. This design uses an artificial neural network to achieve the recognition of characters.
Key Words:Android; OpenCV; ANN; optical character recognition; Eclipse
目 录
摘 要 I
第1章 绪论 1
1.1 选题目的及意义 1
1.2 国内外的研究现状分析 1
1.3研究基本内容、目标及论文结构 2
第2章 相关知识概述 4
2.1 Android系统 4
2.2 JNI和Android NDK 5
2.2.1 JNI 5
2.2.2 Android NDK 6
2.3人工神经网络(ANN) 6
2.4 Eclipse 8
2.5本章小结 8
第3章 光学字符识别预处理算法研究 10
3.1 预处理算法总概 10
3.2 灰度化 10
3.2.1图像通道与灰度(图像) 10
3.3.2相关算法 10
3.2.3设计实现 11
3.3去噪 12
3.3.1图像噪声 12
3.3.2去噪方式 13
3.3.3设计实现 13
3.4 二值化 14
3.4.1二值化 14
3.4.2相关算法 14
3.4.3设计实现 15
3.5倾斜矫正 15
3.5.1倾斜矫正 15
3.5.2相关算法 15
3.5.3设计实现 16
3.6字符切割 16
3.6.1字符切割 16
3.6.2相关算法 16
3.6.3设计实现 16
3.7归一化 17
3.7.1归一化 17
3.7.2设计实现 17
3.8本章小结 17
第4章 设计系统实现 18
4.1设计系统环境搭建 18
4.1.2基于Eclipse平台Android系统的搭建 18
4.1.2 OpenCV载入Eclipse平台 19
4.2人工神经网络系统(ANN)训练 20
4.3设计实验结果 20
4.4本章小结 21
第5章 总结 22
致 谢 23
参考文献 24
第1章 绪论
1.1 选题目的及意义
现如今,随着计算机网络技术在世界的迅猛发展,信息电子化已经成为了这个时代的必然趋势。文字作为信息中最重要的、最集中的载体之一,其电子化程度越高基本预示着信息化的程度越高。而光学字符识别(Optical Character Recognition)技术则在文字电子化中发挥着不可替代的作用,它大大便利了传统纸质资料信息的录入。OCR技术是指借用电子设备去检测纸上或者图片中的字符,通过模板匹配和结构分析等手段确定其形状,最后依靠字符识别方法将形状翻译成计算机文字再输出的过程;对OCR研究初始是对印刷体字符进行操作处理,但科技的迅猛发展使得对手写字符的识别也成为可能。因此,相较于传统的手工录入,OCR技术大大提高了人们对文本资料存储、加工的效率,对信息的采集影响巨大。
现今,随着科技的进步,智能手机走进了人的生活,在中国,大多数智能手机采用的系统是Android系统。基于Android的移动端APP开发是互联网创新创业的一个热点,广泛应用于众多场合,例如图书馆[1]、园林[2]、商用场合[3]。在日常生活中,都不可避免要与大量的文字资料打交道,例如学生做题查找解析[4],而本项毕业设计着眼于Android平台上图像处理关键技术的研究与实现,利用Android系统与OpenCV软件包,调用相关例程,实现手机移动端上的光学字符识别。这无疑为人们日常的文字材料处理工作带来极大的便利,具有重要的使用价值。
1.2 国内外的研究现状分析
从OCR开始进入科学家的视野直到现在,国内、外学者对其进行了长期的研究,各种实现方法在科学家严谨的思考中诞生并应用到实际中。
1929年,即20世纪20年代末,德国科学家Tausheck首次将字符模板匹配运用到字符识别的过程中,并因此获得了一项OCR相关专利,从此OCR这个技术开始走进人们的视野。1933年,美国科学家Handel提出了借助OCR技术对文本资料进行提取的设想[5]。
1966年,IBM的Casey和Nagy首次尝试汉字识别,在他们发表的第一篇有关印刷体汉字识别的论文中利用简单的模板匹配法识别了1000个印刷体汉字。
在1969年,Hoshino和Miyamoto提出了一篇关于特征提取的论文,该论文基于流跟踪分析和系统几何特征提取[5]。
Pavlidis等人于1974年提出了一种利用多边形逼近字符边界,然后根据凹度进行分解的句法模式识别特征生成技术。
1970年底,Agui和Nagahashiu提出了一种手写汉字识别的描述方法。在他们的技术中,汉字由部分模式表示,使用三个关系,即连接、交叉和近邻;部分模式的分类就是借由这三个关系进行分类。1977年,可以识别2000个单体印刷汉字的识别系统由东芝综合研究员研制成功;80年代初,日本武藏野电气研究所更进一步,研制成功了可以识别2300个印刷体汉字识别系统,这在当时代表着汉字识别的最高水平。1980年,Arakawa提出了一种在线手写汉字识别系统。以笔尖运动轨迹的傅立叶系数作为特征向量。Leung等人提出了一种改进的松弛技术,将汉字知识融入到训练系统中,以减少计算量。同时,也有学者开始讲人工神经网络[6]、支持向量机[7]等技术运用到OCR当中去,取得了一系列的卓越成果,强有力地推动了OCR技术的发展。现如今,OCR技术的识别字符范围涵盖数字[8]、英文、中文等等,在金融、政府、教育、运输和物流、法律、医疗等领域都有建树,大大便利了人们在生活中信息的获取。
现今,国外顶级光学字符识别公司有MicroBlink、ABBYY Europe、Waygo、Ocrolus等。
与国外相比,我国在OCR技术方面的研究工作起步较晚,相关方面的研究起始于20世纪70年代;现今在OCR方面较为突出的有汉王、百度、阿里等。在我国OCR技术的研究之路上,国家的“863计划”所起到的作用无疑是巨大的作用,所有OCR技术的相关研究都或多或少受到该计划的支持。由着该计划牵头,许多实验室开始了OCR的研究,都取得了可观的成就。国内第一套中文OCR软件为清华文通TH-OCR1.0版,于1989年从清华大学实验室走向了市场。在1991 全国人工智能和智能计算机学术会议上,清华大学丁晓青教授提出的“模式识别统一熵理论”对模式识别系统的设计有重要的指导作用,受到国内外学者的重视。而到如今,在国内OCR领域涌现了许多知名厂商顶尖开发者,拥有100多项技术专利[9],在图像预处理、倾斜矫正和识别等方面建树颇丰,这无疑不昭示着OCR在中国的迅猛发展。同时,一些基于OCR技术的APP也因为智能手机的普及而得到广泛使用,拉近了该技术与人们的生活。
1.3研究基本内容、目标及论文结构
本次设计主要目的是利用OpenCV实现图像的处理:利用Android系统与OpenCV软件包,调用相关函数,实现手机移动端上的光栅字符识别。研究的基本内容涵盖了对Android系统、OpenCV软件包的认识;人工神经网络的学习了解和运用、相关图像处理手段的认识分析以及如何运用软件Eclipse实现应用软件。针对所要研究的内容,论文结构做如下安排:
第1章,绪论。陈述选题的背景和意义,讨论字符识别技术的国内外研究现状,同时确定本文设计的设计框架以及本文研究的基本内容。
第2章,相关知识概述。对Android系统架构进行了相关描述,同时也介绍设计过程中需要运用到的JNI、AndroidNDK、ANN的相关知识。最后对设计使用到的软件做了个简要介绍。
第3章,光栅字符预处理算法研究。图像预处理(灰度化、去噪、二值化等过程)相关算法的介绍以及结合OpenCV软件包确定每个预处理操作采用何种方式进行实现。
第4章,设计系统实现。主要讲解了基于Eclipse平台上Android系统环境搭建和OpenCV库载入Eclipse项目中;同时阐述了人工神经网络的训练以及最后识别效果展示。
第5章,总结与展望。总结整个研究过程同时也对存在的缺陷进行展望。
第2章 相关知识概述
2.1 Android系统
Android系统结构图2.1所示,由图可知,Android系统大致可以分成四层结构、五个区域。从上到下依次为应用层(Applications)、应用框架层(Application Framework)、系统运行层(Android Runtime)、Linux内核层。
- 应用层,顾名思义,即手机上各种应用程序安装的那部分结构,是手机对外最重要的部分。能完成软件的安装、卸载、替换等操作,完全开放,这也让应用程序更加灵活和个性化。
图 2.1 Android 系统架构图
- 应用框架层,依图可以看到该层包含活动管理、窗口管理、内容提供、查看系统等内容,可知这一层主要是提供了构建应用时需要用到的API,不管是Android自带的应用系统,还是开发者构建自己的应用程序,都可以借助这些API实现。
- 系统运行层,系统运行层有个库--包含九个子系统和部分标准库函数,当然,除了Linux标准库,Android也开发了自己的核心库核Dalvik虚拟机。此层为Android系统提供了主要的特性支持;当然,最主要的还是前面所提到的Dalvik虚拟机,它是专门针对Android程序设计的虚拟机,是专门为移动设备设计的,它能应对手机内存、CPU性能有限的情况。
- Linux内核层,Android系统是依赖于Linux2.6内核的;此层为Android设备的各种硬件提供了各种驱动,如图2.1中所展示的显示驱动、相机驱动、蓝牙驱动、USB驱动等,保证了系统与外围设备的通信。
2.2 JNI和Android NDK
2.2.1 JNI
Java本机接口(JNI)是一个外部函数接口编程框架,它允许Java虚拟机(JVM)中运行的Java代码来调用本地应用程序和用C/C 和汇编等语言编写的库。Java技术最大的优点是平台独立,JVM中封装了各种操作系统,其执行效率比较低下,JNI可以弥补这个缺点, 采用其他语言编程提高执行效率,在通过JNI使得语言之间相互通信,使得不同类型的程序语言发挥各自长处,取长补短。
图2.2 JNI作用原理
JNI是本地语言编程接口,通过JNI编程,可以使用本地方法来创建、访问、更新Java对象,调用Java方法,加载并获得类信息等。当应用程序需要依赖于特定的平台,独立的Java类库代码不能满足需求,或者是有一个自己用其他程序语言写的一个库,可以通过JNI来访问Java代码,这且情况下对JNI有所需求。值得一说的是,毋庸置疑,当用Java代码调用其他语言代码是,肯定是要涉及到参数的传递,就拿Java与C\C 代码之间的交互来说,他们之间属于不同的编程语言,在数据类型是肯定会用差异,所以会有对应的类型使得程序能正常的运行。
2.2.2 Android NDK
NDK(Native Development Kit),即本地开发工具,是允许开发者使用C/C 等语言,以原生代码实现应用的一系列工具。众所周知,Android开发语言是Java,但由前文可知Android是基于Linux的,而Linux核心库很多都是采用C\C 编译的。NDK的作用就发挥出来了,它能帮助开发者便捷快速地开发C\C 的动态库,并能自动生成apk。NDK采用的是交叉编译,提供相应的mk文件来隔离CPU等开发环境方面的差异,开发人员创建动态库只需简单修改mk文件,十分便利。采用NDK,一是代码的保护,相比apk的java层代码,而C\C 库反编译较大;二是调用现存的开源库十分便利,例如本次设计使用的OpenCV;三是代码的执行效率能有所提高,即使用C开发高性能的应用逻辑,来提高程序执行效率;四是移植便利,大多数嵌入式平台都可以调用C\C 写的库。
2.3人工神经网络(ANN)
人工神经网络(Artificial Neural Network,ANN), 介绍人工神经网络之前,现简单介绍一下生物神经元。一个神经元通常由细胞体和突起(包括树突与轴突)组成。如图2.3为生物神经元的基本结构组成。树突用来接受传入信息;而轴突尾端的轴突末梢用来实现神经元之间的信息传递,而这个传递信号的过程,在生物学上有个专门的称呼:“突触”。
图2.3 神经元
人工神经网络是被称为人工神经元的连接单元或节点的集合,其松散地模拟生物大脑中的神经元。每个连接,如生物大脑中的突触,可以让信号在两个人工神经元中进行传递。接收信号的人工神经元处理它,并发信号通知与之相连的其他人工神经元。在常见的ANN实现中,人工神经元之间的连接处的信号是实数,并且每个人工神经元的输出是通过其输入之和再经过特殊非线性函数计算得出。权值增加或减少神经元之间连接处信号的强度。人工神经元信息传递具有阈值,仅在聚合信号超过该阈值时人工神经元才会发送信号。通常来说,人工神经元聚集成层。不同的层针对输入执行不同类型的转换。信号可能在多次遍历各层之后从第一层(输入层)传播到最后一层(输出层)。