Skip to content

OCR(光学字符识别)入门笔记 ​

适合初学者:从 OCR 是什么、怎么工作,到常见算法、模型、工程难点与学习路线。


1. OCR 是什么? ​

OCR(Optical Character Recognition,光学字符识别)是指:

让计算机从图片、扫描件、截图、照片等视觉内容中识别出文字,并转换成可编辑、可搜索的文本。

例如:

text
输入图片:
┌────────────────────┐
│  欢迎来到北京       │
│  Hello World       │
│  2026-09-09        │
└────────────────────┘

OCR 输出:
欢迎来到北京
Hello World
2026-09-09

OCR 不只是“识别字符”,实际系统通常还要解决:

  • 图片中哪里有文字?
  • 每一行文字在哪里?
  • 文字是什么内容?
  • 多行、多列、表格应该如何排列?
  • 字符方向是否正确?
  • 文字模糊、倾斜、低分辨率时怎么办?

因此,一个完整的 OCR 系统通常包含多个步骤。


2. OCR 的整体流程 ​

可以先记住这个经典流程:

text
图片
  ↓
图像预处理
  ↓
文字检测(Text Detection)
  ↓
文字区域裁剪 / 校正
  ↓
文字识别(Text Recognition)
  ↓
后处理
  ↓
结构化结果

例如一张营业执照:

text
              原始图片
                  │
                  ▼
             图像预处理
                  │
                  ▼
          检测图片中的文字区域
             ┌────┼────┐
             ▼    ▼    ▼
           公司名 地址 日期
             │    │    │
             └────┼────┘
                  ▼
              文字识别
                  │
                  ▼
        "某某科技有限公司"
        "北京市朝阳区……"
        "2026-09-09"

需要特别注意:

文字检测和文字识别是两个不同的问题。

检测回答“文字在哪里”,识别回答“这里写的是什么”。


3. OCR 中的几个核心任务 ​

3.1 文本检测(Text Detection) ​

目标:从整张图片中找出文字所在的位置。

输入:

text
一整张图片

输出可能是:

text
文字区域 A:x1, y1, x2, y2
文字区域 B:x1, y1, x2, y2
文字区域 C:x1, y1, x2, y2

现代 OCR 中,经常使用四边形或多边形表示文字区域:

text
     x1,y1 ───────── x2,y2
       ╲               ╲
        ╲   文字区域    ╲
         ╲               ╲
          ───────────────

对于自然场景文字,文字可能:

  • 倾斜
  • 旋转
  • 弯曲
  • 不规则排列
  • 与复杂背景混合

所以检测并不只是简单地找矩形。


3.2 文本识别(Text Recognition) ​

目标:把一个已经定位好的文字区域转换成字符串。

例如:

text
输入:一块裁剪后的文字图片

┌──────────────────┐
│  OpenAI GPT      │
└──────────────────┘

输出:
OpenAI GPT

识别模型通常需要学习:

text
图片像素 → 特征 → 字符序列 → 文本

3.3 版面分析(Layout Analysis) ​

如果图片是文档,仅仅识别文字还不够。

例如一页 PDF:

text
┌──────────────────────────┐
│          标题             │
│                           │
│ 左栏                右栏   │
│ ─────              ───── │
│ 正文                图片   │
│ 正文                表格   │
│ 正文                      │
└──────────────────────────┘

系统还需要理解:

  • 标题
  • 段落
  • 图片
  • 表格
  • 页眉
  • 页脚
  • 列布局
  • 列表

这类问题通常称为文档版面分析(Layout Analysis)。


3.4 表格识别(Table Recognition) ​

表格识别不仅要求“认出文字”,还要恢复表格结构。

例如:

text
姓名   年龄   城市
张三    20    北京
李四    22    上海

OCR 最终最好得到类似:

json
{
  "columns": ["姓名", "年龄", "城市"],
  "rows": [
    ["张三", "20", "北京"],
    ["李四", "22", "上海"]
  ]
}

因此,表格 OCR 已经不仅仅是字符识别,而是视觉信息 + 文档结构理解。


4. OCR 与计算机视觉的关系 ​

OCR 是计算机视觉(Computer Vision,CV)的一个重要应用方向。

可以粗略理解为:

