版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
文字识别的系统设计与实现案例分析目录TOC\o"1-3"\h\u18491文字识别的系统设计与实现案例分析 114002(一)文字存储设计与实现 116937(二)文字识别各模块功能的实现 2122511、图像获取模块 3144472、图像处理模块 4255783、文字识别模块 690304、用户界面模块 8(一)文字存储设计与实现历史数据显示模块用来实现查询字符识别的历史记录的功能。在此模块除了要实现主要的查询功能,还需要有增加历史数据、删除历史数据的功能。以上的功能操作都需要数据库的数据支持,因此需要创建系统数据库。数据模型是表示和组织数据的有力工具,是对客观事物及其联系的逻辑组织描述,其三要素为数据结构、数据操作和数据约束[10]。在创建数据库时,需要根据用户的查询需求来确定数据库中的数据表以及每个表中的字段名称及内容,同时也要明确各字段之间的联系。该系统的数据库包含分类表和数据表两张数据存储表。这两张表的主键名都为ID,且取值是自增的。两张表通过字段名为类别名的字段进行内部联系。分类表存储用于查找识别记录的关键字。数据表用来存储识别的记录。本该系统采用轻量级的嵌入式数据库SQLite来创建数据库。数据库名为records,表1列出来了分类表中的各个字段。在分类表中字段id为自增主键,主键的值是唯一的,type是数据表的外键,其取值也是唯一的。创建分类表的目的是为了对类别名进行管理。字段名称数据结构空字段说明idint否主键,自增typevarchar(32)否识别的文本的类型表1分类表classification的结构表2列出来了记录表中的各个字段。在记录表中数据id为自增主键,type为外键,其取值必须在分类表classification中已出现,字段名为image的值为图像的路径的取值,字段名为time的值为识别的时间取值,字段名为text的值为识别输出的文本内容。字段名称数据结构空字段说明idint否主键,自增typevarchar(32)否识别的文本的类型,外键timevarchar(32)否识别的时间imagevarchar(50)否原图像的地址textvarchar(200)识别的文本结果表2记录表record的结构用户在显示历史记录界面,根据个人需要查找的文本类型,点击相应按钮,调用queryData()方法显示出所有该类型的识别记录。系统在识别字符的过程中,调用ResultActivity类中的insert()方法自动在记录表中添加一行数据。同时用户也可以在历史记录界面通过调用deleteData()方法删除相关的数据信息。(二)文字识别各模块功能的实现图4-1OCR层次化结构根据图4-1,OCR的功能模块由用户交互模块、图像获取模块、图像预处理模块和Tesseract字符识别模块四个模块组成。1、图像获取模块图像获取模块的主要功能是获取图像。系统采用两种获取图像的方式,第一种是用户可以通过点击相册按钮后,调用Android自带的相册接口,选取图库中的图片,选取图片的文件后缀名为jpg、png等的方式获取图像。第二种是点击拍照按钮的拍摄图片,点击按钮后程序调用手机摄像头来获取图像。通过相机获取图像数据是用户完成采集待识别图像的操作方式之一,该操作包括拍照、图像保存等。通过拍照获取图片是使用Android自带的摄像头调用类进行摄像头的布局与图像的获取。基于对于用户数据的保护,在Android上的软件时在使用时有很严格的权限限制。程序在调用摄像头之前,需要先获取摄像头拍摄权限,由于拍摄后的图像要保存,因此还需要文件读写权限。对于权限问题,由于应用会使用到SD卡、相机等设备共享资源,所以要在AndroidManifests.xml文件中授权软件需要的使用权限。系统需要获取的权限有相机权限、允许该软件能够进行图片存储权限和其他的数据读、写权限。为了有效的拍照,用户需要看到相机预览界面中的图像。同时在拍照预览界面,需要添加一些其他的辅助的功能性按钮,如拍照按钮和返回按钮。该布局文件最外层使用的Android页面布局是FrameLayout,根据FrameLayout的特点,该布局里的所有子控件都是采用分层的方式来布局的。该布局文件的底层是SurfaceView控件,为用户提供可见区域,上一层是一个LinearLayout,它包含返回控件按钮和拍照控件按钮。因为相机是手机系统的共享资源,同一时间只能允许一个应用使用,当该应用程序用完相机后,要及时将相机资源释放。如果没有释放,手机会默认会相机资源一直被占用,导致之后的使用请求失败并且应用程序会强制退出。当用户拍照结束或者点击拍照界面的返回按钮之后,都要及时将相机资源释放。从图库选择需要识别的图像是字符识别系统中图像采集的第二种方式,主要是从移动端的本地相册中选择需要进行识别的文本图像,包括浏览相册等功能。图库是Android系统中的一个系统进程,通过应用程序获取相册中的任意图片,都要保证Android进程间能够通信。Intent是数据携带者,封装了操作的动作、数据以及附加数据的描述,利用Intent能够实现各组件间的信息传递。在应用程序中使用Intent就实现软件和系统图库之间信息通讯,使用户能够在应用程序中打开系统相册,上传图片到应用中。该方法的具体实现是在mainActivity中设置相册按钮的监听器,当该按钮被点击时,首先会采用Action_GET_CONTENT来打开手机的文件管理器,之后为了能够成功获取图像,还需要用FLAG_GRANT_READ_URI_PERMISSION来获取读取图像路径的权限。得到图像后,将图像的数据保存在Intent中。在获取图像后,根据个人需求可以对图像进行剪裁。首先调用裁剪的设置,然后将crop和scale的值置为true,表示允许裁剪。裁剪后的图片以Bitmap的格式保存在内存中,然后再将内存中的图片转化为原始图片的jpg或者png等格式的数据输入指定的uri文件中,同时设置数据的输出格式。图片获取后,选择需要识别的字符的语言,再通过相关函数来获取传输的图片信息。之后调用预处理函数ImgPretreatment中的方法跳转到预处理模块,在进行图片预处理时,会读取刚刚保存的图片数据,并对图像进行操作。经过以上操作就可以实现上传图片,获取图片信息,进入下一功能模块。2、图像处理模块在图像预处理模块当中,原始图像中的噪声、文本倾斜、光照不均匀等情况会影响字符识别的结果,为了取出这些外界的干扰,采用灰度化、去噪和二值化图像预处理的方法,将这些干扰解决。(1)灰度化处理彩色图像有R变量、G变量、B变量三个通道,它的数据量很大,鉴于移动端平台的资源有限,因此我们需要对彩色图片进行灰度化处理。灰度化后的图像是单通道图像,减少了图像的色彩数据,数据量小的图像能够节省计算时间。灰度化处理原始图像的过程,就是将每个像素点的R变量、G变量、B变量的值改为数学意义上的相同值。在日常的操作中,文本图像中黑白颜色占据比例较大,各种图像灰度化的算法效果大致相同,在图像灰度化过程中常采用选择人体生理学加权方法,该算法的计算量小且处理效果良好的。人的眼睛对红绿蓝三原色的灵敏度是不同的,最为敏感的颜色是绿色,最不敏感的颜色是蓝色。依据人眼的灵敏度对三原色分量进行加权计算。该灰度化的处理方法为加权平均法:Grayi,j=公式(6)表示图像中的每一个位置的灰度值取值为该处R分量、G分量、B分量三分量值分别按照权值为0.2999、0.578、0.114的值进行加权计算。在系统中通过ResultActivity中的doPreTreatmnet()方法或者converyToGrayImg()跳转到ImgPretreatment预处理函数来实现图像的灰度化。(2)二值化对图像进行二值化,能够在灰度化的基础上,更加压缩图像的信息,缩短计算时间,同时也能提高识别准确率。二值化图像时最重要的步骤就是确定图像中最为合适的阈值。像素点的高于阈值的为背景,低于阈值的为前景。本系统采用的寻找图像的最合适阈值T采用全局阈值分割算法[11]。把整个图像视为一个像素点矩阵,遍历所有像素点的RGB值,通过GetMinMaxGrayValue()获取图像灰度值的两个最值,将其作为迭代算法的参数输入到GetIterationHresholdValue()中,之后输出得到的二值化的阈值。根据阈值T,二值化图像,将高于阈值的像素点的颜色设为黑色,即R=G=B=255,低于阈值的像素点的颜色设为白色,即R=G=B=0。经过灰度化和二值化处理后图像发生了很大的变化,第一张彩色为原图,第二张黑白图片为经过处理后的图像。图4-2原彩色图图4-3处理后的效果图原图与效果图如上所示,图4-2为原始彩色图,图4-3为经过预处理后的效果图。(3)降噪在经过上面两种图像处理方法处理后,可以发现除了文字是黑色的以外,图像中还有其他部分也是黑色,这样会影响对图片中文字的识别。图像去噪的目的是过滤掉影响识别效果的噪声,系统能更清晰的分辨图像的前景和背景。去噪后,图像的文本更加清晰,图像的质量更好。因此还需要对图片做进一步的处理。除文字外的黑色区域属于噪音,需要对其进行降噪处理。接下来尝试将上下两处的图像除去。在系统中调用reduce()方法来进行降噪。该方式是基于中值滤波原理实现的。将图像中任意像素点的周围八个像素点的灰度值进行排序,得到中间值,将中间值作为该像素点的灰度值。降噪后的效果如图4-4所示,可以将其与上图中只进行灰度化和二值化的图像进行对比,降噪后的噪点减少了很多,更利于进行文字识别。图4-4降噪后的效果图3、文字识别模块文字识别模块是整个系统的核心模块,识别预处理后的图像中的文字。图像识别模块的输入端是图像预处理后的新图像,输出的值是识别文本结果。在识别阶段,点击文字识别按钮,程序调用字符识别接口使用Tesseract引擎识别图像中的文字。Tesseract的识别过程的主要过程如下:首先分析连通区域,检测出文本所在的整个区域轮廓以及其子轮廓;然后,在上一步的基础上先集成块区域,在块区域的基础上,根据大致的字符轮廓得到文本行,再利用字符与字符之间的间隙分隔出单个字符;之后分析分隔出来的字符,利用自适应分类器对分隔出的所有的单词进行分析;最后获得识别结果并输出。在系统中的执行流程为,第一步将TessBaseAPI初始化,然后将预处理后的图片的路径和选择的语言作为参数传入到TessBaseAPI中,之后进行识别并且将识别后的字符串用UTF-8格式返回。在文字识别的核心模块中,用Tesseract来进行识别,利用JNI调用Tesseract接口,将Bitmap形式的图像数据作为输入端数据输入,输出的结果为识别后的String类型的字符。Tesseract是用C++语言开发实现的,在Android平台中是不能直接调用的,需要封装JavaAPI才能在Android中进行使用,因此需要使用Tesstwo项目,tess-two是TesseraToolsForAndroid的git分支,切集成了leptonica。同时由于tess-two是个NDK项目,Android平台需要安装NDK,没有NDK支持无法完成编译。在Android项目中,tess-two作为module被APP项目引用。apk文件在手机上运行之前,需要先确保在手机SD卡的根目录中已经存在文件名为tessdata的文件夹。系统运行前必须要创建tessdata的文件夹,因为在tess-two中封装的代码只能识别tessdata的文件夹下的语言包,然后将经过训练后的英文语言包eng和中文语言包chi_sim放到该文件夹下即可。在Resultactivity类中调用doOcr()方法,在该方法中用newTessBaseAPI()来初始化TessBaseAPI对象,接着将图像和语言包作为TessBaseAPI类的inti()方法的输入值,同时调用该方法,来实现文字识别的功能。在init()方法中需要确定语言包存储的位置,同时确定需要识别的语言表种类。chi_sim为中文语言包,英文语言包为eng,为提高文字识别的正确率也可以选择自己调整后的新的语言包。文字识别模块系统识别效果如图4-5所示,左边的图为英文的识别效果图,右图为中文的识别效果图。图4-5文字识别结果图4、用户界面模块(1)首页安卓应用程序通过调用MainActivity类中的setContentView()方法来加载Layout文件夹下的activity_main.xml布局文件展示视图。在该xml文件中用RadioGroup控件触发其监听器来实现文本类型的选择,文本类型包含中文书籍、中文其他、英文书籍、英文其他四种。同时将中文其他设置为默认选择,将其RadioButton的checked设置为true,通过选中的类型来给language变量赋值。预处理方法的操作用checkBox控件调用doPreTreatmnet()方法或者converyToGrayImg()方法来实现。相册选取、拍照和历史记录三个Button在一个LinearLayout中,在MainActivity类中分别设置相应的监听器。具体实现效果如图4-6所示。图4-6用户首页界面(2)文字识别界面安卓应用程序通过调用ResultActivity类中的setContentView()方法来加载Layout文件夹下的result.xml布局文件展示识别的结果视图。在该xml中利用id为tv_result的EditText控件调用setText()方法将识别结果显示在用户界面上。采用该控件,可以对文本进行编辑、复制等操作。分别用id为iv_selected和id为iv_treated的ImageView控件调用showPicture()方法来显示选取的原始图片和预处理后的图片。id为btn_copy的Button通过触发监听事件copyButtonListener来实现一键复制的功能。id为btn_back的Button通过触发其监听事件用于实现返回到首页的功能。本文的识别系统能对中文和英文图像进行文字识别,下面将展示了不同语言的文字识别结果图,图4-7为英文字符的识别的结果图,图4-8为中文字符的识别的结果图。图4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026摄影小白面试题及答案
- 2026十大面试题及答案
- 创新精神科护理模式
- 新技能解锁:网络信息素养提升试题及答案
- 旅游产业2026年市场需求与2026年发展方向考试及答案
- 2026年译林版初中历史事件评述试题及答案
- 2026年省市统考历史人物传记测试试题冲刺卷
- 遵义市村干部模拟考试试题及答案
- 小学数学归一归总问题|正反比例应用题全解
- 海底世界公开课
- 贵州省遵义市播州区2024-2025学年七年级下学期语文期末模拟试卷(含答案)
- 广告公司内部管理制度
- 国开电大本科《人文英语3》一平台机考总题库2026珍藏版
- 护理管理学试题200题
- (2026年)中心静脉导管护理培训课件
- 建筑工程安全管理论文
- 2025年成都经济技术开发区(龙泉驿区)区属国有企业专业技术人员公开招聘备考题库附答案
- 小学教师业务考试语文案例分析题(附答案)
- app代运营协议书
- 产品质量法解读
- 手术后疼痛评估与护理
评论
0/150
提交评论