一种移动APP的设计与实现项目调研报告.docx
《一种移动APP的设计与实现项目调研报告.docx》由会员分享,可在线阅读,更多相关《一种移动APP的设计与实现项目调研报告.docx(13页珍藏版)》请在冰点文库上搜索。
![一种移动APP的设计与实现项目调研报告.docx](https://file1.bingdoc.com/fileroot1/2023-7/13/5df9e5de-ca0a-4061-846f-44abd3eb3927/5df9e5de-ca0a-4061-846f-44abd3eb39271.gif)
一种移动APP的设计与实现项目调研报告
一种移动APP的设计与实现——调研报告
基于Android的移动电话电子词典的开发
小组成员:
前言
随着智能电话与平板的普及,各类语言学习APP成了汉语学习者的必备工具。
其卓越的便携性、快捷方便的查询功能、壮大的互联网资源支撑等特点超级好地迎合当下语言学习者移动学习的需求。
一、现有的电话词典举例
有道词典,Google翻译,必应词典,金山词霸,汉王等等。
类别
构成
特点
举例
词库开放型
一个主程序+多个独立的词典库
用户可以随意增删词库,网友可以制作共享词库。
灵格斯词典、金山词霸、有道词典
词库捆绑型
一个主程序+一个捆绑的词典库
用户无法随意增删词典库
光盘词典、手持式电子词典、电子阅读器内置词典
词库联网型
仅一个主程序,可以联网查询实时更新的词库
需要在词典程序终端接入网络查询(更详尽的)词典信息
旧版的金山词霸和有道词典
词库在线型
建立在WEB平台上,在网上传输,供用户在线查阅
只有接入网络才能查询使用
在线词典
表1电子词典的分类
有道词典,金山词霸等大多具有如下特点:
1)界面整洁美观
2)资源丰硕
3)搜索模式灵活多样
4)照相取词
在已上市的电子词典产品中有道词典,海词词典用户数及下载量最多,功能最为全面,提供词库最为完整,界面设计清楚易用,但客户端数据包占用空间专门大,且利用进程中需要传输的网络内容较多,利用网络流量较大,对电话用户的网络流量及网络传输速度要求较高。
其它如21世纪英汉双解词典、深蓝词典等功能较为单一,有的不支持发音,有的没有生词本及收藏功能。
因此电子词典在移动平台的开发仍然有专门大用户需求及市场潜力,值得企业继续投入,而伴随着Android系统慢慢占据市场份额的脚步,Android电话电子词典能为更多用户提供英语学习的帮助,制造更大的社会价值。
二、要紧技术介绍与分析
1、Android操作系统
Android是一种以Linux为基础的开放源代码操作系统,要紧利用于便携设备。
它是Google推出的开源电话操作系统,由30多家科技公司和电话公司组成的“开放电话联盟”一起研发。
Android是第一个完整、开放、免费的电话平台,其具有5个突出特点:
1)开放性:
Google与开放电话联盟合作开发了Android,Google希望与运营商、设备制造商、开发商和其他有关方结成深层次的合作伙伴关系,希望通过成立标准化、开放式的移动软件平台、在移动产业内形成一个开放式的生态系统。
2)应用程序无界限:
Android上的应用程序能够通过标准API访问核心移动设备功能。
通过互联网,应用程序能够声明它们的功能可供其他应用程序利用。
3)应用程序在平等的条件下创建:
移动设备上的应用程序能够被替换或扩展,即便是拨号程序或主屏幕如此的核心组件。
4)应用程序能够轻松嵌入地嵌入网络:
应用程序能够轻松地嵌入HTML、JavaScript和样式表,还能够通过WebView显示网络内容。
5)应用程序能够并行运行:
Android是一种完整的多任务环境,应用程序能够在其中并行运行。
在后台运行时,应用程序能够生成通知以引发注意。
Android的系统架构和其它操作系统一样,采纳了分层的架构。
从架构图看,android分为四个层,从高层到低层别离是应用程序层(Application)、应用程序框架层(ApplicationFramework)、系统运行库层(Libraries)和Android运行环境(AndroidRuntime)和Linux核心层(LinuxKernel)
(1)应用程序层
Android最上层的应用是由Java编程语言开发的,如Android系统预置的、联系人、短信、邮件客户端、阅读器、同历、地图等。
这些应用被编译成DEX文件后运行在各自独立的Dalvik虚拟机上,也确实是下面提到的运行时(RunTime)层。
(2)应用程序框架层
Android通过提供一个开放的开发平台,使得开发人员有能力创建一个丰硕而创新的应用。
开发者能够灵活地利用硬件设备,如地理定位、后台服务、通知栏提示等,发挥硬件和平台的优势。
,开发人员开发的应用能够与核心应用一样,平等地利用框架层API。
应用程序框架旨在简化组件重用,在框架平安限制内,应用间能够复用组件模块。
所有的应用都是一套效劳和系统组成的:
1)一套丰硕又具有可扩展性的视图,用来构建应用程序,包括列表,网格,文本框,按钮,和嵌入式Web阅读器。
2)内容提供器(ContentProviders)使得应用程序能够访问其他应用的数据(例如联系人),也能够将自己的数据提供给其它的应用程序。
3)资源治理器(ResourceManager)使得应用程序能够访问所需资源,如字符串(string),页面布局(1ayout),图片等。
4)通知治理器(NotificationManager)使应用程序能够自概念在状态栏中显示的提示信息。
5)活动治理器(ActivityManager)负责治理应用程序的生命周期,而且提供了经常使用的导航回退栈
3)系统运行库和Android运行环境(Librariesandandroidruntime)
Android包括一套用于系统组件的C/C++运行库,这些接口通过应用程序框架层暴露给开发人员。
这里列出一些核心库:
1)系统C函数库:
一个从BSD继承而来的标准C系统函数库,专门为嵌入式Linux设备定制。
2)多媒体库:
基于PacketVideo’s0penCORE;该库支持多种音频和视频
格式的回放和录制,同时支持静态图像,如MPEG4,H.264,MP3,AAC,AMR,JPGPNG。
3)SurfaceManager:
治理显示子系统,提供多应用程序的2D和3D图像的无缝拼接。
4)LibWebCore:
支持Android阅读器和嵌入式webview的现代web阅读器引擎。
5)3Dlibraries:
OpenGL的一个实现;该库利用硬件加速(假设可用)或高度优化的3D软件光栅。
6)Freetype:
位图和矢量字体渲染。
7)SQLite:
对所有应用程序可用的壮大的轻量级关系型数据库引擎。
每一个Android应用程序都运行在一个独立的进程中,拥有一个单独的Dalvik虚拟机实例。
Dalvik被设计使得设备能够高效地运行多个虚拟机。
Dalvik执行.dex格式的文件,这种优化过的文件占用更少的内存空间。
Dalvik是基于寄放器的,所有类都是由Java编译器编译,通过SDK中的“dx”工具转化为.dex文件,然后由虚拟机执行。
(4)Linux核心层
Android的核心系统效劳依托于Linux2.6内核,所提供的核心系统效劳如下所述:
1)平安性(security)。
2)内存治理(MemoryManagement)。
3)进程治理(ProcessManagement)。
4)网络协议栈(Networkstack)。
5)驱动模型(DriverModel)。
Linux内核也同时作为硬件与软件架构之间的抽象层(AbstractionLayer)。
2.SQLite数据库
SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库治理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中利用了它,它占用资源超级的低,在嵌入式设备中,可能只需要几百K的内存就够了。
它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、c#、PHP、Java等,还有ODBC接口。
Android作为目前主流的移动操作系统,完全符合SQLite占用资源少的优势,故在Android平台上,集成了那个嵌入式关系型数据库—SQLite。
SQLite由以下几个组件组成:
SQL编译器、内核、后端和附件。
SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展SQLite的内核变得加倍方便。
Activites能够通过C0ntentProvider或Service访问一个数据库。
但
Android不自动提供数据库。
在Android应用程序中利用SQLite,必需自己创建数据库,然后创建表、索引,填凑数据。
Android提供了SQLiteOpenHelper帮忙你创建一个数据库,你只要继承SQLiteOpenHelper类,就能够够轻松的创建数据库。
SQLiteopenHelper类依照开发应用程序的需要,封装了创建和更新数据库利用的
逻辑。
SQLiteOpenHelper的子类,至少需要实现三个方式:
(1)构造函数,挪用父类SQLiteOpenHelper的构造函数。
那个方式需要四个
参数:
上下文环境(例如,一个Activity),数据库名字,一个可选的游标工厂(一般是Null),一个代表你正在利用的数据库模型版本的整数。
(2)onCreate0方式,它需要一个SQLiteDatabase对象作为参数,依照需要对那个对象填充表和初始化数据。
(3)onUpgrageO方式,它需要三个参数,一个SQLiteDatabase对象,一个旧
的版本号和一个新的版本号,如此你就能够够清楚如何把一个数据库从旧的模型转变到新的模型。
3.OCR(OpticalCharacterRecognition,光学字符识别)
OCR(OpticalCharacterRecognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确信其形状,然后用字符识别方式将形状翻译成运算机文字的进程;即,针对印刷体字符,采纳光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处置软件进一步编辑加工的技术。
如何除错或利用辅助信息提高识别正确率,是OCR最重要的课题,ICR(IntelligentCharacterRecognition)的名词也因此而产生。
衡量一个OCR系统性能好坏的要紧指标有:
拒识率、误识率、识别速度、用户界面的友好性,产品的稳固性,易用性及可行性等。
软件结构
由于扫描仪的普及与普遍应用,OCR软件只需提供与扫描仪的接口,利用扫描仪驱动软件即可。
因此,OCR软件主若是由下面几个部份组成。
图像输入、预处置:
图像输入:
关于不同的图像格式,有着不同的存储格式,不同的紧缩方式,目前有OpenCV,CxImage等开源项目。
预处置:
要紧包括二值化,噪声去除,倾斜较正等
二值化:
对摄像头拍照的图片,大多数是彩色图像,彩色图像所含信息量庞大,关于图片的内容,咱们能够简单的分为前景与背景,为了让运算机更快的,更好的识别文字,咱们需要先对彩色图进行处置,使图片只前景信息与背景信息,能够简单的概念前景信息为黑色,背景信息为白色,这确实是二值化图了。
噪声去除:
关于不同的文档,咱们对噪声的概念能够不同,依照噪声的特点进行去噪,就叫做噪声去除
倾斜较正:
由于一样用户,在拍照文档时,都比较随意,因此拍照出来的图片不可幸免的产生倾斜,这就需要文字识别软件进行较正。
版面分析:
将文档图片分段落,分行的进程就叫做版面分析,由于实际文档的多样性,复杂性,因此,目前尚未一个固定的,最优的切割模型。
字符切割:
由于拍照条件的限制,常常造成字符粘连,断笔,因此极大限制了识别系统的性能,这就需要文字识别软件有字符切割功能。
字符识别:
这一研究,已是很早的情形了,比较早有模板匹配,后来以特点提取为主,由于文字的位移,笔画的粗细,断笔,粘连,旋转等因素的阻碍,极大阻碍特点的提取的难度。
版面恢复:
人们希望识别后的文字,仍然像原文档图片那样排列着,段落不变,位置不变,顺序不变,的输出到word文档,pdf文档等,这一进程就叫做版面恢复。
后处置、校对:
依照特定的语言上下文的关系,对识别结果进行较正,确实是后处置。
工作流程
一个OCR识别系统,其目的很简单,只是要把影像作一个转换,使影像内的图形继续保留、有表格那么表格内资料及影像内的文字,一概变成运算机文字,使能达到影像资料的贮存量减少、识别出的文字可再利用及分析,固然也可节省因键盘输入的人力与时刻。
从影像到结果输出,须通过影像输入、影像前处置、文字特点抽取、比对识别、最后经人工校正将认错的文字更正,将结果输出。
影像输入
欲通过OCR处置的标的物须透过光学仪器,如影像扫描仪、机或任何摄影器材,将影像转入运算机。
科技的进步,扫描仪等的输入装置已制作的愈来愈精致,轻薄短小、品质也高,对OCR有相当大的帮忙,扫描仪的分辨率使影像更清楚、扫除速度更增进OCR处置的效率。
影像预处置:
影像预处置是OCR系统中,须解决问题最多的一个模块。
影像须先将图片、表格及文字区域分离出来,乃至可将文章的编排方向、文章的提纲及内容主体区分开,而文字的大小及文字的字体亦可如原始文件一样的判定出来。
对待识别图像进行如下预处置,能够降低特点提取算法的难度,并能提高识别的精度。
二值化:
由于彩色图像所含信息量过于庞大,在对图像中印刷体字符进行识别处置前,需要对图像进行二值化处置,使图像只包括黑色的前景信息和白色的背景信息,提升识别处置的效率和精准度。
图像降噪:
由于待识别图像的品质受限于输入设备、环境、和文档的印刷质量,在对图像中印刷体字符进行识别处置前,需要依照噪声的特点对待识别图像进行去噪处置,提升识别处置的精准度。
倾斜校正:
由于扫描和拍照进程涉及人工操作,输入运算机的待识别图像或多或少都会存在一些倾斜,在对图像中印刷体字符进行识别处置前,就需要进行图像方向检测,并校正图像方向。
文字特点抽取:
单以识别率而言,特点抽取可说是OCR的核心,用什么特点、怎么抽取,直接阻碍识别的好坏,也因此在OCR研究初期,特点抽取的研究报告专门的多。
而特点可说是识别的筹码,简易的区分可分为两类:
一为统计的特点,如文字区域内的黑/白点数比,当文字区分成好几个区域时,这一个个区域黑/白点数比之联合,就成了空间的一个数值向量,在比对时,大体的数学理论就足以应付了。
而另一类特点为结构的特点,如文字影像细线化后,取得字的笔画端点、交叉点之数量及位置,或以笔画段为特点,配合特殊的比对方式,进行比对,市面上的线上手写输入软件的识别方式多以此种结构的方式为主。
对照数据库:
当输入文字算完特点后,不管是用统计或结构的特点,都须有一比对数据库或特点数据库来进行比对,数据库的内容应包括所有欲识别的字集文字,依照与输入文字一样的特点抽取方式所得的特点群组。
对照识别
这是可充分发挥数学运算理论的一个模块,依照不同的特点特性,选用不同的数学距离函数,较出名的比对方式有,欧式空间的比对方式、松弛比对法(Relaxation)、动态程序比对法(DynamicProgramming,DP),和类神经网络的数据库成立及比对、HMM(HiddenMarkovModel)…等闻名的方式,为了使识别的结果更稳固,也有所谓的专家系统(ExpertsSystem)被提出,利用各类特点比对方式的相异互补性,使识别出的结果,其信心度专门的高。
字词后处置:
由于OCR的识别率并无法达到百分之百,或想增强比对的正确性及信心值,一些除错或乃至帮忙更正的功能,也成为OCR系统中必要的一个模块。
字词后处置确实是一例,利用比对后的识别文字与其可能的相似候选字群中,依照前后的识别文字找出最合乎逻辑的词,做更正的功能。
字词数据库:
为字词后处置所成立的词库。
OCR识别的两种方式
与其它信息数据一样,在运算机中所有扫描仪捕捉到的图文信息都是用0、1这两个数字来记录和进行识别的,所有信息都只是以0、1保留的一串串点或样本点。
(1)决策理论方式
统计模式是由图像信息获取进而图像预处置,然后再特点提取、特点选择,最终进行分类。
统计模式识别方式最终归结为分类问题。
假设已抽掏出 N个特点,而图像可分为 m类。
那么就能够够对 N进行分类,从而决定未知图像属于 m类中的那一类。
一样把识别模式看成是 N维空间中的向量 X,即:
X=[x1x2x3……xN]T
模式识别为 w1,w2,…,wm,识别确实是要判定 X是不是属于 wi和属于 wi中的哪一类。
在那个进程中要紧解决两个问题:
一是如何抽取特点,要求特点数 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的方式
开源识别库
Google支持的开源的OCR图文识别开源项目。
去持多语言(版本支持包括英文,简体中文,繁体中文),支持Windows,Linux,MacOSX多平台。
利用中Tesseract的识别率超级高。
能够在项目网站下tesseract-ocr
4.TTS语音合成技术
TTS是TextToSpeech的缩写,即“从文本到语音”,是人机对话的一部份,
让机械能够说话。
在内置芯片的支持之下,通过神经网络的设计,把文字智能地
转化为自然语音流。
Android上TTS被称为语音合成,是Android系统从1.6版本开始支持的
新功能,能将所指定的文本转成不同语言音频输出。
Android利用了叫Pico的
支持多种语言的语音合成引擎,Pico在后台负责把分析输入的文本,把分本分
成他能识别的各个片段,再把合成的各个语音片段以听起来比较自然的方式连接
在一路。
能支持如此庞大的数据量,TTS引擎关于资源的优化采取预加载的方式。
依照一系列的参数信息从库中提取相应的资源,并加载到当前系统中。
上述Andriod自带TTS技术只能支持English,French,German,Italian,Spanish。
汉语的输出咱们打算采纳XX提供的TTS免费接口。
测试代码如下(Javascript)
DOCTYPEhtml>
Document
| |