# NumberStringsRecognizerInFinancialBills
[![LICENSE](https://img.shields.io/badge/License-Apache--2.0-blue.svg?style=flat-square)](LICENSE)
[![Tensorflow](https://img.shields.io/badge/Tensorflow-1.13.1-yellow.svg?style=flat-square)](https://github.com/tensorflow)
[![Python3](https://img.shields.io/badge/Python-3.7.2-green.svg?style=flat-square)](https://github.com/topics/python)
[![Version](https://img.shields.io/badge/Release-v3.2-red.svg?style=flat-square)](https://github.com/DolorHunter/NumberStringsRecognizerInFinancialBills/releases)
[![Size](https://img.shields.io/badge/Size-45MB-%23ff4D5B.svg?style=flat-square)](https://github.com/DolorHunter/NumberStringsRecognizerInFinancialBills/archive/master.zip)
[![Donate](https://img.shields.io/badge/Coffee-fee-fa69b4.svg?style=flat-square)](https://www.paypal.me/dolor059)
# 目录
__[演示效果图](#演示效果图)__
__[开发人员名单](#开发人员名单)__
__[项目简介](#项目简介)__
__[项目安装说明](#项目安装说明)__
__[设计方案](#设计方案)__
* 第一部分 - 手写单数字符识别
* 第二部分 - 手写数字串识别
* 第三部分 - 截取金融票据中手写数字所在的位置区域
* 第四部分 – 交互性GUI设计
## 演示效果图
![](Demo.gif)
图 2-1 运行效果图
用户首先通过”浏览文件”按钮选择扫描获得的金融票据图片. 程序就能够提取出金融票据图片中的日期, 金额等信息和图片路径信息显示在屏幕上. 程序还设置了帮助按键,使用者通过帮助按钮获得帮助.
**由图可见票据的日期为19年06月22日(062219), 程序可以准确的识别; 票据的金额为HK$ 65535, 也能够精准的识别出来, 并显示在图片下方.**
## 开发人员名单
[DolorHunter](https://github.com/DolorHunter)
[MarshtompCS](https://github.com/MarshtompCS)
## 项目简介
![](Image/001.png)
图 1-1 BARCLAYS支票样例
金融票据单中常有很多的手写数字, 对于这些手写数字只能依靠人工识别输入计算机, 费时费力. 因此我们利用了卷积神经网络技术(CNN), 用训练好的模型对预处理后的金融票据中的数字进行识别. 这样就不需要人工识别手写数据, 再录入计算机. 这个技术不仅实用, 更具备一定的商业意义.
程序能够对数字/数字串/金融票据中的数字进行精确识别, 经过nmist测试集测试, 单子符识别正确率为98.08%, 数字串识别正确率为98.08%^n. 不仅如此, 项目的交互性界面设计使其具有极易上手的特点使得本项目具备更多的科研和商用意义.
## 项目安装说明
涉及模块:
- [x] Tensorflow 1.0
- [x] Python 3
- [x] PIL
- [x] Numpy
- [x] Tkinter
下载命令:
$ git clone https://github.com/DolorHunter/NumberStringsRecognizerInFinancialBills.git
如何运行? 运行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型变量进行切换. 将数字串的个数和位置信息存储于一维数组. 利用一维数组的数据进行中值切片.
![](Image/003.png)
图 4-1 为输入的图像(18)(预处理 -切片前)
由图4-1可见图像已经经过了反相/去噪点/变形的步骤, 图片元素只有0和255, 尺寸为28*28. 但由于图像(18)还没有经过切片, 所以图中为多个数字符.(1和8).
![](Image/004.png)
图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. 第三部分 - 截取金融票据中手写数字所在的位置区域
通过对金融票据进行预处理,将手写数字待识别区域截取出来。再将截取出来的部分传入数字串识别模型进行计算。
金融票据固定位置通常会填写固�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
资源包含文件:设计报告word+项目源码及数据 金融票据单中常有很多的手写数字, 对于这些手写数字只能依靠人工识别输入计算机, 费时费力. 因此我们利用了卷积神经网络技术(CNN), 用训练好的模型对预处理后的金融票据中的数字进行识别. 这样就不需要人工识别手写数据, 再录入计算机. 这个技术不仅实用, 更具备一定的商业意义. 实际测试中, 经过训练的卷积神经网络对于单个手写数字的识别成功率为 98.08%, 对于 n 位数字串的识别率为 98.08%^n. 具备非常高的的精确性和鲁棒性. 而不使用卷积神经网络对于单个手写数字进行识别的成功率仅为 14.17%. 虽然有其他客观因素影响结果, 但是可以很清楚的发现使用了卷积神经网络识别技术后, 预测的准确率有了很大的提升. 详细介绍参考:https://biyezuopin.blog.csdn.net/article/details/122624836?spm=1001.2014.3001.5502
资源推荐
资源详情
资源评论
收起资源包目录
基于Python的卷积神经网络识别金融票据中的数字串.zip (67个子文件)
fidigitidentification
app_bash.py 5KB
README.md 9KB
app_num_ch.py 2KB
bin
README.md 1KB
test.py 1KB
backward.py 3KB
docs
_config.yml 186B
README.md 10KB
Image
004.png 41KB
001.png 257KB
003.png 53KB
002.png 708KB
Demo.gif 1.18MB
LICENSE 1KB
model
mnist_model-148501.data-00000-of-00001 3.03MB
mnist_model-148001.meta 58KB
mnist_model-149501.data-00000-of-00001 3.03MB
mnist_model-149001.meta 58KB
mnist_model-148001.data-00000-of-00001 3.03MB
mnist_model-149501.meta 58KB
mnist_model-148501.meta 58KB
mnist_model-150001.meta 58KB
mnist_model-148001.index 447B
mnist_model-150001.data-00000-of-00001 3.03MB
mnist_model-149001.index 447B
mnist_model-149501.index 447B
checkpoint 289B
mnist_model-150001.index 447B
mnist_model-149001.data-00000-of-00001 3.03MB
mnist_model-148501.index 447B
pic
5.png 195KB
hk_check.jpg 6.61MB
443.png 533KB
3.png 205KB
108.png 515KB
7039.png 1.19MB
65535.png 857KB
0.png 200KB
4.png 209KB
9.png 201KB
20770123.png 1.22MB
1080.png 572KB
082509.png 233KB
043119.png 222KB
8080.png 707KB
7.png 496KB
1911.png 668KB
8.png 220KB
6.png 205KB
042219.png 225KB
1.png 172KB
2.png 182KB
__pycache__
backward.cpython-37.pyc 2KB
forward.cpython-37.pyc 1001B
app_num_ch.cpython-37.pyc 2KB
app_num_str.cpython-37.pyc 3KB
app_bash.cpython-37.pyc 3KB
app_gui.cpython-37.pyc 4KB
test.cpython-37.pyc 2KB
forward.py 1KB
设计报告.docx 2.08MB
app_gui.py 4KB
data
t10k-images-idx3-ubyte.gz 1.57MB
t10k-labels-idx1-ubyte.gz 4KB
train-images-idx3-ubyte.gz 9.45MB
train-labels-idx1-ubyte.gz 28KB
app_num_str.py 4KB
共 67 条
- 1
资源评论
- weixin_474429832022-12-21资源不错,很实用,内容全面,介绍详细,很好用,谢谢分享。
- 华为OD面试指南2023-04-10终于找到了超赞的宝藏资源,果断冲冲冲,支持!
shejizuopin
- 粉丝: 9264
- 资源: 1288
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功