text
计算机视觉
├── 图像分类
├── 目标检测
├── 图像分割
├── 人脸识别
├── 姿态估计
└── OCR
    ├── 文本检测
    ├── 文本识别
    ├── 版面分析
    └── 文档理解

OCR 又与以下方向关系密切:

  • 深度学习
  • 图像处理
  • 自然语言处理(NLP)
  • 多模态模型
  • 文档智能

5. OCR 的输入是什么? ​

常见输入包括:

  • 扫描文档
  • PDF 页面
  • 手机拍照
  • 截图
  • 票据
  • 身份证等证件
  • 菜单
  • 路牌
  • 商品包装
  • 网页图片
  • 手写文字

不同场景的难度差异很大。

例如:

text
扫描 PDF
  ↓
背景干净、文字规整
  ↓
通常比较容易

而:

text
街头照片
  ↓
光照变化 + 透视 + 反光 + 复杂背景 + 倾斜
  ↓
通常更难

所以谈 OCR 准确率时,必须说明具体场景。


6. 图像预处理 ​

在 OCR 之前,可以对图片进行预处理。

常见操作:

6.1 灰度化 ​

彩色图片:

text
RGB

转成:

text
Gray

例如像素可以从:

text
(R, G, B)

变成一个亮度值。

灰度化可以减少数据复杂度,但深度学习 OCR 不一定必须先手动灰度化。


6.2 二值化 ​

把图片转成黑白:

text
原图 → 黑白图

经典方法之一是阈值处理:

text
pixel < threshold → 黑色
pixel >= threshold → 白色

适合背景较干净的文档。

但在复杂背景、阴影、渐变光照下,简单二值化可能破坏文字。


6.3 去噪 ​

图片可能包含:

  • 拍照噪声
  • JPEG 压缩噪声
  • 扫描噪声
  • 小黑点

可以使用滤波等方法进行处理。

但也要注意:

过度去噪可能把文字笔画一起去掉。


6.4 倾斜校正 ​

例如:

text
原始:
\\\\\\\\
\\\\\\\\

校正后:
────────
────────

文字倾斜会降低 OCR 识别效果,因此可以先估计文字方向并进行旋转。


6.5 透视校正 ​

手机拍摄文件时,可能出现:

text
   ┌────────────┐
  /              /
 /              /
└──────────────┘

文档变成梯形。

透视变换可以把它变回近似正面:

text
┌──────────────┐
│              │
│              │
└──────────────┘

7. 传统 OCR 方法 ​

在深度学习普及之前,OCR 大量使用传统图像处理和模式识别方法。

一个典型流程是:

text
图像
 ↓
二值化
 ↓
去噪
 ↓
字符分割
 ↓
提取字符特征
 ↓
分类器识别
 ↓
文本

7.1 字符分割 ​

例如:

text
ABCDE

先切成:

text
A | B | C | D | E

然后逐个识别。

这种方法在字符排列规整时效果不错,但遇到:

  • 字符粘连
  • 字符断裂
  • 手写字
  • 不规则文字

就比较困难。


7.2 特征工程 ​

传统方法需要人为设计特征,例如:

  • 边缘
  • 轮廓
  • 方向
  • 像素分布
  • HOG 等局部特征

再使用分类器进行识别。

问题在于:

人工设计特征很难覆盖真实世界的全部变化。

这也是深度学习 OCR 崛起的重要原因之一。


8. 深度学习 OCR ​

现代 OCR 大量使用神经网络。

核心思想从:

text
人工设计特征
        ↓
分类器

变成:

text
图片
 ↓
神经网络自动学习特征
 ↓
预测文字

常见组件包括:

  • CNN
  • RNN
  • LSTM
  • GRU
  • Transformer
  • Attention
  • CTC

9. CNN 在 OCR 中做什么? ​

CNN(卷积神经网络)非常擅长处理图像。

可以把 CNN 理解为一个“自动提取图像特征”的系统。

例如低层特征:

text
边缘
纹理
笔画

更高层特征:

text
字符局部结构
文字形状
复杂视觉模式

一个简化过程:

text
图片
 ↓
卷积层
 ↓
特征图
 ↓
更高级特征
 ↓
文字识别

10. RNN / LSTM 为什么曾经用于 OCR? ​

文字天然具有序列结构。

