Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

OCR简介

ORC(Optical Character Recognition)光学字符识别,指提取图像中的文字信息,通常包括文本检测文本识别

  • 文本检测:将图片中的文字区域位置检测出来
  • 文字识别:对文字区域中的文字进行识别

流程

传统方法

在深度学习之前,传统的OCR方法主要流程包括:

  • 图像预处理:修正成像问题包括几何变换、去模糊、光线矫正
  • 文本行检测:连通域、滑动窗口
  • 单字符分割
  • 单字符识别:图像分类、模板匹配
  • 后处理

深度学习方法

  • 文本行检测:输入图像、文字区域定位、文本行识别、输出
  • 文本行识别:CNN、RNN、CTC

ORC检测方法

  • EAST

  • DB

  • SAST

  • 基于回归的方法

    • box回归
      • CTPN
      • EAST
    • 像素值回归
      • CRAFT
      • SA-Text
  • 基于分割方法

    • PSENet
  • SegLink

  • TextBoxes、TextBoxes++

  • R2CNN

论文 时间 数据集 code 特征
EAST CVPR2017 ICDAR2013、2015, COCO-Text,MSRA songdejia/EAST: This is a pytorch re-implementation of EAST: An Efficient and Accurate Scene Text Detector. (github.com) 端到端的快速文本检测方法,消除中间多个步骤,直接预测文本行
SegLink CVPR 2017
TextBoxes AAAI 2017
TextBoxes++ TIP 2018
R2CNN CoRR 2017 基于Faster RCNN的斜框检测:R2CNN - 知乎 (zhihu.com)
PixelLink AAAI 2018
PSENet CVPR 2019

OCR识别方法

文字识别之前需要先对文字进行定位(文字检测主要有基于物体检测和基于分割两种方法)

文字识别主要分为三种类型:

  • 单字分类:当能够定位出单字的时候,用图像分类法对单字进行分类
  • 整词分类:当需要预测整词数量较少时,可对整词进行分类
  • 整词识别:当有大量整词需要预测并且没有单字定位时,需要用解码序列的方法进行识别。

文字识别中最常用的时文字序列识别,使用场景更为广泛。

识别难点

主要难点在于输入与输出的对齐,如果我们每间隔单位n预测一个字符,那么可能出现多个n预测同一个字符,这样将导致结果出现重复字符,因此需要设计针对文字识别的编码算法来解决输入输出对齐问题。

可能解决OCR解码一对多问题的有以下三种方法(即端到端方法):

  • CTC
  • Attention
  • ACE

基于RNN进行文字识别的算法主要有两个:

  • CNN + RNN + CTC(CRNN + CTC)
  • CNN + Seq2Seq + Attention
论文 时间 数据集 code 特点
CRNN 2015 ICDAR 2013 meijieru/crnn.pytorch: Convolutional recurrent network in pytorch (github.com) 使用CNN提取图像卷积特征,然后使用LSTM提取卷积特征中的序列特征,最后使用CTC解决对齐问题
RARE CVPR 2016 对变形的图像文本效果很好,原因是输入图像首先被送入一个空间变换网络做处理
STAR-Net 2016 学习一个投影变换矩阵,将变形的文字变换为正常模样
SAR AAAI 2019
SRN 2020

端到端检测+识别

论文 时间 数据集 code 特点
E2E CRNN ICCV 2017
STN-OCR 2017
FOTS CVPR 2018 jiangxiluning/FOTS.PyTorch: FOTS Pytorch Implementation (github.com)
Mask TextSpotter ECCV 2018
CharNet ICCV 2019
Mask TextSpotterV3 ECCV 2020

文本检测

难点

  • 文本存在多种分布,排布形式多样
  • 文本存在多个方向
  • 多语言混合

技术

Faster RCNN

将目标检测的四个基本步骤:

  • 候选区域生成
  • 特征提取
  • 分类
  • 位置精修

整合到一个深度网络中,剔除计算冗余,并可通过GPU训练,进一步提高运行速度

Faster R-CNN论文笔记

CTPN

基于Faster RCNN,目前比较成熟的文本检测框架,精度较好,但检测时间较长。

预测文本的竖直方向上的位置,水平方向的位置不预测,对非水平的文字不能检测

CTPN

TextBoxes\TestBoxes++

调整Anchor长宽比,适用于文字细长的特点,但针对小文本会有露检

CTPN + SSD,通常用于自然场景下,检测多角度文本

DMPNet

采用非矩形四边形选定Anchor进行检测,通过Monte-Carlo方法计算标注区域于矩形候选框和旋转候选框的重合度重新计算顶点坐标,得到非矩形四边形的顶点坐标。适用于自然场景下文本检测。

YOLO

文本检测时间短,精度好,但针对小目标效果一般,容易造成大范围漏检

EAST

