向AI转型的程序员都关注了这个号????????????

机器学习AI算法工程   公众号:datayx

光学字符识别技术(OCR)目前被广泛利用在手写识别、打印识别及文本图像识别等相关领域。小到文档识别、银行卡身份证识别,大到广告、海报。因为OCR技术的发明,极大简化了我们处理数据的方式。

同时,机器学习(ML)和卷积神经网络(CNN)的快速发展也让文本识别出现了巨大的飞跃!我们在本文的研究中也将使用卷积神经网络CNN技术来识别零售店的纸质票据。为了方便演示,我们本次将仅采用俄语版的票据进行测试。

我们的目标是项目开发一个客户端来识别来获取相关文档,在有服务器端去识别解析数据。准备好了吗?让我们一起去看看怎么做吧!

预处理

首先,我们需要接收图像相关数据,使其水平竖直方向垂直,接下来使用算法进行检测是否为票据,最终二值化方便识别。

旋转图像识别收据

我们有三种方案来识别票据,下文对这三种方案做了测试。

1. 高阈值的自适应二值化技术。2. 卷积神经网络(CNN)。3. Haar特征分类器。

自适应二值化技术

首先,我们看到,图中图像上包含了完整的数据,同时票据又与背景有些差距。为了能更好识别相关数据,我们需要将图片进行旋转。使其水平沿竖直方向对齐。

我们使用Opencv中的自适应阈值化函数adaptive_threshold和scikit-image框架来调整收据数据。利用这两项函数,我们可以在高梯度区域保留白色像素,低梯度区域保留黑色像素。这使得我们获得了一个高反差的样本图片。这样,通过裁剪,我们就能得到票据的相关信息了。

使用卷积神经网络(CNN)

起初我们决定使用CNN来做相关位置检测的接收点,就像我们之前做对象检测项目一样。我们使用判断角度来拾取相关关键点。这种方案虽然好用,但是和高阈值对比检测裁剪更差。

因为CNN只能找到文本的角度坐标,而文字的角度变化很大,这就意味着CNN模型不是很精准。详情请参考下面CNN测试的结果。

使用Haar特征分类器来识别收据

作为第三种选择,我们尝试使用Haar特征分类器来做分类筛选。然而经过一周的分类训练和改变相关参数,我们并没有得到什么比较积极的结果,甚至发现CNN都比Haar表现好得多。

二值化

最终我们使用opencv中的adaptive_threshold方法进行二值化,经过二值化处理,我们得到了一个不错的图片。

文本检测

接下来我们来介绍几个不同的文本检测组件。

通过链接组件检测文本

首先,我们使用Opencv中的find Contours函数找到链接的文本组。大多数链接的组件是字符,但是也有二值化留下来嘈杂的文本,这里我们通过设置阈值的大小来过滤相关文本。

然后,我们执行合成算法来合成字符,如:Й和=。通过搜索最临近的字符组合合成单词。这种算法需要你找到每个相关字字母最临近的字符,然后从若干字母中找到最佳选择展示。

接下来文字形成文字行。我们通过判断文字是否高度一致来判断文本是否属于同一行。

当然,这个方案的缺点是不能识别有噪声的文本。

使用网格对文本进行检测

我们发现几乎所有票据都是相同宽度的文本,所以我们设法在收据上画出一个网格,并利用网格分割每个字符:

网格一下子精简了票据识别的难度。神经网络可以精准识别每个网格内的字符。这样就解决了文本嘈杂的情况。最终可以精确统计文本数量。

我们使用了以下算法来识别网格。

首先,我在二值化镜像中使用这个连接组件算法。

然后我们发现图中左下角有些是真,所哟我们通过二维周期函数来调整网格识别。

修正网格失真背后主要的思想是利用图形峰值点找到非线性几何失真,换句话说,我们必须找到这个函数的最大值的和。另外,我们还需要一个最佳失真值才行。

我们使用ScipyPython模块中的RectBivariateSpline函数来参数化几何失真。并用Scipy函数进行优化。得到如下结果:

总而言之,这个方法缓慢且不稳定,所以坚决不打算使用这个方案。

光学字符识别

我们通过组连接识别发现文本,并识别完整的单词。

识别通过连接组发现的文本

对于文本识别,我们使用卷积神经网络(CNN)接收相关字体进行培训。输出部分,我们通过对比来提升概率。我们那个几个最初的几个选项多对比,发现有99%的准确识别率后。又通过对比字典来提高准确度,并消除相关类似的字符,如"З" 和 "Э"造成的错误。

然而,当涉及嘈杂的文本时,该方法性能却十分低下。

识别完整的单词

当文本太嘈杂的时候,需要找到完整的单词才能进行单个字母的识别。我们使用下面两个方法来解决这个问题:

  • LSTM网络

  • 图像非均匀分割技术

