小白综述:深度学习 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
相关推荐
b_qixin10 分钟前
银行如何发展绿色金融?如何评估绿色项目?
大数据·人工智能·金融
声网13 分钟前
「AI Infra 软件开源不是一个选项,而是必然」丨云边端架构和 AI Infra专场回顾@RTE2024
人工智能·架构·开源
李楷杰19 分钟前
PaddlePaddle 开源产业级文档印章识别PaddleX-Pipeline “seal_recognition”模型 开箱即用篇(一)
人工智能·python·开源·ocr·paddlepaddle·印章识别
海云安28 分钟前
金融领域先锋!海云安成功入选2024年人工智能先锋案例集
人工智能·金融
小王毕业啦33 分钟前
省级金融发展水平数据(2000-2022年)
大数据·人工智能·金融·数据挖掘·数据分析·社科数据
催催1234 分钟前
领夹麦克风哪个品牌好,手机领夹麦克风哪个牌子好,选购推荐
网络·人工智能·经验分享·其他·5g·智能手机
城市数据研习社1 小时前
【论文分享】基于街景图像识别和深度学习的针对不同移动能力老年人的街道步行可达性研究——以南京成贤街社区为例
人工智能·深度学习·数据分析
梓羽玩Python1 小时前
AI全自动开发神器 Windsurf!Cursor 的强力替代方案!GPT-4o和Claude模型免费用!
人工智能·python·程序员
逐星ing1 小时前
[AIGC]使用阿里云Paraformer语音识别录音识别 API 进行音频处理 —— 完整流程及代码示例
人工智能·spring·阿里云·aigc·语音识别
智通财经快讯1 小时前
FBX福币交易所多只高位股重挫,聚星科技首日高开348%
大数据·人工智能·科技