采用FCN思路,做特征提取和特征融合,局部感知NMS阶段完成检测。网络的简洁使得检测准确率和速度都有进一步提升。(针对自然场景下使用较多)

Pixel-Anchor

针对Anchor数量多引起文本出现的丢失问题,Pixel感受野不足引起长文本丢失情况,结合两者各自的优点,对长行的中文检测场景有较好的适应性。网络结构可以分为两部分,其中Pixel-based的方法对EAST的改进,anchor-based的方法对SSD的改进。前者主要为了检测中等文本,后者主要为了检测长行和较小的文本

IncepText

针对大尺度、长宽比及方向变化问题,借鉴GoogLeNet中的inception模块来解决这些问题。在inception结构中通过不同尺寸的卷积核设计达到检测不同大小和宽高比的文字,同时引入deformable卷积层操作和deformable PSROI pooling层提升任意方向文字的检测效果。

文本识别

技术

CNN + RNN + CTC(如CRNN)

目前使用最广泛的文本识别框架。需要自己构建字词库(包含常用字、各类字符)

CNN(如Densenet) + CTC

效果一般,繁华能力较差。没有加入RNN的效果好

Tesserocr(Tesseract)

使用比较广泛的一种开源识别框架,支持多语言多平台。Tesseract在识别清晰的标准中文字体效果还行,稍微复杂的情况就很糟糕(多字体等),而且花费的时间也很多。

RARE

主要用于识别变形的文本图像效果好,用于自然场景下文本识别。

FOTS

EAST + CRNN,端到端OCR模型,检测和识别任务共享卷积特征层,节省计算时间,也比两阶段训练方式学习到更多图像特征。引入旋转感兴趣区域(RolRotate),可以从卷积特征图中产生出定向的文本区域,从而支持倾斜文本识别。

ASTER

模型主要分为两个部分,一个是矫正模型,一个是识别模型,矫正模型不需要矫正标注信息,对弯曲文本、透视文本有很好的矫正效果。识别模型中的CNN使用了ResNet的结构,最后的解码部分使用的是Sequence2Sequence机制来进行解码,不同于CRNN的CTCLoss

数据集

数据集 数据语言 大小 简要介绍 标注格式 下载地址
ICDAR_2013 语言: 英文 train:229 test:233 水平文本 x1 y1 x2 y2 text 下载链接.
ICDAR_2015 语言: 英文 train:1000 test:500 倾斜文本 x1,y1,x2,y2,x3,y3,x4,y4,text 下载链接.
ICDAR2017-MLT 语言: 混合 train:7200 test:1800 多语言文本 x1,y1,x2,y2,x3,y3,x4,y4,text 下载链接. 提取码: z9ey
ICDAR2017-RCTW 语言: 混合 train:8034 test:4229 主要是中文 x1,y1,x2,y2,x3,y3,x4,y4,<识别难易程度>,text 下载链接
天池比赛2018 语言: 混合 train:10000 test:10000 合成图像,产品描述,网络广告复杂排版,密集的小文本或多语言文本,水印等 x1,y1,x2,y2,x3,y3,x4,y4,text 检测识别
ICDAR2019-MLT 语言: 混合 train:10000 test:10000 水平文本每个连续的1000个图像包含一种主要语言的文本 x1,y1,x2,y2,x3,y3,x4,y4,语言类别,text 下载链接. 提取码: xofo
ICDAR2019-LSVT 语言: 混合 train:30000 test:20000 中文街景图像 json格式标签 下载链接
ICDAR2019-ReCTS 语言: 混合 train:20000 test:5000 餐厅招牌上的中文文本 json格式标签 下载链接
ICDAR2019-ArT 语言: 混合 train:5603 test:4563 包含水平、多方向和弯曲等多种形状的文本 json格式标签 下载链接
Synth800k 语言: 英文 80k 每个文本实例均使用文本字符串、字级和字符级边界框进行注释 基于字符标注 下载链接
360万中文数据集 语言: 中文 360k 每个样本固定10个字符,字符随机截取自语料库中的句子 每张图片由10个字符构成 下载链接. 提取码:lu7m
中文街景数据集CTW 语言:中文 32285 包含平面文本,凸起文本,城市文本,农村文本,低亮度文本,远处文本,部分遮挡文本 基于字符标注的中文街景图片 下载链接
百度中文场景文字识别 语言: 混合 29万 由街景图片中的文字行区域(如店铺标牌、地标等)截取出来而形成图像经过一些预处理:将文字区域利用仿射变化,等比映射为一张高为48像素的图片 下载链接
MSRA-TD500 语言: 中英文 Training:300 Test:200 多方向文本检测大部分文本都在引导牌上 .gt格式标签 下载链接
Total-Text 语言: 英文 Training:1255 Test:300 弯曲文本 下载链接

评论