基于卷积神经网络识别金融票据中的文字信息(计算机毕设完整代码可直接运行)

news2025/4/12 6:42:02

结果展示:

用户首先通过”浏览文件”按钮选择扫描获得的金融票据图片. 程序就能够提取出金融票据图片中的日期, 金额等信息和图片路径信息显示在屏幕上. 程序还设置了帮助按键,使用者通过帮助按钮获得帮助.

由图可见票据的日期为 19 年 06 月 22 日(062219), 程序可以准确的识别; 票据的金额为 HK$ 65535, 也能够精准的识别出来, 并显示在图片下方.

项目简介


图 1-1 BARCLAYS 支票样例

金融票据单中常有很多的手写数字, 对于这些手写数字只能依靠人工识别输入计算机, 费时费力. 因此我们利用了卷积神经网络技术(CNN), 用训练好的模型对预处理后的金融票据中的数字进行识别. 这样就不需要人工识别手写数据, 再录入计算机. 这个技术不仅实用, 更具备一定的商业意义.

程序能够对数字/数字串/金融票据中的数字进行精确识别, 经过 nmist 测试集测试, 单子符识别正确率为 98.08%, 数字串识别正确率为 98.08%^n. 不仅如此, 项目的交互性界面设计使其具有极易上手的特点使得本项目具备更多的科研和商用意义.

项目安装说明

涉及模块:

Tensorflow 1.0

Python 3

PIL

Numpy

Tkinter

如何运行? 运行 app_gui.exe 即可启动.

设计方案


金融票据单中常有很多的手写数字, 对于这些手写数字只能依靠人工识别输入计算机, 费时费力. 因此我们利用了卷积神经网络技术(CNN), 用训练好的模型对预处理后的金融票据中的数字进行识别. 这样就不需要人工识别手写数据, 再录入计算机. 这个技术不仅实用, 更具备一定的商业意义.

为什么要用卷积神经网络(CNN)进行识别呢?

实际测试中, 经过训练的卷积神经网络对于单个手写数字的识别成功率为 98.08%, 对于 n 位数字串的识别率为 98.08%^n. 具备非常高的的精确性和鲁棒性. 而不使用卷积神经网络对于单个手写数字进行识别的成功率仅为 14.17%. 虽然有其他客观因素影响结果, 但是可以很清楚的发现使用了卷积神经网络识别技术后, 预测的准确率有了很大的提升.

因此, 我们决定使用卷积神经网络作为神经网络模型.

项目设计分为四个部分

第一部分 是卷积神经网络训练的手写单个数字符识别模型.

第二部分 是对于手写数字串的反相/去噪声/拆分切片/变形的预处理, 处理后得到多个单数字符传入第一部分.

第三部分 是对于金融票据中手写数字所在的位置区域进行截取. 截取后把图片传入第二部分.

第四部分 是对于第三部分的交互性提升. 使用了 Tkinter 制作了一个 GUI. 可以通过 GUI 的按钮和图片进行可视化的操作.

  • A. 第一部分 - 手写单数字符识别

手写单数字符识别的方案参照了主流的神经网络设计八股(准备, 前传, 反传, 迭代)进行总体设计.

通过调用 tensorflow 的库函数来实现神经网络的参数优化和模型训练以达到识别数字的功能. 我使用 mnist 数据集对模型参数进行训练. mnist 数据集有超过 60000 个标记样本以供训练. 同时 mnist 数据集的可靠性也很高, 很适合作为项目的数据集.

神经网络的模型通过喂入 mnist 数据集中的样本来训练, 通过前向传播和反向传播的计算, 逐渐的修改模型. 其中使用了如: 滑动平均值 ema, 正则化损失函数防止过拟合, 指数衰减学习率等高效算法, 让模型修改的更加贴合实际情况.

