小白综述:深度学习 OCR 图片文字识别

文章目录

  • [1. OCR 算法流程](#1. OCR 算法流程)
    • [1.1 传统 OCR 方法](#1.1 传统 OCR 方法)
    • [1.2 深度学习 OCR 方法](#1.2 深度学习 OCR 方法)
      • [1.2.1 two-stage方法:文字检测+识别](#1.2.1 two-stage方法:文字检测+识别)
      • [1.2.2 端到端方法](#1.2.2 端到端方法)
  • [2. 文本检测算法](#2. 文本检测算法)
  • [3. 文本识别算法](#3. 文本识别算法)
    • [3.1 基于分割的单字符识别方法](#3.1 基于分割的单字符识别方法)
    • [3.2 基于序列标注的文本行识别方法](#3.2 基于序列标注的文本行识别方法)

1. OCR 算法流程

OCR (Optical Character Recognition,光学字符识别) 是指提取图像中的文字信息。

1.1 传统 OCR 方法

传统 OCR 方法一般包含预处理、版面处理、字符切分、字符识别、后处理等五个步骤:

传统 ORC 方法的缺点有:

  • 预处理和版面分析都是基于传统图像处理方法以及人工定义的规则,通常是基于固定场景开发的,无法迁移到其它场景中,应用范围有限。
  • 字符识别方法基于人工特征,鲁棒性不足,在字体变化或者背景干扰情况下,分类器的识别效果会大打折扣。
  • 流程繁杂,各个模块互相独立,导致难以整体调优,同时各个模块串联也会导致误差传递,造成整体识别精度不高。

总体来讲,受传统算法的局限性,传统 OCR 仅在比较规整的印刷文档上表现比较好,但在复杂场景(图像模糊、低分辨率、干扰信息)中,文字检测和识别性能都不够理想。

1.2 深度学习 OCR 方法

深度学习时代的 OCR 算法更为简洁,主要可以分为两种思路:

  • two-stage方法:文字检测+文字识别,分别由检测网络和识别网络来完成。
  • 端到端方法:直接输出识别后的文本,由一个大网络来完成。

1.2.1 two-stage方法:文字检测+识别

二阶段 OCR 是目前主流的,也是效果较好的方法,一般包括文字检测和文字识别两部分:

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

这篇博客主要研究 two-stage 方法。

1.2.2 端到端方法

近几年也有统一了文字检测检测和识别的端到端的 OCR 方法,如 STN-COR,FOTS 和 ABCNet。

STN-COR 由定位网络和识别网络两部分组成。定位网络的输入是场景文本图片,输出是N个变换矩阵,每个矩阵经网格后形成一个采样网格,每个采样网格代表一个文本区域。识别网络是单字符识别网络的改进,可以识别多个字符。

但端到端的模型仍有几个问题等待解决:

  • 特征共享问题:
    文字检测和识别需要的特征的粒度不同,文本检测只需要区分出当前区域是否包含文本即可,使用粗粒度的特征即可满足要求。但识别需要区分不同文字的差别,需要细粒度的特征。检测和识别分支的特征如何有效共享是个仍待解决的问题。
  • 模型训练的问题:
    识别分支的收敛速度远慢于检测分支,需要的数据量远大于检测分支。因此端到端训练时数据量和收敛速度问题如何平衡仍需关注。

本节参考硕士论文:苗文强. 基于深度学习的文本识别算法研究与实现[D].北京邮电大学,2022.DOI:10.26969/d.cnki.gbydu.2022.002445.

2. 文本检测算法

文本检测算法可以分为两大类:基于回归和基于分割

  • 基于回归的方法:借鉴目标检测算法,采用预测图片边界框的方法实现对文本的定位,典型的模型有 CTPR 和 RRD
  • 基于分割的方法:将文本检测问题看成一个二分类任务,判断每个像素是否是文本,之后再聚合像素组成文本行,典型的网络有 PSENet 和 DBNet

3. 文本识别算法

文本识别算法可分为两类:基于分割的单字符识别方法,基于序列标注的文本行识别方法。

  • 基于分割的单字符识别方法:通常包含字符分割和字符识别两个步骤。首先从输入文本实例图像中定位每个字符的位置,该过程通常使用分割网络如 FCN 实现;然后将分割后的字符输入字符分类器进行分类;最后再组合字符得到字符串作为最终识别结果。
  • 基于序列标注的文本行识别方法:通过 Encoder-Decoder 框架将整个文本行图片直接映射为目标字符串序列,从而避免了字符分割带来的误差。

其中基于序列标注的文本行识别方法是目前的主流方法。

3.1 基于分割的单字符识别方法

基于分割的单字符识别方法通常包含字符分割和字符识别两个步骤。该方法尝试从输入文本实例图像中定位每个字符的位置,该过程通常使用分割网络如 FCN 实现,然后将分割后的字符输入字符分类器进行分类,最后再组合字符得到字符串作为最终识别结果。

因为这种方法已经取得了重大进展,但仍然存在一些明显的缺陷:

  1. 场景文本中字符分割的难度极大,而字符分割不准确会影响后续的字符分类。
  2. 该方法串联了一个分割子网络和一个字符识别子网络,导致误差累积,造成整体识别效果不佳。
  3. 该方法无法结合字符的上下文信息辅助识别当前字符,导致识别难度增大。如小写字母 "l" 和 数字 "1" 难以区分,如果有前后文信息,比如字符前后都是数字,那么是 数字 "1" 的可能性更大。

3.2 基于序列标注的文本行识别方法

基于序列标注的文本行识别方法通过 Encoder-Decoder 框架将整个文本行图片直接映射为目标字符串序列,从而避免了字符分割带来的误差。这种方法包括四个流程:预处理、视觉特征提取、序列建模、解码预测。

  • 预处理:预处理包括图片背景擦除,清晰化(超分辨率)和图像矫正等操作,这会给整个识别流程增加额外的时间消耗,考虑到速度与准确率的平衡,预处理操作不是必须的。
  • 视觉特征提取:通常使用 CNN 来提取特征,如 VGG 和 ResNet
  • 序列建模:通过使用双向 RNN,如双向 LSTM 和 Transformer
  • 解码预测:OCR 主流的三大解码算法是 CTC、Attention、ACE
相关推荐
没有余地 EliasJie19 分钟前
Windows Ubuntu下搭建深度学习Pytorch训练框架与转换环境TensorRT
pytorch·windows·深度学习·ubuntu·pycharm·conda·tensorflow
技术无疆34 分钟前
【Python】Streamlit:为数据科学与机器学习打造的简易应用框架
开发语言·人工智能·python·深度学习·神经网络·机器学习·数据挖掘
xuehaishijue43 分钟前
红外画面空中目标检测系统源码分享
人工智能·目标检测·计算机视觉
羊小猪~~43 分钟前
机器学习/数据分析--用通俗语言讲解时间序列自回归(AR)模型,并用其预测天气,拟合度98%+
人工智能·python·机器学习·数据挖掘·数据分析·回归·时序数据库
浊酒南街1 小时前
吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)2.7-2.8
人工智能·深度学习·神经网络
DuoRuaiMiFa1 小时前
ChatGPT全新功能Canvas上线:开启智能编程与写作新篇章
人工智能·chatgpt
DisonTangor1 小时前
Windows 11将新增基于AI的搜索、生成式填充和其它AI功能
人工智能
soso19682 小时前
【AI自然语言处理应用】通过API调用通义晓蜜CCAI-对话分析AIO应用
人工智能·自然语言·ccai
网安-搬运工2 小时前
RAG再总结之如何使大模型更好使用外部数据:四个不同层级及查询-文档对齐策略
人工智能·自然语言处理·大模型·llm·大语言模型·ai大模型·rag