OCR(光学字符识别)
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(光学字符识别)相关推荐
- DL之CNN:利用CNN(keras, CTC loss, {image_ocr})算法实现OCR光学字符识别
DL之CNN:利用CNN(keras, CTC loss)算法实现OCR光学字符识别 目录 输出结果 实现的全部代码 输出结果 更新-- 实现的全部代码 部分代码源自:GitHub https://r ...
- Ocrad.js – JS 实现 OCR 光学字符识别
Ocrad.js 相当于是 Ocrad 项目的纯 JavaScript 版本,使用 Emscripten 自动转换.这是一个简单的 OCR (光学字符识别)程序,可以扫描图像中的文字回文本. 不像 G ...
- OCR:光学字符识别技术
OCR:光学字符识别技术 所谓OCR (Optical Character Recognition光学字符识别)技术,是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其 ...
- OCR光学字符识别方法汇总(附开源代码)
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 文本是人类最重要的信息来源之一,自然场景中充满了形形色色的文字符号 ...
- OCR光学字符识别(一)
所谓OCR (Optical Character Recognition光学字符识别)技术,是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形状,然后用字符识别 ...
- OCR光学字符识别技术及其应用场景
最近因为一个标准pdf文件内容都是扫描图像,要转为word文档以便编辑修改.最方便的就是依靠目前比较火的图像识别技术OCR了,如果没有这个技术,我们只有老老实实一字一字地打印到word文档中去,这样就 ...
- 6 个优秀的开源 OCR 光学字符识别工具
申明:本文非笔者原创,原文转载自:http://sigvc.org/bbs/thread-870-1-1.html 纸张在许多地方已日益失宠,无纸化办公谈论40多年,办公环境正限制纸山的生成.而过去几 ...
- 开源OCR光学字符识别
纸张在 许多地方已日益失宠,无纸化办公谈论40多年,办公环境正限制纸山的生成.而过去几年,无纸化办公的概念发生了显着的转变.在计算机软件的帮助 下,包含大量重要管理数据和资讯的文档可以更方便的以电子形 ...
- OCR光学字符识别方法汇总
编者荐语 OCR英文全称是Optical Character Recognition,中文叫做光学字符识别.它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机能够接受.人又 ...
- OCR——光学字符识别
OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形状,然后用字符识别方法将形状翻译 ...
最新文章
- Android.mk 用法介绍
- 使用Hibernate操作数据库
- UML 对象模型图阅读指南 (转)
- boost::units模块实现带有转换的用户定义单位的测试程序
- Boost:parallel grep测试程序
- 初探Apache Kylin【麒麟】
- .NET Core开发实战(第16课:选项数据热更新:让服务感知配置的变化)--学习笔记...
- jsp 上传转码_最完整的处理jsp处理乱码问题步骤,不需要手工转码
- Solr--企业级搜索应用服务器
- Shell编程-JAVA大数据-Week5-DAY3-linux
- php怎么防止爬虫,PHP语言学习之php 防止爬虫设置
- 6 rethad 自定义硬盘_Windows10必备6款优质软件,每个都是神器
- c++模板参数自动推导
- JavaScript-单例模式
- C语言:小工程:统计一篇文档中有多少单词
- Dapr专题之06Actors
- 游戏公司如何应对游戏黑产 ?
- 腾讯(表格OCR)API调用流程
- Java黑皮书课后题第2章:2.16(几何:六边形面积)编写程序,提示用户输入六边形边长,然后显示它的面积
- 支付宝给个人账号转账付款
热门文章
- dvcs-ripper的安装使用
- 编程题——扑克牌大小
- iOS 切换到后台任务执行
- =,==和===的区别
- 表单验证-通用表单验证大全/通用表单验证函数收集
- OPENGL ES 2.0 知识串讲 (10) ——OPENGL ES 详解IV(纹理优化)
- Burp Suite测试小程序,设置代理之后手机一直连不上网
- 2023年网络安全专家都在用的学习资料笔记,收藏这个就够了!
- 天九共享携手猫屎咖啡打造商业高速服务区
- 灰帽python之旅_灰帽 Python之旅10