飞桨(PaddlePaddle)OCR(光学字符识别)是基于深度学习的端到端文字识别系统,由百度飞桨团队研发并开源,其核心项目为 PaddleOCR 。它以高精度、轻量化、多语言支持和工业级部署能力著称,广泛应用于文档扫描、票据识别、车牌识别、屏幕文字提取等场景。

一、整体架构:两阶段端到端 pipeline
PaddleOCR 采用经典的 "检测 + 识别"两阶段架构(也支持端到端模型如 PP-OCRv4 中的 SAST、SVTR 等),主要包含以下两个核心模块:
1. 文本检测(Text Detection)
- 任务目标:定位图像中所有文本区域的位置(通常用四边形或多边形框表示)。
- 主流模型 :
- DB(Differentiable Binarization) :PaddleOCR 默认使用的轻量级检测模型。
- 基于分割思想,预测文本区域的概率图 + 阈值图。
- 通过可微分二值化操作,将概率图转为二值掩码,再通过后处理(如轮廓提取)得到文本框。
- 优点:速度快、精度高、支持任意方向文本。
- 其他可选模型:EAST、SAST(用于弯曲文本)等。
- DB(Differentiable Binarization) :PaddleOCR 默认使用的轻量级检测模型。
2. 文本识别(Text Recognition)
- 任务目标:将检测出的单行文本图像转换为对应的字符序列。
- 主流模型 :
- SVTR(Scene Text Vision Transformer) :PaddleOCR v3/v4 推荐的识别模型。
- 基于纯 Transformer 架构,摒弃 CNN,直接建模全局依赖。
- 支持中英文混合、数字、符号等,识别准确率高。
- CRNN(CNN + RNN + CTC) :早期经典结构。
- CNN 提取特征 → RNN 建模时序 → CTC 解码输出不定长文本。
- Attention-based 模型:适用于短文本或固定长度场景(如车牌)。
- SVTR(Scene Text Vision Transformer) :PaddleOCR v3/v4 推荐的识别模型。
✅ PP-OCR 系列(如 PP-OCRv3/v4)是 PaddleOCR 的优化版本,通过知识蒸馏、模型压缩、数据增强等技术,在保持高精度的同时大幅降低模型体积和推理耗时。
二、关键技术原理详解
1. DB(可微分二值化)检测原理
传统文本检测需设定固定阈值进行二值化,难以适应复杂背景。DB 引入自适应阈值图,使二值化过程可微分,从而端到端训练。
- 输入图像 → Backbone(如 MobileNetV3)→ FPN 特征融合
- 输出两个图:
- 概率图(Probability Map):每个像素属于文本的概率。
- 阈值图(Threshold Map):每个像素的局部最佳二值化阈值。
- 通过公式生成近似二值图(Approximate Binary Map) :
Papprox=11+e−k(P−T) P_{\text{approx}} = \frac{1}{1 + e^{-k(P - T)}} Papprox=1+e−k(P−T)1
其中 PPP 为概率图,TTT 为阈值图,kkk 为放大系数(如50)。 - 训练时用近似二值图计算 loss;推理时用真实二值图(P > T)提取轮廓。
2. SVTR 识别原理
SVTR 将文本识别视为视觉序列建模问题:
- 输入:裁剪后的文本图像(如 32×100)
- 使用 Patch Embedding 将图像划分为 token 序列
- 多层 Transformer Encoder 建模全局上下文
- 最终通过 Linear + Softmax 输出字符概率序列
- 无需 CTC 或 Attention 解码器,简化流程,提升速度与精度
3. 方向分类器(可选)
- 对于旋转角度较大的文本(如 ±90°),先用角度分类器(轻量 CNN)判断方向,再旋转校正,提升识别率。
三、训练与推理流程
训练流程(两阶段独立训练):
-
文本检测模型训练
- 数据:带多边形标注的图像(如 ICDAR、自采数据)
- Loss:结合概率图、阈值图、二值图的多任务 loss
-
文本识别模型训练
- 数据:单行文本图像 + 对应标签(如 "发票编号:123456")
- Loss:CTC Loss(CRNN)或 Cross-Entropy(SVTR)
-
模型优化(PP-OCR 特有):
- 知识蒸馏:大模型(Teacher)指导小模型(Student)
- 数据合成:使用 TextRender 合成百万级中文文本图像
- 量化/剪枝:支持 INT8 推理,适配移动端
推理流程(典型 pipeline):
是
否
输入图像
文本检测
是否启用方向分类?
角度分类 + 旋转校正
文本识别
输出识别结果
四、PaddleOCR 的核心优势
| 特性 | 说明 |
|---|---|
| 多语言支持 | 支持 80+ 语种,包括中文、英文、阿拉伯文、日文、韩文等 |
| 超轻量模型 | PP-OCRv4 检测+识别模型仅约 5MB,可在手机端实时运行 |
| 高精度 | 在多个公开数据集(ICDAR2015, SVT, CT80)上达到 SOTA |
| 开箱即用 | 提供预训练模型、推理脚本、Web Demo、Android/iOS SDK |
| 易扩展 | 支持自定义数据训练、模型替换、多后端部署(ONNX、TensorRT、Paddle Lite) |
五、快速体验示例(Python)
python
from paddleocr import PaddleOCR
# 初始化 OCR 引擎(自动下载模型)
ocr = PaddleOCR(use_angle_cls=True, lang='ch') # 中文识别
# 执行识别
result = ocr.ocr('example.jpg', cls=True)
# 打印结果
for line in result:
print(line[1][0], line[1][1]) # 识别文本,置信度
安装:
pip install "paddleocr>=2.6"
六、总结
PaddleOCR 的成功在于将前沿算法(DB + SVTR) 与 工程优化(蒸馏、量化、合成数据) 深度结合,实现了"精度-速度-体积"的最佳平衡。其开源生态完善,文档丰富,是当前最值得推荐的 OCR 解决方案之一,尤其适合中文场景和工业部署。