例如:

text
C → H → A → T

字符之间存在顺序关系。

因此可以把一张文字图片看成:

text
视觉特征
 ↓
特征序列
 ↓
RNN / LSTM
 ↓
字符序列

LSTM 擅长处理序列中的上下文关系,因此曾经是 OCR 识别模型中的常见组件。

现代系统中,Transformer 已经大量替代传统 RNN 架构。


11. CTC 是什么? ​

CTC(Connectionist Temporal Classification)是 OCR 中非常重要的概念。

初学者可以先理解它解决的问题:

图片中的视觉特征序列,与最终字符序列之间通常没有明确的一一对应关系。

例如模型可能输出:

text
图像位置: 1  2  3  4  5  6
模型输出: C  C  -  A  T  T

其中 - 可以看作 blank。

经过 CTC 解码后:

text
CC-ATT
 ↓
去除重复字符
C-ATT
 ↓
去掉 blank
CAT

实际 CTC 机制比这个例子严格得多,但对于入门阶段,可以先记住:

CTC 可以在不要求逐字符标注对齐位置的情况下,学习从输入序列到输出文字序列的映射。


12. Attention 是什么? ​

Attention 可以理解为:

模型在处理当前内容时,动态关注输入中更重要的部分。

例如识别:

text
HELLO

当模型预测 H 时,它更关注文字图片左边;预测 O 时,更关注右边。

概念上可以理解为:

text
图片特征
────────────────────
 ↑    ↑       ↑    ↑
注意 注意    注意 注意

Attention 对长文本、不规则文本识别尤其重要。


13. Transformer 与 OCR ​

Transformer 最初在自然语言任务中非常成功,随后也被广泛应用于视觉和 OCR。

Transformer 的核心思想是 Self-Attention。

对于 OCR,可以建立这样的处理过程:

text
文字图片
   ↓
视觉编码器
   ↓
视觉特征
   ↓
Transformer
   ↓
字符序列

Transformer 的优点包括:

  • 更强的全局建模能力
  • 更适合长距离依赖
  • 易于并行训练
  • 能够统一视觉与序列建模

现代 OCR、文档理解、多模态模型中,经常能看到 Transformer。


14. 文本检测模型 ​

OCR 中常见的检测思路大致可以分为:

14.1 基于回归的方法 ​

直接预测文字区域的位置。

可以理解为:

text
图片
 ↓
检测网络
 ↓
文字框坐标

14.2 基于分割的方法 ​

把文字看成图像中的一个区域,先预测哪些像素属于文字。

例如:

text
背景 背景 文 文 文 背景
背景 文 文 文 背景 背景

最后根据文字区域生成文本框。

这种方法对不规则文字尤其有价值。


14.3 常见检测模型思路 ​

学习 OCR 时常会遇到一些代表性方法,例如:

  • EAST
  • CRAFT
  • DB / DBNet
  • PSENet
  • TextSnake

不需要一开始全部掌握。

初学阶段重点理解:

text
输入图片
 ↓
找到文字区域
 ↓
输出文本框 / 文本多边形

即可。


15. 文本识别模型 ​

文本识别模型的发展可以粗略理解为:

text
CNN
 ↓
CNN + RNN/LSTM
 ↓
CNN + CTC
 ↓
Attention-based OCR
 ↓
Transformer OCR
 ↓
视觉语言模型 / 多模态模型

典型思路包括:

CRNN ​

CRNN(Convolutional Recurrent Neural Network)是经典 OCR 模型。

常见结构:

text
图片
 ↓
CNN
 ↓
特征序列
 ↓
BiLSTM
 ↓
CTC
 ↓
文本

CRNN 非常值得初学者学习,因为它能帮助理解现代 OCR 的很多基础思想。


16. OCR 为什么不能只用一个分类器? ​

初学者很容易产生一个疑问:

“既然识别字符就是分类,那把图片分类成 A、B、C……不就行了吗?”

问题在于,一张图片可能是一整行文字:

text
Hello World

输出并不是一个类别,而是一个长度不固定的序列:

text
H e l l o   W o r l d

所以 OCR 更接近:

text
图像 → 可变长度序列

而不是:

text
图像 → 单一类别

17. 中文 OCR 为什么更复杂? ​

英文:

text
A-Z