训练产生的模型将储存于 model 目录下. 模型实际训练时常约 30min, 为方便多次分时训练和后续增加的训练, 因此使用了断点续训的方式. 测试应用的图片文件储存与 pic 目录, 为手写数字(白底黑字), 用来测试模型的识别的准确性, 也可以根据实际情况上网下载图片进行识别测试.

通过 app_num_ch.py 文件调用已经训练好的模型对自定义的单数字符图片进行识别. 经过测试, 识别成功率超过了 98.08%, 超过了预期的设计构想. 方案成功.

  • B. 第二部分 - 手写数字串识别 通过对手写数字串进行预处理,使手写数字串转化为多个单数字符。再将单数字符分别传入单数字符识别模型进行计算。

预处理:

a) 反相, 去噪声:

预处理中将图片黑白颠倒, 并去除噪声, 故可识别的图片为白底黑字, 符合日常使用需求.

b) 切片:

假定数字串的每个数字之间存在空隙. 图片从左到右逐列识别, 当图片开始出现黑色时, 认为单数字符出现, 标记该列为出现单数字符的列, 并储存; 当图片全列为白 时, 认为单数字符结束, 标记该列为单数字符消失的列, 并储存. 为了便于说明, 将识别黑色(出现)称为黑检测, 将识别白色(结束)称为白检测. 黑白检测通过 bool 型变量进行切换. 将数字串的个数和位置信息存储于一维数组. 利用一维数组的数据进行中值切片.

图 4-1 为输入的图像(18)(预处理 -切片前)

由图 4-1 可见图像已经经过了反相/去噪点/变形的步骤, 图片元素只有 0 和 255, 尺寸为 28*28. 但由于图像(18)还没有经过切片, 所以图中为多个数字符.(1 和 8).

图 4-2 为输入的图像(18)(切片)

由图 4-2 可见图像经过了切片.原本存在于 12-23 列的’8’存储为新的图像, 列数改变为 1-12.

c) 小图变形:

对于一维数组中的信息进行提取, 将每一个单数字符存储至一个二维数组. 将二维数组变形成 2828, 再将二维数组变形成 1784 的数组, 传入模型进行识别. 小图输入单子符识别模型

d) 输出

输出预测的手写数字串结果. 理论识别率为 98.08%^n.

通过 app_num_str.py 文件调用对手写数字串进行预处理,使手写数字串转化为多个单数字符。再将单数字符分别传入单数字符识别模型进行计算。用已经训练好的模型对自定义的单数字符图片进行识别. 经过测试, 识别成功率超过了 98.08%^n.

  • C. 第三部分 - 截取金融票据中手写数字所在的位置区域

通过对金融票据进行预处理,将手写数字待识别区域截取出来。再将截取出来的部分传入数字串识别模型进行计算。

金融票据固定位置通常会填写固定内容. 因此, 我们可以通过对于某一类的票据设定固定的截取位置就能对这一类票据进行处理. 经过大量测试, 鲁棒性较强.

经过截取, 图片大部分的信息都可以舍弃, 因此可以获得很高的运行效率. 测试图片 hk_check.jpg(6.61MB)截取后只剩下两个 0.1MB 左右的图片. 节省了 96.974% 的空间. 将这两个 0.1MB 左右图片输入第二部分的函数, 大大提升了运行速度.

  • D. 第四部分 – 交互性 GUI 设计

经过以上三个步骤已经能对于金融票据的图片进行识别了. 但是, 这样的程序不具备交互性和可视化程度, 不能让用户简单容易的使用. 因此, 我们设计了项目的第四部分, 交互性 GUI 设计.

我们选用了 Tkinter 作为 GUI 设计的工具. 经过了几天的学习和设计, 我们做出了具备初步交互性要求的 GUI.

GUI 首先通过”浏览文件”按钮选择扫描获得的金融票据图片, 就能够把金融票据的图片和路径信息显示在屏幕上. 同时通过程序提取出金融票据中的日期, 金额等信息, 并将这些信息显示在图片的下方. 并且, 程序还设置了帮助按键,使用者通过帮助按钮获得帮助.

完整代码:

https://download.csdn.net/download/qq_38735017/87383433

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/162128.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CMMI之需求管理

需求管理(Requirement Management, RM)的目的在客户与开发方之间建立对需求的共同理解,维护需求与其他工作成果的一致性,并控制需求的变更。需求管理过程域是SPP模型的重要组成部分。本规范阐述了需求管理过程域的三个主要规程&am…

低代码平台是技术开发的未来主流吗?

2022年9月27日16:49:21 这个事情我想了很久,最终的结论是:低代码平台只会一些领域平台的部分功能模块的标配,不会成为技术主流。 部分代表性例子: 1,低代码平台很早就有了,比如Visual Basic 6.0 ,delphi这些…

电脑重装系统后每次都要选择系统怎么办

电脑重装系统是件非十分平常的事情,当电脑出现故障或卡顿不能解决,即可采取重装系统来修复。不过,有些用户遇到系统重装后每次开机都要选择系统,影响到电脑正常使用,想要解决这个问题,只要关闭引导配置就可…

【pandas】15 pandas数据结构

【pandas】15 pandas数据结构 2023.1.13 总结来自https://mofanpy.com/tutorials/data-manipulation/pandas/ 包括pandas数据结构Series/DataFrame;数据选取分类查询等内容15.1 为什么需要pandas 前面讲了numpy,我们发现,numpy主要用途就是对同一类数据进行处理&a…

多节点Linux环境打造

目录 一、环境准备 1. CentOS镜像下载 2. VMware下载 二、 安装操作系统 1. 配置虚拟机 2. 安装CentOS操作系统 3. 网络配置 4. 多节点打造 5. 节点网络互通 6. 关闭防火墙服务 7. 修改默认主机名 8. 关闭 SELinux 服务 9. 安装常用软件 一、环境准备 1. CentOS镜…

电脑重装系统后键盘失灵解决方法步骤

手提电脑重装系统后键盘失灵怎么办呢?众所周知,联想小新Air 13 Pro保持经典的黑色外观,凭借坚固和可靠的特性得到了很多用户的认可。有网友发现联想小新Air 13 Pro手提电脑重装系统后键盘会失灵,那么小编把手提电脑重装系统后键盘失灵解决方法分享给大家。 工具/原…

Vue声明式导航 编程式导航、导航守卫、axios拦截器

一、声明式导航 & 编程式导航 1. 声明式导航&#xff1a;以超链接方式实现的页面跳转&#xff0c;就是声明式导航 < a href‘url’> 链接文本或图像 < /a >< router-link to‘url’ > 链接文本或图像 < /router-link >2. 编程式导航&#xff1a;通…

录屏软件哪个好?电脑录屏软件排行榜推荐

你是不是还在为选不到合适的录屏软件而苦恼&#xff1f;市面上录屏软件种类繁多&#xff0c;功能参差不齐确实不好选择。录屏软件哪个好&#xff1f;怎样才能找到适合自己的录屏软件&#xff1f;不用焦虑。今天小编给大家推荐3款电脑录屏软件排行榜前列的录屏软件&#xff0c;每…

day37【代码随想录】贪心算法之划分字母区间、合并区间、单调递增的数字、买卖股票的最佳时机含手续费、监控二叉树

文章目录前言一、划分字母区间&#xff08;力扣763&#xff09;二、合并区间&#xff08;力扣56&#xff09;三、单调递增的数字&#xff08;力扣738&#xff09;四、买卖股票的最佳时机含手续费&#xff08;力扣714&#xff09;五、监控二叉树&#xff08;力扣968&#xff09;…

1.14 IIC总线实验

一.IIC总线&#xff1a; 1.同步半双工串行总线&#xff0c;用于同一个开发板两个芯片之间的通信 2.有两根信号线&#xff0c;一根SDA,一根SCL 3.IIC总线需要外接两个上拉电阻&#xff0c;使空闲状态保持高电平 4.IIC总线支持多主机多从机模式&#xff0c;一般采用单主机多从…

