OCR系列——总体概述

最近参加了百度Paddle的动手学OCR课程,特此做一个学习总结。

1. 简介

OCR(Optical Character Recognition,光学字符识别)是计算机视觉重要方向,传统的OCR一般面向扫描文档类对象,现在的OCR是指场景文字识别(Scene Text Recogntion,STR)主要面向自然场景。

2. 前沿算法

2.1 文本检测

文本检测是定位出输入图像中的文字区域。可以将文本检测作为目标检测中的一个特定场景,基于通用目标检测算法进行改进适配,如TextBoxes基于SSD算法,CTPN是基于Faster RCNN算法。同时,由于文件检测任务在文本的特殊性,衍生了许多专用的算法,例如,EAST、PSENet,DBNet等。

目前较为流行的文本检测算法可以大致分为基于回归基于分割的两大类文本检测算法,也有一些算法将二者相结合。基于回归的算法借鉴通用物体检测算法,通过设定anchor回归检测框,或者直接做像素回归,这类方法对规则形状文本检测效果较好,但是对不规则形状的文本检测效果会相对差一些,比如CTPN对水平文本的检测效果较好,但对倾斜、弯曲文本的检测效果较差,SegLink对长文本比较好,但对分布稀疏的文本效果较差;基于分割的算法引入了Mask-RCNN,这类算法在各种场景、对各种形状文本的检测效果都可以达到一个更高的水平,但缺点就是后处理一般会比较复杂,因此常常存在速度问题,并且无法解决重叠文本的检测问题

2.2 文本识别

文本识别是识别出图像中的文字内容,一般输入是来自文本检测得到的文本框截出的图像文字区域。文本识别一般可以根据识别文本形状分为规则文本识别不规则文本识别。规则文本主要指印刷字体、扫描文本等,文本大致处在水平线位置;不规则文本往往不在水平位置,存在弯曲、遮挡、模糊等问题。不规则文本场景具有很大的挑战性,也是目前文本识别领域的主要研究方向。

  • (1960s-2015):过分割+单字识别

连通域分析 ,寻找潜在的文字切分位置---->切分片段组合+集束搜索

  • (2016-2021)文本行识别时代

单个模型识别整个文本行--->基于CTC解码/分割/注意力额编码-解码结构/并行注意力解码(四种方法)

规则文本识别的算法根据解码方式的不同可以大致分为基于CTC和Sequence2Sequence两种,将网络学习到的序列特征 转化为 最终的识别结果 的处理方式不同。基于CTC的算法以经典的CRNN为代表。

不规则文本的识别算法相比更为丰富,如STAR-Net等方法通过加入TPS等矫正模块,将不规则文本矫正为规则的矩形后再进行识别;RARE等基于Attention的方法增强了对序列之间各部分相关性的关注;基于分割的方法将文本行的各字符作为独立个体,相比与对整个文本行做矫正后识别,识别分割出的单个字符更加容易;此外,随着近年来Transfomer的快速发展和在各类任务中的有效性验证,也出现了一批基于Transformer的文本识别算法,这类方法利用transformer结构解决CNN在长依赖建模上的局限性问题,也取得了不错的效果。

2.3 文档结构化识别

有一些应用场景是获取结构化信息,例如身份证、发票的信息抽取,表格的结构化识别等,可以采用OCR结果+后处理的方案。常用场景有

  • 版面分析

版面分析(Layout Analysis)主要是对文档图像进行内容分类,类别一般可分为纯文本、标题、表格、图片等。

  • 表格识别

表格识别(Table Recognition)的任务就是将文档里的表格信息进行识别和转换到excel文件中。

  • 关键信息抽取

关键信息提取(Key Information Extraction,KIE)是Document VQA中的一个重要任务,主要从图像中提取所需要的关键信息,如从身份证中提取出姓名和公民身份号码信息,这类信息的种类往往在特定任务下是固定的,但是在不同任务间是不同的。