常见字符数量相对有限。

中文则不同,字符数量庞大,而且:

  • 字形相似
  • 字符笔画复杂
  • 中文、数字、英文经常混排
  • 生僻字较多
  • 字体变化明显

例如:

text
项目编号:A2026-001
金额:¥12,800.00
地址:北京市朝阳区……

一个 OCR 模型往往需要同时处理:

text
中文 + 英文 + 数字 + 标点 + 符号

因此字符集设计、训练数据和语言模型都非常重要。


18. OCR 的常见难点 ​

18.1 模糊 ​

例如手机拍照:

text
清晰 → 模糊

解决思路:

  • 提升输入分辨率
  • 图像增强
  • 超分辨率
  • 更鲁棒的识别模型

18.2 倾斜和旋转 ​

文字可能:

text
水平
倾斜
90°
180°

需要方向检测和旋转校正。


18.3 透视变形 ​

常见于手机拍照文档。

解决思路:

  • 文档边界检测
  • 透视变换
  • 几何校正

18.4 复杂背景 ​

例如街景:

text
墙面 + 车 + 人 + 广告 + 文字

检测模型必须从复杂背景中找到文字。


18.5 光照问题 ​

包括:

  • 过曝
  • 欠曝
  • 阴影
  • 反光
  • 不均匀照明

18.6 字符粘连 ​

例如:

text
ABCD

因为模糊变成:

text
A↔B↔C↔D

字符边界很难区分。


18.7 手写文字 ​

手写体的差异通常比印刷体大很多。

同一个字可能存在大量写法:

text
同一字符
   ↓
不同人的不同写法

所以手写 OCR 通常比规范印刷文本更困难。


19. OCR 的训练数据 ​

深度学习 OCR 非常依赖数据。

训练样本通常包括:

text
图片 + 标注

检测数据 ​

例如:

text
图片
+
文字框坐标

识别数据 ​

例如:

text
文字图片
+
对应文本

例如:

text
image_001.png → "北京大学"

20. OCR 数据增强 ​

为了提高模型的鲁棒性,可以模拟真实世界的各种情况。

常见增强方式:

  • 随机旋转
  • 随机缩放
  • 模糊
  • 噪声
  • 亮度变化
  • 对比度变化
  • 仿射变换
  • 透视变换
  • 背景替换

目标是让模型不要只记住“标准图片”,而是学习更稳定的文字特征。


21. OCR 的后处理 ​

OCR 模型输出不一定百分之百正确,因此经常需要后处理。

例如模型识别:

text
2026-O9-O9

实际上可能应该是:

text
2026-09-09

可以结合规则进行修正。

常见后处理方式:

  • 正则表达式
  • 字典匹配
  • 领域词表
  • 拼写纠错
  • 格式约束
  • 语言模型

例如电话号码可以使用规则:

text
\d{3}-\d{4}-\d{4}

这样能够帮助纠正明显不合理的结果。


22. OCR 的准确率怎么衡量? ​

常见指标包括:

22.1 字符准确率 ​

可以粗略理解为:

text
正确字符数量 / 总字符数量

22.2 CER ​

CER(Character Error Rate,字符错误率)是 OCR 中非常常见的指标。

可以理解为:

text
CER = 字符级编辑距离 / 真实字符数

编辑距离通常考虑:

  • 插入(Insertion)
  • 删除(Deletion)
  • 替换(Substitution)

CER 越低通常越好。


22.3 WER ​

WER(Word Error Rate,词错误率)更常用于英文语音或文本序列任务,也可以用于部分 OCR 场景。

中文没有天然空格分词,因此中文 OCR 更经常关注字符级指标。


23. 一个完整 OCR 系统长什么样? ​

一个较完整的系统可以是:

text
                 原始图片
                     │
                     ▼
                图片预处理
                     │
                     ▼
                文本方向检测
                     │
                     ▼
                文本区域检测
                     │
          ┌──────────┼──────────┐
          ▼          ▼          ▼
        区域1       区域2       区域3
          │          │          │
          └──────────┼──────────┘
                     ▼
                  文字识别
                     │
                     ▼
                  后处理
                     │
                     ▼
                结构化输出

对于文档场景,还可能增加:

text
版面分析
表格识别
公式识别
阅读顺序恢复
键值对抽取
文档分类

