OCR作用就是提取图片中的文本转化成文本形式。用于后续的NLP任务。不由的思考如何如何实现从图像中提取文本,分为两个步骤,第一个步骤:检测文字所在的位置(CTPN),(2)识别文本区域内容(CRNN )。

(1)CTPN(Connectionist Text Proposal Network)

文本检测本质上也属于物体检测,但是文本与常规得物体有较大区别。文本不同于物体检测,文本通常都是水平从左往右写得,并且字与字之间的宽度都大致相同。不同文本的宽度不相同,那如何应对变长的序列。使用宽度相同,长度不同的矩形块对文本位置进行确定。

CTPN网络架构如下图所示。VGG进行特征提取,判断每个候选框是否为文本所在位置,相当于一个二分类问题。BLSTM融入上下文信息,防止将一个完整的句子判断成两段。基于RPN完成检测。经过VGG处理后得到的特征图为H*W*256,输入到BLSTM中时候是将W这个维度作为序列的维度,将H作为batchsize。每个特征点对应10个候选框(长度不同,宽度相同)。2k score中K表示候选框的个数,一个位置对应10个候选框,每个候选框都有属于前景还是背景的得分,一共20个得分,分类问题。2k vertical coordinates 表示每个候选框有两个偏移量,一个候选框的中心点y的坐标,以及y到候选框最上面的距离。k side-refinement 表示边界的微调,仅需要调节位置不调节宽度,使框的结果更加的准确。边界调整使得文本检测框效果更好。

下图是VGG16的网络架构图。代码中仅经过四次池化操作就结束了即到达14*14*512这个地方,特征图中一个像素对应原始输入的16个像素。

当检测到多个候选框后需要将这些候选框拼接到一起。合并的规则分为前向和后向两个部分,先向前走,对于xi ,基于重合度(0.7)与位置距离(50像素)找到score值最大的xj,接下来再反向走(规则不变),比较两次得分值大小来判断序列。

论文链接:https://arxiv.org/pdf/1609.03605.pdf

(2)CRNN

CRNN是将CNN和RNN融合在一起时间文本检测,首先CNN进行特征提取,接下来RNN进行序列特征提取,最后预测结果即可。CTC用于处理序列输入输出可变长的问题,目的是对齐输入输出结果。

论文链接:https://arxiv.org/pdf/1507.05717v1.pdf

代码简介:

下图是代码的目录结构,实际测试时候运行demo.py这个文件,根据README.md中下载预训练模型,将模型放在checkpoints中。如果出现路径错误,可能原因是再windows下将路径分隔符/改成\\即可。

运行的结果:

ctpn数据集下载地址 https://rrc.cvc.uab.es/?ch=17&com=downloads

数据集下载需要注册,邮箱最好选择学校的邮箱.edu结尾的。下载后放入train_code/train_ctpn/train_data中,该目录建立两个文件夹train_img,train_label。然后在train_code/train_ctpn/config.py文件中更改数据集路径:

train_code/train_ctpn/data/dataset.py包括了所有的数据预处理操作和数据的读取

下图代码主要是对候选框进行标注。

train_code/train_ctpn/ctpn_model.py为CPTN模型构建部分。

CRNN模块代码

代码地址:https://github.com/courao/ocr.pytorch

OCR(光学字符识别)相关推荐

  1. DL之CNN:利用CNN(keras, CTC loss, {image_ocr})算法实现OCR光学字符识别

    DL之CNN:利用CNN(keras, CTC loss)算法实现OCR光学字符识别 目录 输出结果 实现的全部代码 输出结果 更新-- 实现的全部代码 部分代码源自:GitHub https://r ...

  2. Ocrad.js – JS 实现 OCR 光学字符识别

    Ocrad.js 相当于是 Ocrad 项目的纯 JavaScript 版本,使用 Emscripten 自动转换.这是一个简单的 OCR (光学字符识别)程序,可以扫描图像中的文字回文本. 不像 G ...

  3. OCR:光学字符识别技术

    OCR:光学字符识别技术 所谓OCR (Optical Character Recognition光学字符识别)技术,是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其 ...

  4. OCR光学字符识别方法汇总(附开源代码)

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 文本是人类最重要的信息来源之一,自然场景中充满了形形色色的文字符号 ...

  5. OCR光学字符识别(一)

     所谓OCR (Optical Character Recognition光学字符识别)技术,是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形状,然后用字符识别 ...

  6. OCR光学字符识别技术及其应用场景

    最近因为一个标准pdf文件内容都是扫描图像,要转为word文档以便编辑修改.最方便的就是依靠目前比较火的图像识别技术OCR了,如果没有这个技术,我们只有老老实实一字一字地打印到word文档中去,这样就 ...

  7. 6 个优秀的开源 OCR 光学字符识别工具

    申明:本文非笔者原创,原文转载自:http://sigvc.org/bbs/thread-870-1-1.html 纸张在许多地方已日益失宠,无纸化办公谈论40多年,办公环境正限制纸山的生成.而过去几 ...

  8. 开源OCR光学字符识别

    纸张在 许多地方已日益失宠,无纸化办公谈论40多年,办公环境正限制纸山的生成.而过去几年,无纸化办公的概念发生了显着的转变.在计算机软件的帮助 下,包含大量重要管理数据和资讯的文档可以更方便的以电子形 ...

  9. OCR光学字符识别方法汇总

    编者荐语 OCR英文全称是Optical Character Recognition,中文叫做光学字符识别.它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机能够接受.人又 ...

  10. OCR——光学字符识别

    OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形状,然后用字符识别方法将形状翻译 ...

最新文章

  1. Android.mk 用法介绍
  2. 使用Hibernate操作数据库
  3. UML 对象模型图阅读指南 (转)
  4. boost::units模块实现带有转换的用户定义单位的测试程序
  5. Boost:parallel grep测试程序
  6. 初探Apache Kylin【麒麟】
  7. .NET Core开发实战(第16课:选项数据热更新:让服务感知配置的变化)--学习笔记...
  8. jsp 上传转码_最完整的处理jsp处理乱码问题步骤,不需要手工转码
  9. Solr--企业级搜索应用服务器
  10. Shell编程-JAVA大数据-Week5-DAY3-linux
  11. php怎么防止爬虫,PHP语言学习之php 防止爬虫设置
  12. 6 rethad 自定义硬盘_Windows10必备6款优质软件,每个都是神器
  13. c++模板参数自动推导
  14. JavaScript-单例模式
  15. C语言:小工程:统计一篇文档中有多少单词
  16. Dapr专题之06Actors
  17. 游戏公司如何应对游戏黑产 ?
  18. 腾讯(表格OCR)API调用流程
  19. Java黑皮书课后题第2章:2.16(几何:六边形面积)编写程序,提示用户输入六边形边长,然后显示它的面积
  20. 支付宝给个人账号转账付款

热门文章

  1. dvcs-ripper的安装使用
  2. 编程题——扑克牌大小
  3. iOS 切换到后台任务执行
  4. =,==和===的区别
  5. 表单验证-通用表单验证大全/通用表单验证函数收集
  6. OPENGL ES 2.0 知识串讲 (10) ——OPENGL ES 详解IV(纹理优化)
  7. Burp Suite测试小程序,设置代理之后手机一直连不上网
  8. 2023年网络安全专家都在用的学习资料笔记,收藏这个就够了!
  9. 天九共享携手猫屎咖啡打造商业高速服务区
  10. 灰帽python之旅_灰帽 Python之旅10