关键信息提取通常分为两个子任务进行研究:

  • SER: 语义实体识别 (Semantic Entity Recognition),对每一个检测到的文本进行分类,如将其分为姓名,身份证。如下图中的黑色框和红色框。
  • RE: 关系抽取 (Relation Extraction),对每一个检测到的文本进行分类,如将其分为问题和的答案。然后对每一个问题找到对应的答案。如下图中的红色框和黑色框分别代表问题和答案,黄色线代表问题和答案之间的对应关系。

3. 细节

3.1. 语种和标注

英文:识别单个字符,共有36个字符

中文:识别单个汉字,有6623个常用汉字

单词校正字典:将识别的结果进行遍历,未在字典中发现,则返回较相近的结果。

3.2. 常见数据集

(1)合成数据集:Synth90k & Synth Text

(2)自然场景数据集:水平文本

(3)自然场景数据集:不规则文本

 4. 面临的挑战

  • 算法层: 

  • 应用层

5. 结论

该章节只是初步了解OCR的常见任务、数据集和面临的问题,具体细节在后续博客中更新

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

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

相关文章

STM32——系统滴答定时器

STM32——系统滴答定时器 宗旨:技术的学习是有限的,分享的精神是无限的。 一、SysTick【内核中】 【风格:先描述一下库对寄存器的封装,再举例实现某些功能】 SysTick定时器被捆绑在NVIC中,用于产生SysTick异常&#…

你会用while(1)还是for(;;)写循环代码?

看代码看到for(;;)&#xff0c;然后觉得为什么不写成while(1)呢&#xff0c;所以就做了下面的测试。网上有解释&#xff0c;因为while需要做一次判断&#xff0c;理论上执行会花费的时间更久&#xff0c;for(;;)只是执行了两次空语句&#xff0c;执行会更快for.c#include <s…

OCR系列——文本检测任务

1. 简介 文本检测任务是找出图像或视频中的文字位置。不同于目标检测任务&#xff0c;目标检测不仅要解决定位问题&#xff0c;还要解决目标分类问题。 目标检测和文本检测同属于“定位”问题。但是文本检测无需对目标分类&#xff0c;并且文本形状复杂多样。 当前所说的文本…

关于ORACLE 语句中,IN 超过1000个的解决方法

在ORACLE SELECT 语句中 IN 的数据如果超过 1000&#xff0c;就会出错&#xff0c;解决方法也很简单&#xff0c;以C#代码为例&#xff1a; 1、先写一个方法&#xff0c;接收2个参数 参数1&#xff1a;接收 IN里面的数据&#xff0c;如&#xff1a;a1,a2,...a2000 &#xff1b;…

9个提高代码运行效率的小技巧你知道几个?

我们写程序的目的就是使它在任何情况下都可以稳定工作。一个运行的很快但是结果错误的程序并没有任何用处。在程序开发和优化的过程中&#xff0c;我们必须考虑代码使用的方式&#xff0c;以及影响它的关键因素。通常&#xff0c;我们必须在程序的简洁性与它的运行速度之间做出…

STM32——按键

STM32——按键 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、GPIO工作模式 1、当I/O端口配置为输入时&#xff1a; 输出缓冲器被禁止 施密特触发输入被激活 根据输入配置(上拉&#xff0c;下拉或浮动)的不同&#xff0c;弱上拉和下拉电阻被连接 …

深度学习——模型的压缩和加速

1. 简介 随着深度学习发展&#xff0c;越来越多的模型被发现和应用&#xff0c;模型的体量也越来越大&#xff0c;出现了模型过于庞大和参数冗余的问题。同时&#xff0c;移动端对模型的需求也是越轻量越好&#xff0c;因此&#xff0c;模型压缩和加速技术应运而生。 模型压缩…

干货,记一次解决录音杂音问题

最近在项目上遇到一个问题&#xff0c;也不能说是最近项目上的问题了&#xff0c;是之前一直存在的问题&#xff0c;但是对项目没什么影响&#xff0c;所以我就不怎么理会&#xff0c;直到最近&#xff0c;同事说这个杂音已经影响到了项目的开发&#xff0c;所以今天花了一天时…

3.5.2 冒泡排序类

