资源描述
一种移动APP的设计与实现——调研报告
基于Android的移动手机电子词典的开发
小组成员:
前言
随着智能手机与平板的普及,各类语言学习APP成为了汉语学习者的必备工具。其卓越的便携性、快捷方便的查询功能、强大的互联网资源支撑等特点非常好地迎合当下语言学习者移动学习的需求。
一、 现有的手机词典举例
有道词典,Google翻译,必应词典,金山词霸,汉王等等。
类别
构成
特点
举例
词库开放型
一个主程序+多个独立的词典库
用户可以随意增删词库,网友可以制作共享词库。
灵格斯词典、金山词霸、有道词典
词库捆绑型
一个主程序+一个捆绑的词典库
用户无法随意增删词典库
光盘词典、手持式电子词典、电子阅读器内置词典
词库联网型
28838 70A6 炦30178 75E2 痢26883 6903 椃21078 5256 剖B28392 6EE8 滨26159 662F 是
仅一个主程序,可以联网查询实时更新的词库
需要在词典程序终端接入网络查询(更详尽的)词典信息
旧版的金山词霸和有道词典
词库在线型
建立在WEB平台上,在网上传输,供用户在线查阅
只有接入网络才能查询使用
在线词典
表1 电子词典的分类
有道词典,金山词霸等大多具有如下特点:
1) 界面整洁美观
2) 资源丰富
3) 搜索模式灵活多样
4) 照相取词
在已上市的电子词典产品中有道词典,海词词典用户数及下载量最多,功能最为全面,提供词库最为完整,界面设计清晰易用,但客户端数据包占用空间很大,且使用过程中需要传输的网络内容较多,使用网络流量较大,对手机用户的网络流量及网络传输速度要求较高。其它如21世纪英汉双解词典、深蓝词典等功能较为单一,有的不支持发音,有的没有生词本及收藏功能。因此电子词典在移动平台的开发仍然有很大用户需求及市场潜力,值得企业继续投入,而伴随着Android系统逐步占领市场份额的脚步,Android手机电子词典能为更多用户提供英语学习的帮助,创造更大的社会价值。
二、 主要技术介绍与分析
1、 Android操作系统
Android是一种以Linux为基础的开放源代码操作系统,主要使用于便携设备。它是Google推出的开源手机操作系统,由30多家科技公司和手机公司组成的“开放手机联盟”共同研发。Android是第一个完整、开放、免费的手机平台,其具有5个突出特点:
1)开放性:Google与开放手机联盟合作开发了Android,Google希望与运营商、设备制造商、开发商和其他有关方结成深层次的合作伙伴关系,希望通过建立标准化、开放式的移动电话软件平台、在移动产业内形成一个开放式的生态系统。
38492 965C 陜26606 67EE 柮30986 790A 礊38407 9607 阇s35813 8BE5 该V
2)应用程序无界限:Android上的应用程序可以通过标准API访问核心移动设备功能.通过互联网,应用程序可以声明它们的功能可供其他应用程序使用。
3)应用程序在平等的条件下创建:移动设备上的应用程序可以被替换或扩展,即使是拨号程序或主屏幕这样的核心组件。
4)应用程序可以轻松嵌入地嵌入网络:应用程序可以轻松地嵌入HTML、JavaScript和样式表,还可以通过WebView显示网络内容。
5)应用程序可以并行运行:Android是一种完整的多任务环境,应用程序可以在其中并行运行。在后台运行时,应用程序可以生成通知以引起注意。
Android的系统架构和其它操作系统一样,采用了分层的架构。从架构图看,android分为四个层,从高层到低层分别是应用程序层(Application)、应用程序框架层(Application Framework)、系统运行库层(Libraries)和Android运行环境(Android Runtime)以及Linux核心层(Linux Kernel)
(1) 应用程序层
Android最上层的应用是由Java编程语言开发的,如Android系统预置的电话、联系人、短信、邮件客户端、浏览器、同历、地图等.这些应用被编译成DEX文件后运行在各自独立的Dalvik虚拟机上,也就是下面提到的运行时(RunTime)层。
(2) 应用程序框架层
Android通过提供一个开放的开发平台,使得开发人员有能力创建一个丰富而创新的应用。开发者可以灵活地使用硬件设备,如地理定位、后台服务、通知栏提醒等,发挥硬件和平台的优势。,开发人员开发的应用可以与核心应用一样,平等地使用框架层API。应用程序框架旨在简化组件重用,在框架安全限制内,应用间可以复用组件模块。
所有的应用都是一套服务和系统组成的:
1) 一套丰富又具有可扩展性的视图,用来构建应用程序,包括列表,网格,文本框,按钮,以及嵌入式Web浏览器。
2)内容提供器(Content Providers)使得应用程序可以访问其他应用的数据(例如联系人),也可以将自己的数据提供给其它的应用程序。
3)资源管理器(Resource Manager)使得应用程序可以访问所需资源,如字符串(string),页面布局(1ayout),图片等。
4)通知管理器(Notification Manager)使应用程序可以自定义在状态栏中显示的提醒信息.
5)活动管理器(Activity Manager)负责管理应用程序的生命周期,并且提供了常用的导航回退栈
3)系统运行库和Android运行环境(Libraries and android runtime)
Android包含一套用于系统组件的C/C++运行库,这些接口通过应用程序框架层暴露给开发人员.这里列出一些核心库:
1)系统C函数库:一个从BSD继承而来的标准C系统函数库,专门为嵌入式Linux设备定制。
Y23034 59FA 姺%29285 7265 牥21248 5300 匀=40725 9F15 鼕
2) 多媒体库:基于PacketVideo’s 0penCORE;该库支持多种音频和视频
格式的回放和录制,同时支持静态图像,如MPEG4,H.264,MP3,AAC,AMR,JPG PNG。
3)Surface Manager:管理显示子系统,提供多应用程序的2D和3D图像的无缝拼接。
4)LibWebCore:支持Android浏览器和嵌入式web view的现代web浏览器引擎。
5)3D libraries:OpenGL ES1.0APIs的一个实现;该库使用硬件加速(若可用)或者高度优化的3D软件光栅。
6)Freetype:位图和矢量字体渲染。
7)SQLite:对所有应用程序可用的强大的轻量级关系型数据库引擎.
每一个Android应用程序都运行在一个独立的进程中,拥有一个单独的Dalvik虚拟机实例。Dalvik被设计使得设备可以高效地运行多个虚拟机。Dalvik执行.dex格式的文件,这种优化过的文件占用更少的内存空间。Dalvik是基于寄存器的,所有类都是由Java编译器编译,通过SDK中的“dx"工具转化为.dex文件,然后由虚拟机执行。
(4)Linux核心层
Android的核心系统服务依赖于Linux2.6内核,所提供的核心系统服务如下所述:
1)安全性(security)。
2)内存管理(Memory Management)。
3)进程管理(Process Management)。
4)网络协议栈(Network stack)。
5)驱动模型(Driver Model)。
Linux内核也同时作为硬件与软件架构之间的抽象层(Abstraction Layer)。
2. SQLite数据库
SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、c#、PHP、Java等,还有ODBC接口.
25b$38577 96B1 隱o~
Android作为目前主流的移动操作系统,完全符合SQLite占用资源少的优势,故在Android平台上,集成了这个嵌入式关系型数据库-SQLite.
SQLite由以下几个组件组成:SQL编译器、内核、后端以及附件.SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展SQLite的内核变得更加方便。
Activites可以通过C0ntent Provider或者Service访问一个数据库。但
Android不自动提供数据库。在Android应用程序中使用SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android提供了SQLiteOpenHelper帮助你创建一个数据库,你只要继承SQLiteOpenHelper类,就可以轻松的创建数据库。
SQLiteopenHelper类根据开发应用程序的需要,封装了创建和更新数据库使用的
逻辑。SQLiteOpenHelper的子类,至少需要实现三个方法:
(1)构造函数,调用父类SQLiteOpenHelper的构造函数.这个方法需要四个
参数:上下文环境(例如,一个Activity),数据库名字,一个可选的游标工厂(通常是Null),一个代表你正在使用的数据库模型版本的整数。
(2)onCreate0方法,它需要一个SQLiteDatabase对象作为参数,根据需要对这个对象填充表和初始化数据。
(3)onUpgrageO方法,它需要三个参数,一个SQLiteDatabase对象,一个旧
的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型.
3. OCR (Optical Character Recognition,光学字符识别)
OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术.如何除错或利用辅助信息提高识别正确率,是OCR最重要的课题,ICR(Intelligent Character Recognition)的名词也因此而产生.衡量一个OCR系统性能好坏的主要指标有:拒识率、误识率、识别速度、用户界面的友好性,产品的稳定性,易用性及可行性等。
软件结构
由于扫描仪的普及与广泛应用,OCR软件只需提供与扫描仪的接口,利用扫描仪驱动软件即可。因此,OCR软件主要是由下面几个部分组成。
图像输入、预处理:
图像输入:对于不同的图像格式,有着不同的存储格式,不同的压缩方式,目前有OpenCV,CxImage等开源项目 。预处理:主要包括二值化,噪声去除,倾斜较正等
二值化:
35451 8A7B 詻z22141 567D 噽27052 69AC 榬35005 88BD 袽 c
对摄像头拍摄的图片,大多数是彩色图像,彩色图像所含信息量巨大,对于图片的内容,我们可以简单的分为前景与背景,为了让计算机更快的,更好的识别文字,我们需要先对彩色图进行处理,使图片只前景信息与背景信息,可以简单的定义前景信息为黑色,背景信息为白色,这就是二值化图了。
噪声去除:
对于不同的文档,我们对噪声的定义可以不同,根据噪声的特征进行去噪,就叫做噪声去除
倾斜较正:
由于一般用户,在拍照文档时,都比较随意,因此拍照出来的图片不可避免的产生倾斜,这就需要文字识别软件进行较正。
版面分析:
将文档图片分段落,分行的过程就叫做版面分析,由于实际文档的多样性,复杂性,因此,目前还没有一个固定的,最优的切割模型.
字符切割:
由于拍照条件的限制,经常造成字符粘连,断笔,因此极大限制了识别系统的性能,这就需要文字识别软件有字符切割功能.
字符识别:
这一研究,已经是很早的事情了,比较早有模板匹配,后来以特征提取为主,由于文字的位移,笔画的粗细,断笔,粘连,旋转等因素的影响,极大影响特征的提取的难度.
版面恢复:
人们希望识别后的文字,仍然像原文档图片那样排列着,段落不变,位置不变,顺序不变,的输出到word文档,pdf文档等,这一过程就叫做版面恢复.
后处理、校对:
根据特定的语言上下文的关系,对识别结果进行较正,就是后处理.
工作流程
一个OCR识别系统,其目的很简单,只是要把影像作一个转换,使影像内的图形继续保存、有表格则表格内资料及影像内的文字,一律变成计算机文字,使能达到影像资料的储存量减少、识别出的文字可再使用及分析,当然也可节省因键盘输入的人力与时间。
从影像到结果输出,须经过影像输入、影像前处理、文字特征抽取、比对识别、最后经人工校正将认错的文字更正,将结果输出.
24204 5E8C 庌637599 92DF 鋟='%
影像输入
欲经过OCR处理的标的物须透过光学仪器,如影像扫描仪、传真机或任何摄影器材,将影像转入计算机.科技的进步,扫描仪等的输入装置已制作的愈来愈精致,轻薄短小、品质也高,对OCR有相当大的帮助,扫描仪的分辨率使影像更清晰、扫除速度更增进OCR处理的效率。
影像预处理:影像预处理是OCR系统中,须解决问题最多的一个模块。影像须先将图片、表格及文字区域分离出来,甚至可将文章的编排方向、文章的提纲及内容主体区分开,而文字的大小及文字的字体亦可如原始文件一样的判断出来。
对待识别图像进行如下预处理,可以降低特征提取算法的难度,并能提高识别的精度.
二值化:由于彩色图像所含信息量过于巨大,在对图像中印刷体字符进行识别处理前,需要对图像进行二值化处理,使图像只包含黑色的前景信息和白色的背景信息,提升识别处理的效率和精确度.
图像降噪:由于待识别图像的品质受限于输入设备、环境、以及文档的印刷质量,在对图像中印刷体字符进行识别处理前,需要根据噪声的特征对待识别图像进行去噪处理,提升识别处理的精确度。
倾斜校正:由于扫描和拍摄过程涉及人工操作,输入计算机的待识别图像或多或少都会存在一些倾斜,在对图像中印刷体字符进行识别处理前,就需要进行图像方向检测,并校正图像方向。
文字特征抽取:单以识别率而言,特征抽取可说是 OCR的核心,用什么特征、怎么抽取,直接影响识别的好坏,也所以在OCR研究初期,特征抽取的研究报告特别的多。而特征可说是识别的筹码,简易的区分可分为两类:一为统计的特征,如文字区域内的黑/白点数比,当文字区分成好几个区域时,这一个个区域黑/白点数比之联合,就成了空间的一个数值向量,在比对时,基本的数学理论就足以应付了。而另一类特征为结构的特征,如文字影像细线化后,取得字的笔划端点、交叉点之数量及位置,或以笔划段为特征,配合特殊的比对方法,进行比对,市面上的线上手写输入软件的识别方法多以此种结构的方法为主。
对比数据库:当输入文字算完特征后,不管是用统计或结构的特征,都须有一比对数据库或特征数据库来进行比对,数据库的内容应包含所有欲识别的字集文字,根据与输入文字一样的特征抽取方法所得的特征群组。
对比识别
这是可充分发挥数学运算理论的一个模块,根据不同的特征特性,选用不同的数学距离函数,较有名的比对方法有,欧式空间的比对方法、松弛比对法(Relaxation)、动态程序比对法(Dynamic Programming,DP),以及类神经网络的数据库建立及比对、HMM(Hidden Markov Model)…等著名的方法,为了使识别的结果更稳定,也有所谓的专家系统(Experts System)被提出,利用各种特征比对方法的相异互补性,使识别出的结果,其信心度特别的高。
字词后处理:由于OCR的识别率并无法达到百分之百,或想加强比对的正确性及信心值,一些除错或甚至帮忙更正的功能,也成为OCR系统中必要的一个模块。字词后处理就是一例,利用比对后的识别文字与其可能的相似候选字群中,根据前后的识别文字找出最合乎逻辑的词,做更正的功能。
字词数据库:为字词后处理所建立的词库。
OCR识别的两种方式
与其它信息数据一样,在计算机中所有扫描仪捕捉到的图文信息都是用0、1这两个数字来记录和进行识别的,所有信息都只是以0、1保存的一串串点或样本点。
(1)决策理论方法
统计模式是由图像信息获取进而图像预处理,然后再特征提取、特征选择,最终进行分类。统计模式识别方法最终归结为分类问题.假如已抽取出 N个特征,而图像可分为 m类.那么就可以对 N进行分类,从而决定未知图像属于 m类中的那一类。一般把识别模式看成是 N维空间中的向量 X,即: X=[x1 x2 x3……xN]T
模式识别为 w1,w2,…,wm,识别就是要判断 X是否属于 wi以及属于 wi中的哪一类。
29647 73CF 珏20801 5141 允dfq25628 641C 搜B
在这个过程中主要解决两个问题:一是如何抽取特征,要求特征数 N尽可能小而且对分类判断有效,二是假设已有了代表模式的向量,如何决定它属于哪一类,这就需要判别函数。例如,模式有 w1,w2,…,wm共 m个类别,则应有 D1(X),D2(X),D3(X),…Dm(X)共 m个判别函数.如果 X属于第 i类,则有: Di(X)>Dj(X) (j=1,2,…,m;j≠i) 在两类的分解线上,则有 Di(X)=Dj(X)这是 X既属于第 i类,也属于第 j类,因此这种判别失效。为了进行识别就必须重新考虑其他特征,再进行识别,现在问题的关键就是找到合适的判别函数。
(2)线性判别函数
线性判别函数是一种应用较广的一种判别函数.所谓线性判别函数,是指判别函数是图像所有特征向量的线性组合,即: Di(X)=ΣwikXk+wi0 i=1,2,…m式中 Di(X)代表第 i个判别函数, wik是系数或权重,wi0为常数或称为阙值。在两类之间的判决界处有: Di(X)-Dj(X)=0该方程在在二维空间是直线,在三维空间是平面,在 N维空间则是超平面。 Di(X)-Dj(X)可以写成以下的形式: Di(X)-Dj(X)=Σ(wik-wjk)Xk+(wi0-wj0)
其判决过程可如下进行;如果 Di(X)〉Dj(X),或 Di(X)—Dj(X)>0,则 X∈wi,如果 Di(X)<0,则 X∈wj。用线性判别函数进行分类是线性分类器。任何 m类问题都可以分解为(m-1)个二类识别问题。方法是先把模式空间分为一类和其它类,如此进行下去即可.因此,两类线性分类器是最简单和最基本的。
分离两类的判决界由 D1-D0=0表示。对于任何特点的输入模式必须判定 D1大还是 D2大。若考虑某个函数 D=D1—D2,对于 1类模式 D为正,对于二类模式 D为负.于是,只要处理与 D相应的一组权输入模式并判断输出符合即可进行分类。
算法分析
有两种方法,一种是CNN+RNN+CTC,
还有一种是CNN+RNN基于Attention的方法
http://blogs。com/justany/archive/2012/11/27/2789767.html
http://blogs。com/skykill/p/6785882。html
OCR开源识别库
Google支持的开源的OCR图文识别开源项目。去持多语言(版本支持包括英文,简体中文,繁体中文),支持Windows,Linux,Mac OSX 多平台。使用中Tesseract 的识别率非常高。可以在项目网站下
4. TTS语音合成技术
TTS是Text To Speech的缩写,即“从文本到语音”,是人机对话的一部分,
让机器能够说话.在内置芯片的支持之下,通过神经网络的设计,把文字智能地
转化为自然语音流。
Android上TTS被称为语音合成,是Android系统从1.6版本开始支持的
新功能, 能将所指定的文本转成不同语言音频输出.Android使用了叫Pico的
+y30455 76F7 盷32326 7E46 繆. V
支持多种语言的语音合成引擎,Pico在后台负责把分析输入的文本, 把分本分
成他能识别的各个片段,再把合成的各个语音片段以听起来比较自然的方式连接
在一起。能支持如此庞大的数据量,TTS引擎对于资源的优化采取预加载的方法。根据一系列的参数信息从库中提取相应的资源,并加载到当前系统中.
上述Andriod自带TTS技术只能支持English,French,German,Italian,Spanish。汉语的输出我们打算采用百度提供的TTS免费接口。
测试代码如下(Javascript)
〈!DOCTYPE html>
<html lang="en"〉
〈head>
〈meta charset="UTF-8">
<title〉Document〈/title〉
〈/head〉
〈body〉
〈form action=”” method=”post">
<table align=”center"〉
<tr〉
<td><input type=”text” id=’val’ placeholder=’你要装换的文字'〉</td〉
〈td>〈input type="button" value="提交” onclick="fun()"〉</td〉
〈/tr>
21163 52AB 劫22503 57E7 埧34558 86FE 蛾28754 7052 灒740193 9D01 鴁
〈/table>
</form>
〈/body〉
</html>
<script type=”text/javascript”>
function fun()
{
var val=document。getElementById(”val").value;
var zhText = val;
zhText = encodeURI(zhText);
document.write(”<audio autoplay=\”autoplay\”>”);
document。write("〈source src=\”http://tts。baidu。com/text2audio?lan=zh&ie=UTF-8&spd=2&text=”+ zhText +”\” type=\"audio/mpeg\”〉”);
document。write(”〈embed height=\"0\" width=\”0\" src=\"http://tts。baidu。com/text2audio?lan=zh&ie=UTF-8&spd=2&text="+ zhText +”\”〉");
document。write("〈/audio〉”);
}
</script>
展开阅读全文