24. OCR 与大语言模型 / 多模态模型 ​

近年来,OCR 正逐渐从“只识别文字”走向“理解文档”。

传统 OCR:

text
图片 → 文字

更先进的文档理解系统:

text
图片
 ↓
文字 + 位置 + 版面
 ↓
结构理解
 ↓
语义理解
 ↓
用户需要的信息

例如用户给一张发票,不一定只想得到全部文字,而可能想问:

text
发票金额是多少?
发票日期是什么?
购买方是谁?

这就属于从 OCR 向**文档智能(Document Intelligence)**扩展。

因此可以把发展方向粗略理解为:

text
OCR
 ↓
Document AI
 ↓
多模态理解

25. OCR 与 NLP 的结合 ​

OCR 负责把视觉内容变成文字,NLP 则可以进一步处理文字。

例如:

text
图片
 ↓
OCR
 ↓
"张三于2026年9月9日在北京签署合同"
 ↓
NLP
 ↓
人物:张三
日期:2026-09-09
地点:北京

这就是典型的视觉 + 语言组合。


26. 初学者应该怎么学 OCR? ​

建议不要一上来就研究很复杂的论文。

可以按照下面的顺序学习。

第一阶段:图像处理基础 ​

先掌握:

  • 像素
  • RGB / 灰度
  • 二值化
  • 卷积
  • 滤波
  • 边缘检测
  • 图像缩放
  • 旋转
  • 仿射变换
  • 透视变换

重点理解:

图片究竟是怎样进入神经网络的?


第二阶段:机器学习基础 ​

掌握:

  • 训练集 / 验证集 / 测试集
  • 分类
  • 损失函数
  • 梯度下降
  • 反向传播
  • 过拟合
  • 数据增强

第三阶段:深度学习基础 ​

学习:

  • CNN
  • RNN
  • LSTM
  • Attention
  • Transformer
  • Softmax
  • CTC

其中 OCR 初学阶段尤其值得理解:

text
CNN + LSTM + CTC

它是理解 OCR 演进历史的一条很好路径。


第四阶段:学习文本检测 ​

重点理解:

text
图片 → 找到文字位置

然后学习典型检测方法,例如:

  • EAST
  • CRAFT
  • DBNet

第五阶段:学习文本识别 ​

重点理解:

text
文字图片 → 字符序列

建议按:

text
CRNN
 ↓
CTC
 ↓
Attention
 ↓
Transformer

这样的顺序学习。


第六阶段:学习文档 AI ​

进一步学习:

  • 版面分析
  • 表格识别
  • 公式识别
  • Key-Value 抽取
  • 文档分类
  • 阅读顺序
  • 文档问答

这时会逐渐接近实际业务中的 OCR 系统。


27. 初学者最应该掌握的概念 ​

如果暂时不准备深入论文,先把下面这些概念搞懂:

text
OCR
├── Text Detection
├── Text Recognition
├── Layout Analysis
├── Table Recognition
├── Preprocessing
├── Post-processing
├── CNN
├── RNN / LSTM
├── CTC
├── Attention
└── Transformer

其中最重要的逻辑是:

text
图片
 ↓
检测文字在哪里
 ↓
识别文字是什么
 ↓
理解文字之间的结构和关系

28. OCR 的一个简单类比 ​

可以把 OCR 想象成人类阅读。

第一步:发现文字 ​

人看到一张海报:

text
“发现这里有文字。”

对应:

text
Text Detection

第二步:看清字符 ​

人开始辨认:

text
这几个字是:人工智能

对应:

text
Text Recognition

第三步:理解版面 ​

人知道:

text
上面是标题
下面是正文
右边是价格

对应:

text
Layout Analysis

第四步:理解语义 ​

人知道:

text
这是一个商品价格

对应:

text
Document Understanding

这个类比非常重要,因为它能够帮助理解现代 OCR 为什么越来越接近视觉语言模型。


29. 学习 OCR 时常见误区 ​

误区一:OCR 就是 Tesseract ​

不是。

Tesseract 是一个 OCR 引擎,而 OCR 是一个更大的技术领域。

可以理解为:

text
OCR(技术领域)
├── Tesseract
├── 各类商业 OCR
├── 深度学习 OCR
└── 文档理解系统