STM32外部中断解析

文章目录前言一、外部中断是什么二、STM32F103的外部中断三、外部中断的中断号四、HAL库的外部中断初始化流程总结前言 本篇文章将带大家了解STM32F103的外部中断。 一、外部中断是什么 外部中断是单片机实时地处理外部事件的一种内部机制。当某种外部事件发生时&#xff0c…

数组名的意义

数组名只有单独放在sizeof内部以及放在&后才代表整个数组的地址。其余情况数组名都表示数组首元素地址。 之前我们说过用sizeof(a)计算的是整个数组的大小&#xff0c;现在我们知道其中的原因了。由于sizeof里的数组名a表示整个数组的地址&#xff0c;故sizeof(a)求的是整…

Android10以上系统Audio音频遇到播放无声时的分析方法

​商务合作 2023年招聘 2023年逆向分析资料汇总 推荐阅读 Android Audio音频系统 Android Audio音频系统之深入浅出 Android Framework/驱动/内核中高级工程师 ​Android10以上系统Audio音频遇到播放视频无声时的分析方法 干货|Android APP应用工程师转Framework工程师(…

51单片机存储结构

之前概要介绍了8151微控制器的结构&#xff08;也就是51单片机&#xff09;。相比微处理器&#xff0c;微控制器的区别之一是在一个芯片上有程序存储器(RAM)和数据存储器(RAM)。存储区是微控制器非常重要的内容。 本文就介绍一下8051的存储结构。包括存储器的组织、处理器对存储…

VTK-Tessellator Subdivision

前言&#xff1a;本博文主要研究Tessellator 的Subdivision&#xff0c;对vtk中的所有相关接口进行研究&#xff0c;并找出最优的解决方法。 GeometricObjects中vtkTessellatorFilter的应用实例 待研究对当前的Subdivision进行优化。 vtkTessellatorFilter 位置&#xff1a;…

Docker容器数据卷与数据卷容器

文章目录什么是容器数据卷使用数据卷使用 docker 安装 mysql匿名和具名挂载数据卷容器什么是容器数据卷 Docker理念回顾 将应用和运行的环境打包形成容器运行&#xff0c;运行可以伴随着容器&#xff0c;但是我们对于数据的要求&#xff0c;是希望能够 持久化的&#xff01; 就…

【寒假每日一题】DAY.6 有序序列的合并

牛客网例题&#xff1a;点我做题 描述 输入两个升序排列的序列&#xff0c;将两个序列合并为一个有序序列并输出。数据范围&#xff1a; 1 ≤ n&#xff0c;m ≤ 1000&#xff0c;序列中的值满足0≤val≤30000输入描述&#xff1a; 输入包含三行&#xff0c;第一行包含两个正整…

微信小程序开发起步

一、小程序与普通网页开发的区别 1&#xff09;运行环境不同。网页运行在浏览器环境中&#xff0c;小程序运行在微信环境中。 2&#xff09;API不同。由于运行环境不同&#xff0c;所以小程序中无法调用DOM和BOM的API&#xff0c;但是小程序可以调用微信环境提供的各种API&am…

zabbix的安装部署,一看就会

目录 1、系统组成 2、采集模式 3、监控类型 4、相关术语 5、安装部署 1、系统组成 2、采集模式 监控系统数据采集的工作模式可以分为 被动模式&#xff08;从服务器端到客户端采集数据&#xff0c;对应的英文单词是pull&#xff09; 主动模式 &#xff08;客户端主动上报…

java基于springboot的新生报到系统app新生报到安卓app新生入学报到小程序加论文

简介 本项目主要是新生报到系统&#xff0c;包含的新生入学流程的功能&#xff1a;新生可以在app里提交预报到日期确认报到&#xff0c;查看自己的学费缴费记录&#xff0c;更改自己的银行卡号&#xff0c;查看课表&#xff0c;查看寝室&#xff0c;查看自己的专业班级等个人信…