那么&#xff0c;我们就以冒泡排序为例&#xff0c;把它改造成一个类。首先&#xff0c;单击菜单&#xff0c;“项目”&#xff0d;“添加类”&#xff0c;添加一个BubbleSort.cs类文件。IDE自动为我们创建如下代码&#xff1a; usingSystem;usingSystem.Collections.Generic;u…

STM32——串口通信

STM32——串口通信 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、异步串口通信协议 STM32 的串口非常强大&#xff0c;它不仅支持最基本的通用串口同步、异步通信&#xff0c;还具有 LIN 总线功能&#xff08;局域互联网&#xff09;、IRDA 功能&…

操作系统——死锁(银行家算法)

1、概述 1.1 死锁 死锁是多个进程因竞争资源而造成的一种僵局&#xff08;互相等待&#xff09;&#xff0c;若无外力作用&#xff0c;这些进程都将无法向前推进。 1.2 死锁产生的原因和条件 原因&#xff1a;&#xff08;1&#xff09;竞争资源&#xff1b;&#xff08;2&…

操作系统——内存管理

1、内存基本概念 1.1 主要功能 内存空间的分配与回收&#xff1b;地址转换内存保护&#xff1a;使用上下限寄存器或者重定位寄存器和界地址寄存器内存扩充&#xff1a;交换和覆盖内容共享 2、内存的分配与回收 2.1 连续分配方式 连续分配方式是指为一个用户程序分配一个连续…

解决一个驱动代码解耦合问题

之前解决的项目LCD设备兼容问题&#xff0c;在 a.c 文件里面定义了一个变量&#xff0c;然后在 b.c 里面使用 extern声明引用这个变量&#xff0c;通过这种方法可以在b.c中使用在a.c 里面初始化的变量。但是这中情况就会引起一个问题&#xff0c;就是驱动代码之间耦合了&#x…

STM32——DMA

STM32——DMA 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 DMA 是为CPU分担数据转移的工作。因为DMA的存在CPU才被解放出来&#xff0c;它可以在 DMA 转移数据的过程中同时进行数据运算、响应中断&#xff0c;大大提高效率。 1、DMA工作分析 数据传…

YOLOv8改进 | 主干篇 | 利用SENetV1改进网络结构 (ILSVRC冠军得主)

一、本文介绍 本文给大家带来的改进机制是SENet&#xff08;Squeeze-and-Excitation Networks&#xff09;其是一种通过调整卷积网络中的通道关系来提升性能的网络结构。SENet并不是一个独立的网络模型&#xff0c;而是一个可以和现有的任何一个模型相结合的模块(可以看作是一…

搭建Servlet在线视频

这个视频flash上传及在线播放&#xff0c;搞了我一天了&#xff0c;总算有点成果&#xff0c;但还有一些疑问没有解决&#xff0c;现在发这篇随笔&#xff0c;为的就是交流视频在线上传和观看的一些问题。 在线编辑器使用FCKEditor&#xff0c;首先是修改FCKEditor的配置文件&a…

操作系统——内存管理例题

1、关于分配策略例题 case1&#xff1a;某系统的空闲分区见下表&#xff0c;如有下列作业&#xff1a;96KB&#xff0c;20KB&#xff0c;200KB&#xff0c;分别采用首次适应算法和最佳适应算法来处理这些作业序列&#xff0c;哪种算法能满足该作业序列请求&#xff1f; 分区号…

STM32中C语言知识点:初学者必看,老鸟复习(长文总结)

说在前面的话一位初学单片机的小伙伴让我推荐C语言书籍&#xff0c;因为C语言基础比较差&#xff0c;想把C语言重新学一遍&#xff0c;再去学单片机&#xff0c;我以前刚学单片机的时候也有这样子的想法。其实C语言是可以边学单片机边学的&#xff0c;学单片机的一些例程中&…

STM32——ADC

STM32——ADC 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、ADC指标 有 18 个通道&#xff0c;可测量 16 个外部和 2 个内部信号源。各通道的 A/D 转换可以单次、连续、扫描或间断模式执行 &#xff1b;ADC的结果可以左对齐或右对齐方式存储在 16…