摘 要
科技与互联网快速发展背景下,文字作为信息交流核心展现丰富多样性传统的纸质书写不再是信息流传的唯一途径,街道指示牌,电子显示屏以及广告牌等新媒介,大量承载着丰富的文字信息,这些信息常以图像形式出现在我们周边的环境里。于是,利用计算机技术达成对图像里文字内容的自动识别,该技术渐渐成了推进社会生活便捷化的关键所在。
本文针对计算机视觉领域的目标检测和识别,尤其是自然图像中文字要素检测识别的问题,鉴于图像文字由于多角度、字体多样以及复杂的背景等特性,整个识别过程包括对文字区域识别和对文字内容的分析过程两部分。文中相应介绍相关理论和知识,包括机器学习的基本概念,深度学习的基本知识和神经网络模型。本文基于Tensorflow框架、Django框架和MySQL数据库实现一种高效的识别系统的中文字符识别系统,该系统解决复杂场景中文手写体字符和印刷体字符的识别问题,以卷积神经网络为主要模型进行多卷积池化和全连接完成字符的特征提取与分类,Tensorflow框架提供模型的训练和推理优化,通过数据增强(旋转、对比度变化)来强化模型的泛化能力和应用迁移学习在较小规模标注数据下获得了较好的识别准确率。
目 录
第1章 绪论
1.1 研究背景与意义
伴随着信息时代的发展,OCR技术作为实现信息数字化、智能化的重要手段之一,成为了研究的焦点。中文由于是世界上最常用的语言之一,而实现中文文字识别所面临的难题在于:首先汉字字数比较多(《通用规范汉字表》收录的汉字字数为8105),字形又各不相同(例如“未”与“末”);其次因为实际中文应用场景中可能存在不同类型的中文,包括各种字体(手写体、印刷体和艺术字等)和不同光照条件以及杂乱的背景干扰等带来的影响,所以传统的文字识别技术的识别精度及鲁棒性远远不能达到实用阶段。传统的基于手定义的特征(如边沿、投影、笔画分割)及模板匹配的方法在实现中文文字识别过程中的缺点,尤其是在手写体及非规范场景下,对汉字识别准确度的受限。
该文围绕TensorFlow框架深度学习平台、Django框架Web前端和MySQL数据库构建完整的中文文字识别系统。同时,提出有效优化卷积神经网络模型结构、强化数据增强方法,在数据有限的情况下提升模型效果;采用Django完成前后台分离结构,在完成网页上传图片识别实时结果显示的同时,做到可视化展示;通过MySQL进行系统用户数据及识别记录的储存,保证系统的高效率及扩展性。目的在于实现深度学习与传统Web技术融合方面的研究探讨,从高准确度及高实用性方面,将中文文字识别技术引入实际工作当中,满足用户对中文文字识别技术在教育、传统文化传承、办公等领域中的应用需求。
1.2 国内外研究现状
2014年,浙江大学硕士研究生林媛在其学位论文《中国书法字识别算法研究及应用》中阐述了一种基于检索的书法字识别方法,能高效地识别楷体、篆体、行书等不同书法字体的单个书法字手写图像。上述研究成果给书法字体识别提供了较好的理论依据,但是并没有给出一种识别完整手写书法作品的图像的方法。目前,对完整手写书法作品图像的识别还面临很多挑战,因此本文算法将图像处理技术和深度学习方法相结合,从而实现完整手写书法作品图像书法字体和书法作品的识别,为大众学习、欣赏书法提供一定的帮助和参考。
1.3 研究内容
本文主要着眼于基于深度学习的中文字符识别系统构建,主要包括算法开发和系统实施2部分。在算法部分,采用基于TensorFlow框架的卷积神经网络模型进行设计,并从对汉字的结构特点进行网络设计:引入多尺度卷积层提高局部特征的表达能力,以及批归一化层和Dropout层,缓解过拟合问题。结合卷积循环神经网络(ConvolutionalRecurrentNeuralNetwork,CRNN)框架结构将卷积神经网络得到的视觉特征融合在一起,实现端对端的汉字序列识别。利用数据增强的方法(随机旋转、随机亮度、弹性变形),对数据进行扩充训练集训练模型,在目标场景下做微调。
在框架构建方面,用Django实现Web的后端开发,构造RESTfulWeb服务API,实现用户的图片上传、模型选择、结果输出等功能;在前端,实现图片的实时可视化、识别结果可视化;在后端利用Celery构建异步任务,对输入的识别任务进行异步处理,提高处理高并发的功能性响应效率。利用MySQL数据库实现关系表,通过创建表之间的相互关联实现用户信息、历史记录、模型版本等相关数据的表结构设置,并对表的特征字段进行索引优化和查询的缓存,保证较快的读写速度。
第2章 相关理论与技术基础
2.1 深度学习算法
卷积神经网络主要是为了图像数据而提出的一种神经网络结构。计算机视觉的大部分都是采用卷积神经网络的模型,无论是对于图像识别,还是目标检测与分割的问题,几乎所有相关的学术比赛和商业使用,都是采用了这种卷积网络模型。
2.2 Django框架
在模板层(Template)中实现价格分布可视化图形交互,Django模板引擎与echarts进行联动渲染实现;在视图层(View)中利用分层架构设计实现,对外提供RESTful接口调用旅游APP,对外响应时间在500ms以内。最终系统上线后预测正确率达到80%以上,较传统方法高出20个百分点。
第3章 系统分析
3.1 需求分析
本功能需求主要包括用户、图像、模型、性能和数据安全五部分,其中,针对用户的管理需实现注册登录、用户权限和用户认证功能,保证用户的不同访问权限;图像的管理包括针对图像的上传、实时识别与查询历史记录,其中,图像识别结果的准确率要保证在80%以上,并输出结构化的文本信息;数据安全性要求用户上传的图像(敏感图像)和图像识别结果进行加密存储;模块化要求系统便于可进行扩展,可根据需求的不断丰富,不断增加新的字符种类;要求整个系统的精确识别与可操作的前端和数据处理的高效能、性能高。
3.2 可行性分析
3.2.1 技术可行性
3.2.2 经济可行性
3.2.3 社会可行性
3.3 用例分析
3.3.1 登录注册功能
根据表3.1列出的测试用例描述,用户可以在系统登录页面输入正确的用户名和密码,以完成登录。
表3.1 登录功能测试用例
描述项目 | 说明 |
用例名称 | 系统用户登录 |
标识符 | 201 |
用例描述 | 阐述用户登录流程 |
参与者 | 已经注册成功的用户 |
前置条件 | 用户名和密码输入正确的才能继续 |
后置条件 | 在后续步骤中,如登录成功,跳转到系统界面 |
基本操作流程 | 基础步骤操作流程包括登陆系统前端页面,输入用户名和密码以确认身份,然后点击登录 |
分支流程 | 如果登录出现错误,就无法进入系统 |
异常流程 | 由用户名或密码错误,所以无法进行正常的操作 |
根据表3.2中的描述,用户可通过系统注册页面输入用户名和密码来完成注册操作,系统中尚未注册的用户可利用该功能注册。
表3.2 注册功能测试用例
描述项目 | 说明 |
用例名称 | 访客注册 |
标识符 | 201 |
用例描述 | 这个测试用例是新用户注册功能,访客注册新的账号的所有步骤 |
参与者 | 未注册的访客 |
前置条件 | 输入未被注册的用户名 |
后置条件 | 注册成功自动跳转至登录页 |
基本操作流程 | 打开系统的注册页面。填写用户名和密码,提交请求 |
续表3.2 注册功能测试用例
描述项目 | 说明 |
分支流程 | 注册页面无法访问 |
异常流程 | 输入已注册用户名,系统提示重复并阻止注册 |
3.3.2 用户管理功能
按照表3.3中的测试用例描述,登录系统的用户可以在用户管理界面管理其账号和密码信息。
表3.3 用户管理功能测试用例
描述项目 | 说明 |
用例名称 | 用户账户信息维护 |
标识符 | 201 |
用例描述 | 执行账户信息及密码修改操作 |
参与者 | 通过认证的注册用户 |
前置条件 | 系统有效登录状态 |
后置条件 | 显示修改操作完成反馈信息 |
基本操作流程 | 访问用户管理界面,填写并提交信息表单 |
分支流程 | 密码输入错误、原始认证信息不匹配场景处理 |
异常流程 | 新密码与二次确认内容不一致导致操作终止 |
3.3.3 文字识别功能
表3. 4展示了用户在系统中执行文字识别功能的实例,登录后,用户可以查阅到系统内的文字识别结果。
表3.4 文字识别功能测试用例
描述项目 | 说明 |
用例名称 | 文字识别 |
标识符 | 201 |
用例描述 | 执行文字识别界面访问及操作 |
参与者 | 通过身份验证的系统用户 |
前置条件 | 数据源配置完成且可用 |
后置条件 | 显示识别结果 |
续表3.4 文字识别功能测试用例
描述项目 | 说明 |
基本流程 |
|
异常流程 | 数据源链接中断导致界面无数据渲染 |
3.4 非功能性需求分析
指标性能:是系统在各种负荷条件下的反应速度和处理力。当有多用户同时进行数据爬取、数据检索和预测等任务时,系统能够比较快速的返回相应结果,以提升用户体验;另外,系统对于处理文字图像数据需要具备优秀的性能和稳定性。
系统可靠性和可维护性要求系统在无故障状态下能够继续运行,即48小时内可连续正常运行,尽管有局部故障但可以继续执行功能并完成任务以及恢复正常运行。数据信息能够进行有效地储存和备份,实现信息的长期可靠存储和保存。
完整性是对系统数据访问控制与保密性要求。为防止SQL注入、XSS等攻击带来的数据泄漏和修改,在系统中需要加密的方式来保护数据信息的隐私性[7]。同时,系统要具有严格的访问控制和认证系统,仅授权用户访问和操作数据,以此保证系统的安全和数据的隐私性。
4.2 功能模块设计
通过前文的需求分析得到,基于深度学习的中文识别系统的总体设计模块如图4.2所示。
图4.2 系统功能模块图
4.3 相关功能设计
4.3.1 登录操作流程
系统安全性的首要步骤是用户在尝试访问系统时,必须通过登录界面输入其登录信息。如图4.3所示。
图4.3 登录操作流程图
4.3.2 图片识别功能设计
图4.4 图像检测流程图
4.4 数据库设计
下面为本系统核心数据库表的E-R关系总图如图4.5所示。。
图4.5 系统总E-R关系图
根据上节基于深度学习的中文识别系统中提取的E-R关系图进行建表。这里列举几个主要数据表结构的设计。例如,用户表用以存放系统中用户的基本信息与账户有关的数据,一行对应一个用户,一列对应一个用户属性。图片信息表用以存放上传图片的基本信息,见表4.1。
表4.1 用户表
名称 | 数据类型 | 长度 | 允许空值 | 键 | |
1 | id | int | 0 | N | Y |
2 | password | varchar | 128 | Y | N |
3 | last_login | datetime | 0 | Y | N |
4 | is_superuser | bool | 0 | N | N |
5 | first_name | varchar | 150 | N | N |
6 | last_name | varchar | 150 | N | N |
续表4.1 用户表
编号 | 名称 | 数据类型 | 长度 | 允许空值 | 键 |
7 | | varchar | 254 | N | N |
8 | is_staff | bool | 0 | N | N |
9 | is_active | bool | 0 | N | N |
10 | date_joined | datetime | 0 | N | N |
11 | username | varchar | 50 | N | N |
12 | gender | varchar | 1 | N | N |
13 | phone_number | varchar | 20 | N | N |
14 | avatar | varchar | 100 | N | N |
表4.2 图片信息表
字段名 | 数据类型 | 长度 | 允许空值 | 键 |
id | integer | 0 | N | Y |
file_name | varchar | 200 | Y | N |
file_url | varchar | 250 | Y | N |
check_result | varchar | 100 | N | N |
第5章 系统实现
5.1 文本识别实现
5.1.1 实现思路
如图5.1所示,首先基于改进的神经网络网络对汉字进行定位,将传统的目标检测定位框的回归任务简化为中心点预测问题,即在Backbone中加入坐标注意力机制让网络聚焦汉字结构,在定位预测中直接输出文字中心点,同时针对密集文字场景下的中心点重合问题使用了椭圆形高斯热图取代原有坐标回归,达到较好的处理效果。
图5.1 对每个字进行定位实现思路图
第二层为基于MobileViT的轻量化检测网络,输入第一层提取出的字符框图像。在局部卷积特征的基础上结合全局的注意力机制,使该模块可以对包含篆、隶、楷、行四种字体的多风格汉字数据集进行如5.2所示的识别:
图5.2 对每个字进行分类实现思路图
5.1.2 数据来源
该数据全都是合成数据,数据未使用外部真实数据。通过自动合成汉字图,并结合不同的干扰元素,合成更多的训练样本,具体包括:从文件3500.从txt文件中得到常用的3500个汉字。如图5.3:
图5.3 trainImg0.npy和trainLab0.npy
5.1.3 图像处理
本系统在数据预处理阶段采用三阶段标准化流程,有效提升模型对汉字特征的提取效率[9]。图像处理流程图5.4所示。
图5.4 图像处理流程图
首先执行色彩空间转换,通过OpenCV的cv2.COLOR_BGR2GRAY将RGB三通道图像转换为单通道灰度图,此举在保留汉字笔划拓扑结构的同时,将数据维度从H×W×3压缩至H×W×1,降低62.5%的存储开销。结果如图5.5所示:
图5.5 测试样本图1
其次进行自适应二值化处理,采用固定阈值127实施颜色反转。通过cv2.threshold函数配合THRESH_BINARY_INV参数,将灰度图中[0,127]区间像素映射为255(纯白),(127,255]区间置为0(纯黑),形成高对比度特征表达。结果如图5.6所示:
图5.6 测试样本图2
最后执行归一化操作,将二值图像素值由{0,255}线性映射至{0,1}区间。这个过程通过使用np_img除以255来实现,将输入数据分布限制在Sigmoid激活函数的敏感区,从而有效防止梯度消失问题。如图5.7归一化处理结果。
图5.7 归一化处理结果
5.1.4 图像裁剪
如图5.8所示:
图5.8 裁剪前后对比
5.1.5 模型构建
构建训练第一个模型:预测汉字中心坐标。
设计第二个网模型完成字识别任务。
5.1.6 模型评估
从训练损失及训练正确率曲线可以看出模型在训练步数为16k时趋于收敛,损失从4.0平稳降至0.2以下,呈现出指数级递减的趋势,即参数的更新方向是合理的。如图5.9。
图5.9 形近字(如“未-末”)对比图
5.1.7 结果呈现
中文识别系统的实现基于深度学习双阶段架构,具体流程如下:
图像预处理阶段
汉字定位检测
字符分类识别
系统通过Django中间件实现异步处理,平均响应时间低于800ms。识别结果存入ImageCheck模型并返回前端,利用AJAX动态更新检测结果[13]。识别展示如下图5.10所示。
图5.10 展示结果
5.2 登录注册实现
登录页前端登录表单(login.html)通过POST方式输入用户名、密码与登录类型(用户或管理员)后,后端利用Django中的AuthenticationForm提供验证的方法进行验证。登录页面如图5.11所示。
图5.11 登录界面图
5.3 后端管理实现
该后台数据管理系统基于Django Admin模块构建,主要实现四大核心功能:
数据可视化展示
图片数据管理
检测结果追踪
系统深度集成
批量处理:允许后台管理人员选择记录批量导出(CSV/Excel)、批量删除等。后台程序每天最多可处理检测记录数量为10万+记录,通过列表使用参数list_per_page分页显示50条记录,解决高并发访问的渲染效率。后期可通过自定义get_queryset实现对检测结果分级权限控制。后台管理页面图见图5.12-5.14:
图5.12 首页后台管理
图5.13 用户后台管理
图5.14 图片后台管理