LSTM网络

您可以阅读这些文章,以更加深入了解使用卷积神经网络识别序列中的文本 ,或我们可以使用神经网络建立与语言无关的OCR吗?为此,我们使用了OCRopus库来进行识别。

我们使用了等宽的字体来作为人工识别样本进行训练。

训练结束后,我们由利用其他数据来测试我们的神经网络,当然,测试结果非常积极。这是我们得到的数据:

训练好的神经网络在简单的例子上表现十分优秀。同样,我们也识别到了网格不适合的复杂情况。

我们抽取的相关的训练样本,并让他通过神经网络进行训练。

为了避免神经网络过度拟合,我们多次停止并修正训练结果,并不断加入新数据作为训练样本。最后我们得到以下结果:

新的网络擅长识别复杂的词汇,但是简单的文字识别却并不好。

我们觉得这个卷积神经网络可以细化识别单个字符来使文本识别更加优秀。

图像非均匀分割技术

因为收据字体是等宽的字体,所以我们决定按照字符分割字体。首先,我们需要知道每个字母的宽度。因此,字符的宽度尤为重要,我们需要估计每个字母的长度,利用函数,我们得到下图。选择多种模式来选取特定的字母宽度。

我们得到一个单词的近似宽度,通过除以字符中的字母数,给出一个近似分类:

区分最佳的是:

这种分割方案的准确度是非常高的:

当然,也有识别不太好的情况:

分割后我们在使用CNN做识别处理。

从收据中提取含义

我们使用正则表达式来查找收据中购买情况。所有收据都有一个共通点:购买价格以XX.XX格式来撰写。因此,可以通过提取购买的行来提取相关信息。个人纳税号码是十位数,也可以通过正则表达式轻松获取。同样,也可以通过正则表达式找到NAME / SURNAME等信息。

总结

  1. 不论你选择什么方法,LSTM或者其他更加复杂的方案,都没有错误,有些方法很难用,但是有些方法却很简单,因识别样本而异。

  2. 我们将继续优化这个项目。目前来看,在没有噪声的情况下,系统性能更加优秀。

原文链接:https://dzone.com/articles/using-ocr-for-receipt-recognition


阅读过本文的人还看了以下文章:

【全套视频课】最全的目标检测算法系列讲解,通俗易懂!

《美团机器学习实践》_美团算法团队.pdf

《深度学习入门:基于Python的理论与实现》高清中文PDF+源码

python就业班学习视频,从入门到实战项目

2019最新《PyTorch自然语言处理》英、中文版PDF+源码

《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码

《深度学习之pytorch》pdf+附书源码

PyTorch深度学习快速实战入门《pytorch-handbook》

【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》

《Python数据分析与挖掘实战》PDF+完整源码

汽车行业完整知识图谱项目实战视频(全23课)

李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材

笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!

《神经网络与深度学习》最新2018版中英PDF+源码

将机器学习模型部署为REST API

FashionAI服装属性标签图像识别Top1-5方案分享

重要开源!CNN-RNN-CTC 实现手写汉字识别

yolo3 检测出图像中的不规则汉字

同样是机器学习算法工程师,你的面试为什么过不了?

前海征信大数据算法:风险概率预测

【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类

VGG16迁移学习,实现医学图像识别分类工程项目

特征工程(一)

特征工程(二) :文本数据的展开、过滤和分块

特征工程(三):特征缩放,从词袋到 TF-IDF

特征工程(四): 类别特征

特征工程(五): PCA 降维

特征工程(六): 非线性特征提取和模型堆叠

特征工程(七):图像特征提取和深度学习

如何利用全新的决策树集成级联结构gcForest做特征工程并打分?

Machine Learning Yearning 中文翻译稿

蚂蚁金服2018秋招-算法工程师(共四面)通过

全球AI挑战-场景分类的比赛源码(多模型融合)

斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)

python+flask搭建CNN在线识别手写中文网站

中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程

不断更新资源

深度学习、机器学习、数据分析、python

 搜索公众号添加: datayx  

