主题
OCR(光学字符识别)入门笔记
适合初学者:从 OCR 是什么、怎么工作,到常见算法、模型、工程难点与学习路线。
1. OCR 是什么?
OCR(Optical Character Recognition,光学字符识别)是指:
让计算机从图片、扫描件、截图、照片等视觉内容中识别出文字,并转换成可编辑、可搜索的文本。
例如:
text
输入图片:
┌────────────────────┐
│ 欢迎来到北京 │
│ Hello World │
│ 2026-09-09 │
└────────────────────┘
OCR 输出:
欢迎来到北京
Hello World
2026-09-09OCR 不只是“识别字符”,实际系统通常还要解决:
- 图片中哪里有文字?
- 每一行文字在哪里?
- 文字是什么内容?
- 多行、多列、表格应该如何排列?
- 字符方向是否正确?
- 文字模糊、倾斜、低分辨率时怎么办?
因此,一个完整的 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
核心难点:
模糊
旋转
倾斜
透视
复杂背景
低光照
手写
中英文混排
进阶方向:
版面分析
表格识别
文档理解
多模态模型