误区二:OCR 只有字符识别 ​

实际上现代 OCR 往往包含:

text
检测
识别
方向分类
版面分析
表格识别
结构化
语义理解

误区三:模型越大,OCR 一定越好 ​

不一定。

OCR 效果还受到很多因素影响:

  • 输入图像质量
  • 分辨率
  • 文字大小
  • 字体
  • 背景
  • 数据分布
  • 检测效果
  • 后处理

例如:

text
识别模型很好
但检测框错了
      ↓
识别仍然会失败

因此 OCR 是一个完整 pipeline,而不是单一模型的问题。


30. OCR 实践时的排查顺序 ​

当 OCR 识别效果差时,可以按下面顺序排查:

text
1. 图片清晰吗?
       ↓
2. 文字区域检测正确吗?
       ↓
3. 文字是否倾斜/旋转?
       ↓
4. 裁剪后的文字足够大吗?
       ↓
5. 识别模型是否适合当前语言?
       ↓
6. 字符集是否覆盖?
       ↓
7. 是否需要方向分类?
       ↓
8. 是否需要后处理?

一个很常见的情况是:

先不要急着换识别模型,首先检查检测结果和输入图片。


31. OCR 项目的核心指标 ​

实际工程中通常不仅关注准确率,还关注:

准确性 ​

text
CER / 字符准确率

速度 ​

text
FPS
Latency

资源消耗 ​

text
CPU
GPU
内存

鲁棒性 ​

不同情况下是否稳定:

text
低光照
模糊
倾斜
小字体
复杂背景
不同字体

因此真实项目经常需要在:

text
精度 ↔ 速度 ↔ 模型大小

之间做平衡。


32. 一个完整的 OCR 思维框架 ​

学习 OCR 时,可以始终从五个问题出发:

① Where:文字在哪里? ​

对应:

text
Text Detection

② What:文字是什么? ​

对应:

text
Text Recognition

③ How:图片为什么难识别? ​

对应:

text
Image Processing
Data Augmentation
Model Robustness

④ Structure:文字之间是什么关系? ​

对应:

text
Layout Analysis
Table Recognition
Reading Order

⑤ Meaning:这些文字表达什么? ​

对应:

text
Document Understanding
NLP
Multimodal AI

把这五个问题掌握后,OCR 的整体框架就比较清楚了。


33. 推荐的入门实践路线 ​

可以采用下面的实践顺序:

text
练习 1:识别简单印刷文字
        ↓
练习 2:识别图片中的多行文字
        ↓
练习 3:处理旋转文字
        ↓
练习 4:处理手机拍照文档
        ↓
练习 5:检测 + 识别完整 OCR pipeline
        ↓
练习 6:表格识别
        ↓
练习 7:版面分析
        ↓
练习 8:文档信息抽取
        ↓
练习 9:多模态文档理解

34. 总结 ​

OCR 可以从简单到复杂分成几个层次:

text
Level 1
图片 → 文字

Level 2
图片 → 文字 + 位置

Level 3
图片 → 文字 + 位置 + 版面结构

Level 4
图片 → 结构化文档

Level 5
图片 → 语义理解 / 问答

最核心的知识可以浓缩成:

text
OCR
│
├── 图像预处理
│
├── 文本检测
│     └── 文字在哪里?
│
├── 文本识别
│     └── 文字是什么?
│
├── 版面分析
│     └── 文字怎么组织?
│
├── 表格/结构识别
│     └── 文档结构是什么?
│
└── 文档理解
      └── 这些文字表达什么?

对于初学者,最值得建立的认知是:

OCR 不是单纯“把图片变成文字”,而是一套从视觉定位、文字识别到文档结构理解的完整技术体系。


35. 一页速记 ​

text
OCR = Optical Character Recognition

核心流程:
图片
 ↓
预处理
 ↓
文字检测 Detection
 ↓
文字识别 Recognition
 ↓
后处理
 ↓
结构化文本

关键模型 / 技术:
CNN
RNN
LSTM
CTC
Attention
Transformer
DBNet
CRNN

核心难点:
模糊
旋转
倾斜
透视
复杂背景
低光照
手写
中英文混排

进阶方向:
版面分析
表格识别
文档理解
多模态模型