深入浅出了解OCR识别票据原理相关推荐

  1. 身份证OCR识别工作原理及流程

    随着互联网科技.移动互联科技的发展和云端计算服务.移动智能设备的普及(性能提升),智能OCR识别技术在云端.服务器端及移动端的应用也得到了长足的发展.今天为大家介绍下身份证OCR识别如何快捷.准确的识 ...

  2. 票据识别android代码,深度学习开源ocr识别票据

    AI开发平台ModelArts ModelArts是面向开发者的一站式AI开发平台,为机器学习与深度学习提供海量数据预处理及半自动化标注.大规模分布式Training.自动化模型生成,及端-边-云模型 ...

  3. 通过OCR识别技术 识别视频和图片的文字信息怎样得到结果

    随着互联网世界的不断充盈,各种各样的视频.文字.图片爆炸式增长,那么如何才能保障信息的健康性.文明性?如何监控这些新增内容和现存内容呢?舆情监控的重要性可谓不言而喻.中安未来视频文字识别SDK具有强大 ...

  4. 国内发达的OCR识别发票扫描仪

    关键词:发票扫描识别 发票识别SDK 发票ocr识别 专票扫描识别 普票扫描识别 电子发票ocr识别 机动车发票扫描识别 票据ocr识别 表格ocr识别 自定义ocr识别票据 自定义模板编辑器 一.发 ...

  5. 汉字进行计算机识别的原理,计算机OCR文字识别技术的原理和未来发展趋势

    杨俊叶++王训伟 摘要:文章首先对OCR技术的发展背景进行了介绍,指出了OCR文字识别系统在扫描仪.文字编辑等领域的应用及优势.通过对OCR技术工作原理的介绍,重点论述了OCR文字识别系统主要的图像处 ...

  6. java ocr 表格票据识别_OCR表格票据识别技术。

    今天继续给大家带来OCR文字识别技术的产品,而今天为大家带来的产品是一款万能的产品哦,它就是--OCR表格票据识别技术. 表格票据识别产品SDK是一项通用的数据批量采集技术,适用于处理具有固定格式的表 ...

  7. ocr人脸识别是什么原理,ocr的工作原理是什么

    ocr是什么意思 . OCR是英文opticalcharacterrecognition的缩写,意思是:文字识别OCR(opticalcharacterrecognition)文字识别是指电子设备(例 ...

  8. 如何批量OCR识别各类票据关键信息,导出为结构化格式数据

    扫描工厂在处理大量银行票据,合同.工程图纸过程中.现在的OCR识别全部的文字,这样不但产生大量的无用数据,而且速度慢效率底.如何批量识别票据的有效机构化数据供其他系统使用,或者生成JSON数据.文本数 ...

  9. 人工智能 识别医疗票据、医疗结算清单 OCR识别技术

    不论是企业还是公益性医院,对于发票整理,发票归类,发票存档,都是一件复杂的事情,一次错误就会导致所有工作功亏一篑,所以发票识别,医疗票据识别至关重要. 同时,随着国民经济发展和人民生活水平的不断提高, ...

  10. 医疗单据、医疗票据OCR识别接口

    医疗单据OCR识别,支持对北京门诊.全国统一门诊.部队门诊.全国统一住院等医疗票据的所有关键字段进行结构化识别,满足医疗报销.保险理赔.补贴申请等场景的信息处理需求. 同时,悦保科技「AI开放平台」将 ...

最新文章

  1. 3分钟内快速部署MySQL5.6.35数据库实践
  2. c++实现websocket服务端与JavaScript通讯
  3. 控制电脑_用小程序远程控制电脑
  4. 【Tensorflow】深度学习实战01——Tensorflow实现简单的卷积网络(MNIST)
  5. pat1069. The Black Hole of Numbers (20)
  6. WPF 使用附加属性增加控件属性
  7. 问题1、图像分割预测时原始图片大小与预测图片大小不一致
  8. 暴汗~莫明其妙收到一张汇款单......
  9. Object C语法
  10. 《Unix编程艺术》pdf
  11. Junit单元测试的基本编码步骤
  12. python把utf8编码转为gbk_Python:UTF-8编码转换成GBK编码
  13. 在计算机知识post的含义,计算机术语POST是指的什么意思?
  14. 里去频闪的插件叫什么_冬天去海南,你才会发现什么叫“不枉此生”!
  15. 由Table_locks_waited想到的mysql 表锁问题
  16. Git关于commit的操作,修改message,合并commit,撤销commit
  17. Pygame中文文档
  18. linux清除僵尸进程,如何清理和避免linux系统僵尸进程
  19. [Android]我的第一个手机应用
  20. bzoj2733 永无乡

热门文章

  1. initializing of server in progress as process 4656
  2. 路由器与交换机的作用及区别
  3. 用 BusyBox 构建根文件系统
  4. Vue3学习之旅--Composition-API-入门篇
  5. 【图像处理】镜头去污渍(未完全实现):python + OpenCV
  6. linux mysqldump 备份所有数据库,mysqldump导出所有数据库
  7. 计算机中安装杀毒软件 的作用,360杀毒软件的功能及其使用方法介绍
  8. 计算机硬盘应该什么格式化,磁盘格式化是什么意思?快速格式化和一般格式化有什么区别...
  9. ppt背景图片怎么更换应用到全部
  10. 简述数字信号处理的内容和理论