Skip to content

OCR 文字识别

OCR(光学字符识别)是把图像中的文字提取成可编辑文本的技术。从 1960 年代的邮政编码识别到今天的 PaddleOCR、TrOCR,OCR 经历了从手工特征到深度学习、从规则模板到 Transformer 的完整演进。前置阅读:CNN 卷积网络、Transformer 架构、ViT 视觉 Transformer。

把 OCR 想象成一个人读信:

  • 文字检测 = 先用眼睛扫一遍信纸,找到”哪里有字”——框出每行、每段甚至每个单词的位置。
  • 文字识别 = 再把框出来的区域逐个读出来——像小时候看图认字,从像素图案映射到对应汉字或字母。
  • 端到端 OCR = 一个高手一眼扫过整封信,同时完成定位和识别——不需要先框再读两步走。

传统 OCR(检测→分割→识别→后处理)像流水线工人分工合作;现代端到端模型(TrOCR、GOT-OCR2.0)像一个全栈翻译,一个网络通吃。而最新的趋势是视觉语言模型(VLM)——把 OCR 当作大语言模型的一项”阅读理解”能力,让一个模型既能认字、又能理解版面结构甚至回答关于文档的问题(如 PaddleOCR-VL)。

  1. 文字检测:在整张图中找到文字区域,输出矩形框(或多边形)。经典方法如 CTPN 用垂直锚框检测文本行;EAST 用全卷积网络直接输出得分图和几何框;DB(Differentiable Binarization)在分割图上做可微分二值化,能处理弯曲文本。
  2. 文字识别:把每个检测到的文字区域(透视校正后)送入识别网络。CRNN+CTC 是最经典的方案。
  3. 后处理:拼写纠错、排版还原、表格结构恢复等。

CRNN(Convolutional Recurrent Neural Network)是 2015 年提出的,至今仍是 OCR 识别的主流方案之一,三段式结构:

  1. CNN 特征提取:用 CNN(如 ResNet)把输入图像(高度归一化为 32 像素)压缩为特征序列。一张宽 W 的图经过若干卷积下采样后,宽度变为 W/4,得到一个”从左到右”的特征向量序列。
  2. BiLSTM 序列建模:双向 LSTM 在特征序列上跑一遍,捕捉字符之间的上下文关系——比如看到”中”后面大概率跟”国”而非随机汉字。
  3. CTC 解码:CTC(Connectionist Temporal Classification)解决”特征序列长度 > 字符数”的对齐问题。它允许输出中出现空白符(blank),最终通过合并重复字符和删除空白符得到识别结果。

以原始 CRNN 论文(Shi et al., 2017)的标准配置为例,设输入图像为灰度图 H=32, W∈[16, 400](宽度可变,宽度即序列长度来源):

输入: [1, 32, W]
│
├─ Conv2d(1→64, k=3, s=1, p=1) + ReLU + MaxPool(2,2) → [64, 16, W/2]
├─ Conv2d(64→128, k=3, s=1, p=1) + ReLU + MaxPool(2,2) → [128, 8, W/2]
├─ Conv2d(128→256, k=3, s=1, p=1) + BN + ReLU → [256, 8, W/2]
├─ Conv2d(256→256, k=3, s=1, p=1) + BN + ReLU → [256, 8, W/2]
├─ Conv2d(256→512, k=3, s=1, p=1) + BN + ReLU → [512, 8, W/2]
├─ Conv2d(512→512, k=3, s=1, p=1) + BN + ReLU → [512, 4, W/2]
├─ Conv2d(512→512, k=2, s=1, p=0) + ReLU → [512, 1, W/2]
│
└─ 特征图 [512, 1, W/2] → 按宽度切片 → 序列长度 T=W/2,每步 512 维向量
│
├─ BiLSTM(input=512, hidden=256, layers=2) → [T, 512]
└─ Linear(512 → C+1) → [T, C+1] (C = 字符集大小,+1 = blank)

共 8 层卷积 + 2 层双向 LSTM + 1 个线性投影头。对于中文 OCR,C 可达数千(常用 GB2312 收录 3755 字,GBK 收录 21003 字)。参数量约为 8–20M(视 backbone 而定),远小于现代 LLM,这也是它能在移动端实时运行的原因。

直觉类比:CNN 像把图片压成一条”气味条”,每一个时间步是气味条上的一小段;BiLSTM 像一条蛇沿气味条左右游走,综合前后文判断每一段最可能是什么字;CTC 像最后的”去重整理员”,把连续重复和空白去掉,给出最终句子。

设字符集为 A,额外引入一个空白符 ε,输出空间为 A' = A ∪ {ε}。对于长度 T 的特征序列,网络在每个时间步输出 |A'| 类的概率分布:

p(yt=k∣x)=exp⁡(wk⋅ht)∑k′exp⁡(wk′⋅ht)p(y_t = k \mid x) = \frac{\exp(w_k \cdot h_t)}{\sum_{k'} \exp(w_{k'} \cdot h_t)}

一条路径(path,又称 alignment)π = (π_1, ..., π_T) 的概率为各步独立相乘:

p(π∣x)=∏t=1Tp(πt∣x)p(\pi \mid x) = \prod_{t=1}^{T} p(\pi_t \mid x)

CTC 定义一个多对一映射 B:先删除空白,再合并相邻的重复字符。例如 B("hhe-ll-lo") = "hello"(- 代表 blank)。目标标签 l 的条件概率是所有能映射到它的路径概率之和:

p(l∣x)=∑π: B(π)=lp(π∣x)p(l \mid x) = \sum_{\pi : \, \mathcal{B}(\pi) = l} p(\pi \mid x)

直接枚举所有路径是指数级的,实践中用**前向-后向算法(forward-backward)**在格(lattice)上动态规划求解,复杂度 O(T × |l|)。最终损失为负对数似然:

LCTC=−ln⁡(∑π: B(π)=lp(π∣x))\mathcal{L}_{\text{CTC}} = -\ln \left( \sum_{\pi : \, \mathcal{B}(\pi) = l} p(\pi \mid x) \right)

训练时不需要逐字符标注位置,只需知道图片对应的文字内容即可——这大大降低了标注成本。

为什么需要 blank? 没有空白符就无法区分”两个连续相同字符”和”一个长字符”。例如输出 aa 既可能是 “aa”,也可能是 “a”。引入 blank 后,a-a 映射为 “aa”,aa 映射为 “a”,对齐问题迎刃而解。

方法核心思想特点
CTPN在 CNN 特征上用垂直锚框检测文本行片段,再拼接擅长水平长文本
EAST全卷积网络直接预测文本得分图和旋转矩形/多边形速度快,端到端
DB在分割概率图上做可微分二值化,自适应阈值处理弯曲、不规则文本
FCENet用傅里叶变换拟合文本轮廓任意形状文本

标准二值化是不可导的硬阈值 B̂ = 1[P ≥ t],DB 用一个可微的近似函数替代:

B^=11+exp⁡(−k⋅(P−T))\hat{B} = \frac{1}{1 + \exp(-k \cdot (P - T))}

其中 P 是网络预测的概率图,T 是网络预测的自适应阈值图,k 是放大系数(默认 50)。这样梯度可以从二值化结果回传到分割网络,让端到端训练成为可能。后处理时再用标准二值化得到最终的文字掩码连通域。

  • TrOCR(Transformer-based OCR):encoder 用 ViT/CNN 提取图像 patch 特征,decoder 用 Transformer 自回归生成文本。不需要 CTC,直接 seq2seq,在手写体、文档理解上表现优异。
  • PaddleOCR:百度开源的工具套件,集成了 PP-OCR 系列模型(轻量 CNN + CTC),支持 80+ 语种,部署极轻量(模型仅几 MB),是工业界最流行的 OCR 方案之一。

TrOCR 把 OCR 建模成图像到文本的序列到序列(seq2seq)翻译问题:

  • Encoder:使用预训练的 ViT(如 DeiT、BEiT)。将输入图像(如 384×384)切分为 16×16 的 patch,每个 patch 线性投影为 embedding,加上位置编码后送入多层 Transformer encoder,输出一组视觉 token。
  • Decoder:标准自回归 Transformer decoder,每一步根据已生成的文本 token 和 encoder 输出(通过 cross-attention)预测下一个 token,损失是标准的字符级交叉熵:
LCE=−∑t=1Llog⁡p(yt∣y<t, ViT(x))\mathcal{L}_{\text{CE}} = -\sum_{t=1}^{L} \log p(y_t \mid y_{<t}, \, \text{ViT}(x))

TrOCR 的训练分三阶段:(1) 大规模合成数据(数亿张)预训练;(2) 人工标注数据微调;(3) 自标注数据进一步提升。基础版 TrOCR-Base 约 334M 参数,TrOCR-Large 约 558M。

from paddleocr import PaddleOCR # 导入 PaddleOCR
# 初始化:同时做检测+识别,语言设为中文
ocr = PaddleOCR(use_angle_cls=True, lang="ch")
result = ocr.ocr("invoice.jpg", cls=True) # 识别一张发票图片
for line in result[0]: # 遍历每一条检测结果
box, (text, conf) = line[0], line[1] # 文字框坐标 + (文本, 置信度)
print(f"识别: {text} (置信度 {conf:.2%})")
# PaddleOCR 自动完成 检测→校正→识别 全流程
import easyocr # pip install easyocr
reader = easyocr.Reader(["ch_sim", "en"]) # 中英文模型
results = reader.readtext("sign.jpg") # 读取路牌/招牌
for bbox, text, confidence in results:
print(f"{text} ({confidence:.2f})") # 输出每行文字及置信度
# easyocr 底层用 CRAFT 做检测 + CRNN/ResNet 做识别

下面是一个可运行的最小实现,帮助理解 CRNN 的数据流和 CTC 训练流程:

import torch
import torch.nn as nn
class CRNN(nn.Module):
"""最小化 CRNN:CNN 特征提取 → BiLSTM 序列建模 → 线性投影到字符表"""
def __init__(self, img_h, num_channels, num_classes, hidden=256):
super().__init__()
# —— 1. CNN backbone:标准 CRNN 的 7 层卷积配置 ——
# 每组 Conv+ReLU+MaxPool 逐步把 H 下采样到 1,宽度下采样到 W/4
self.cnn = nn.Sequential(
nn.Conv2d(num_channels, 64, 3, 1, 1), nn.ReLU(True), nn.MaxPool2d(2, 2),
nn.Conv2d(64, 128, 3, 1, 1), nn.ReLU(True), nn.MaxPool2d(2, 2),
nn.Conv2d(128, 256, 3, 1, 1), nn.BatchNorm2d(256), nn.ReLU(True),
nn.Conv2d(256, 256, 3, 1, 1), nn.BatchNorm2d(256), nn.ReLU(True),
nn.Conv2d(256, 512, 3, 1, 1), nn.BatchNorm2d(512), nn.ReLU(True),
nn.Conv2d(512, 512, 3, 1, 1), nn.BatchNorm2d(512), nn.ReLU(True),
nn.MaxPool2d((2, 1), (2, 1)), # 只在高度上池化
nn.Conv2d(512, 512, 2, 1, 0), nn.ReLU(True),
)
assert img_h % 32 == 0, "img_h 必须是 32 的倍数"
# —— 2. 双向 LSTM 序列建模 ——
self.rnn = nn.LSTM(
input_size=512, hidden_size=hidden, num_layers=2,
bidirectional=True, batch_first=False,
)
# —— 3. 线性投影到字符表(含 blank) ——
self.fc = nn.Linear(2 * hidden, num_classes)
self.init_weights()
def init_weights(self):
for m in self.modules():
if isinstance(m, nn.Conv2d):
nn.init.kaiming_normal_(m.weight, nonlinearity="relu")
elif isinstance(m, nn.Linear):
nn.init.xavier_uniform_(m.weight)
def forward(self, x):
# x: [B, C, 32, W]
feat = self.cnn(x) # [B, 512, 1, W']
b, c, h, w = feat.size()
assert h == 1
feat = feat.squeeze(2) # [B, 512, W']
feat = feat.permute(2, 0, 1) # [W', B, 512] → (seq, batch, feat)
out, _ = self.rnn(feat) # [W', B, 2*hidden]
out = self.fc(out) # [W', B, num_classes]
# 返回 log-probabilities,CTCLoss 期望这个形状
return out.log_softmax(2)
# —— 训练步示例 ——
model = CRNN(img_h=32, num_channels=1, num_classes=len(charset) + 1) # +1 为 blank
ctc_loss = nn.CTCLoss(blank=0, reduction="mean", zero_infinity=True)
optimizer = torch.optim.AdamW(model.parameters(), lr=3e-4, weight_decay=1e-5)
for images, targets, target_lengths in dataloader:
# images: [B, 1, 32, W],targets: 拼接后的目标序列,target_lengths: 每条样本长度
log_probs = model(images) # [T, B, C]
input_lengths = torch.full(
size=(images.size(0),), fill_value=log_probs.size(0), dtype=torch.long
)
loss = ctc_loss(log_probs, targets, input_lengths, target_lengths)
optimizer.zero_grad()
loss.backward()
nn.utils.clip_grad_norm_(model.parameters(), 5.0) # 梯度裁剪防爆炸
optimizer.step()

一个关键坑:CTCLoss 要求输入 log_probs 的形状是 [T, B, C](时间步在前),目标 targets 是拼接后的 1D 张量(不是 list),input_lengths 必须等于网络输出的实际序列长度 T。第一项很容易和 [B, T, C] 搞混导致报错。

from transformers import TrOCRProcessor, VisionEncoderDecoderModel
processor = TrOCRProcessor.from_pretrained("microsoft/trocr-base-handwritten")
model = VisionEncoderDecoderModel.from_pretrained("microsoft/trocr-base-handwritten")
from PIL import Image
image = Image.open("handwritten_note.png").convert("RGB")
pixel_values = processor(image, return_tensors="pt").pixel_values
generated = model.generate(pixel_values)
text = processor.batch_decode(generated, skip_special_tokens=True)[0]
print(text) # 直接输出整行手写文本,无需检测
  • 检测先行:OCR 的上限往往由文字检测决定。检测漏框、框不准,识别再好也无济于事。弯曲文本场景优先选 DB 系列。
  • 图像预处理很关键:倾斜校正、去噪、二值化、对比度增强能大幅提升传统 OCR 的准确率。深度模型对预处理要求低,但极端光照/模糊仍需处理。
  • CTC 解码策略:贪心解码(每步取最大概率字符)速度快但不够鲁棒;beam search 解码保留 top-k 路径,准确率更高。生产环境推荐 beam search + 语言模型重打分。
  • 模型选型:文档/印刷体选 PaddleOCR(快且轻);手写体/复杂场景选 TrOCR(准但重);部署到移动端选 PP-OCR Mobile(仅 3MB)。
  • 长文本处理:超长文档(如合同扫描件)先做版面分析切分为段落/表格/图片区域,再分别 OCR,避免单张图信息过载。
  • 数据增强:OCR 场景常用 TIA(Text Image Augmentation,一种透视+扭曲增强)、随机旋转(±15°)、运动模糊、高斯噪声、颜色抖动、随机透视变换。注意不要破坏文字可读性——增强太狠会引入噪声标签。PaddleOCR 用合成的策略大规模生成训练样本(用不同字体、背景、排版渲染图片),这是它在多语种上快速扩展的关键。
  • 学习率策略:推荐 warmup + cosine annealing。前 1–2 个 epoch 线性升温到峰值学习率(CRNN 约 3e-4,TrOCR 约 5e-5),之后余弦退火到 1e-6。warmup 能稳定早期训练,避免 BiLSTM/Transformer 因初始大梯度发散。
  • 正则化:CNN 部分用 BatchNorm + Dropout(0.1–0.3);Transformer 部分用 weight decay(AdamW, 0.01–0.05)+ attention dropout。CRNN 时代常用 weight decay 1e-5。检测网络(如 DB)常用空间 dropout / DropBlock 增强泛化。
  • 梯度裁剪:BiLSTM 和 Transformer 都易梯度爆炸,建议 clip_grad_norm_=5.0(CRNN)或 1.0(Transformer)。
  • Batch 构造:OCR 输入宽度可变,一个 batch 内通常按宽度排序并 padding 到该 batch 最大宽度,减少无效计算。PaddleOCR 还会动态调整 batch 大小以控制显存占用。
  • blank 标签的约定:通常把 blank 放在字符表索引 0,CTCLoss(blank=0)。部分实现放在最后一位,需与 charset 定义保持一致。

近两年 OCR 领域最重要的变化是:视觉语言模型(VLM)把 OCR 从”只认字”推向”理解文档”,以及通用大模型在文档任务上对专用 OCR 的全面挑战与反超。

GOT(General OCR Theory)提出了”OCR-2.0”概念:不再区分文本/公式/表格/图表,把所有人工光学信号(纯文本、数学公式、分子式、表格、图表、乐谱甚至几何图形)统一视为”字符”。模型采用高压缩 encoder + 长上下文 decoder的端到端结构,580M 参数即可同时完成:

  • 多格式输出:纯文本、Markdown、TikZ(图形)、SMILES(分子式)、Kern(乐谱);
  • 区域级识别:通过坐标或颜色引导,只识别指定区域内的内容;
  • 动态分辨率与多页 OCR,支持整篇论文、整本书的连续处理。

直觉理解:如果说 CRNN+CTC 是”逐字朗读”,TrOCR 是”逐句誊写”,那么 GOT-OCR2.0 更像”整页理解”——它不只是一个 OCR 模型,而是一个能读公式、画图、谱曲的文档阅读器。

PaddleOCR-VL:0.9B 超紧凑视觉语言模型(2025–2026)

Section titled “PaddleOCR-VL:0.9B 超紧凑视觉语言模型(2025–2026)”

百度在 2025 年 10 月推出 PaddleOCR-VL,把 OCR 带入 VLM 时代。核心是 PaddleOCR-VL-0.9B,一个不到 10 亿参数的视觉语言模型:

  • 架构:NaViT 风格的动态高分辨率视觉 encoder(支持任意分辨率输入,不强制 resize)+ 轻量级语言模型 ERNIE-4.5-0.3B。
  • 能力:原生支持 109 种语言,能识别文本、表格、公式、图表,还能处理手写体和历史文档(如古籍)。
  • 部署友好:相比动辄几十上百 B 的通用 VLM,0.9B 可在单卡甚至高端 CPU 上高效推理。

后续迭代节奏极快:

  • PaddleOCR-VL-1.5(2026.01):引入 PP-DocLayoutV3 算法,首次系统化解决倾斜、卷曲、扫描、光照、屏幕拍照五大真实场景;支持印章识别、文字定位,扩展到 111 种语言;OmniDocBench 准确率达 94.5%。
  • PaddleOCR-VL-1.6(2026.05):OmniDocBench v1.6 准确率达 96.3%,在古籍、生僻字、印章、图表理解上大幅提升,开源与闭源方案中均处领先。

PaddleOCR 的传统强项——轻量 CNN+CTC 路线——在 2026 年依然在进化。PP-OCRv6 的 medium 档仅 34.5M 参数,却在公开基准上超越了 Qwen3-VL-235B、GPT-5.5 等数百倍于它的通用 VLM,检测精度比 PP-OCRv5 提升 4.6%,识别精度提升 5.1%。一个 unified 模型覆盖中、英、日及 46 种拉丁语系语言共 50 种语言,无需切换模型;CPU 端到端推理速度提升 5.2 倍(OpenVINO),Apple M4 上 tiny 档加速 6.1 倍。提供 tiny(1.5M) / small(7.7M) / medium(34.5M) 三档,覆盖移动端到服务器全场景。

HPD-Parsing:文档解析的高吞吐新范式(2026)

Section titled “HPD-Parsing:文档解析的高吞吐新范式(2026)”

2026 年 7 月发布的 HPD-Parsing 采用分层并行解码(hierarchical parallel decoding)+ 渐进式多 token 预测(Progressive Multi-Token Prediction, P-MTP),在公开基准上峰值吞吐达 4752 tokens/s,在保持有竞争力的解析精度下大幅提升推理效率,适合需要批量处理海量文档的 RAG、Agent 场景。它同时支持 OpenAI 兼容的 API 服务和本地推理(基于定制 vLLM runtime)。

  1. VLM 化:OCR 正从”专用小模型 + 流水线”转向”通用视觉语言模型”,一个模型同时做检测、识别、版面理解、结构化输出(Markdown/JSON)。
  2. 文档解析(Document Parsing)取代纯 OCR:输出不再只是文本,而是结构化数据,直接喂给下游 LLM/Agent,成为 RAG 系统的”数据入口”。
  3. 小模型对抗大模型:PP-OCRv6(34.5M)在专用任务上超越 235B 的通用 VLM,说明针对性优化的轻量模型在工业部署中仍有不可替代的价值。
  4. 合成数据 + 自训练:大规模合成渲染 + 模型自标注成为快速扩展多语种、多场景能力的主流方法(PaddleOCR、TrOCR、GOT 均如此)。
  • 证件识别:身份证、驾驶证、营业执照——自动提取关键字段,秒级完成,替代人工录入。各大银行、保险公司的标配。
  • 发票/票据自动化:财务系统自动识别发票金额、日期、税号,实现报销自动化。
  • 车牌识别:停车场出入口、交通违章抓拍,OCR + 车辆检测联合使用。
  • 文档数字化:将纸质档案、古籍扫描件转为可检索文本,Google Books、各大图书馆的核心技术。
  • 翻译拍照翻译:手机摄像头实时 OCR + 机器翻译——Google 翻译、百度翻译的拍照功能。
  • 验证码识别:自动识别图形验证码,既是安全攻防的战场,也用于无障碍辅助。
  • RAG 与 Agent 的文档入口:2025 年以来,OCR/文档解析成为 RAG(检索增强生成)系统的标配数据预处理层——把 PDF、扫描件、截图转成结构化 Markdown/JSON,再交给 LLM 检索与回答。Dify、RAGFlow、Cherry Studio 等平台都深度集成 PaddleOCR 作为数据引擎。
类库语言说明
PaddleOCRPython百度开源,支持 100+ 语种,轻量部署,工业界最流行;3.x 版本已集成 PP-StructureV3 版面分析、PaddleOCR-VL 视觉语言模型
easyocrPython基于 PyTorch,多语言支持好,几行代码即用
TesseractC++/PythonGoogle 开源的传统 OCR 引擎,历史悠久,印刷体效果好
TrOCR (HuggingFace)Python微软开源的 Transformer OCR,手写体和文档理解强
GOT-OCR2.0Python通用 OCR-2.0 模型,统一处理文本/公式/表格/图表/乐谱
MMOCRPython基于 MMDetection 的 OCR 工具箱,算法齐全
CnOCRPython专注中文的轻量 OCR,开箱即用
MinerUPython多类型文档转 Markdown 工具,深度集成 PaddleOCR
术语英文解释
光学字符识别OCR / Optical Character Recognition将图像中的文字转换为可编辑文本的技术
文字检测Text Detection在图像中定位文字区域,输出边界框或掩码
文字识别Text Recognition将裁剪出的文字图像转为字符序列
CRNNCRNNCNN 特征提取 + BiLSTM 序列建模的 OCR 经典架构
CTCConnectionist Temporal Classification解决变长序列对齐的损失函数,无需逐字符位置标注
可微分二值化Differentiable Binarization (DB)在分割概率图上用可学习阈值做二值化,端到端训练
端到端 OCREnd-to-End OCR一个模型同时完成检测和识别,如 TrOCR
TrOCRTransformer-based OCR用 ViT encoder + Transformer decoder 的 seq2seq OCR
beam searchBeam Search解码时保留 top-k 候选路径,比贪心解码更准确
版面分析Layout Analysis将文档图像切分为文本、表格、图片等区域
视觉语言模型Vision-Language Model (VLM)同时处理图像和文本的多模态大模型,可把 OCR 视为一种”阅读理解”能力
文档解析Document Parsing将整页文档转为结构化数据(Markdown/JSON),包含版面分析+OCR+结构恢复
多 token 预测Multi-Token Prediction (MTP)一次解码步骤预测多个 token,提升自回归模型吞吐量
OCR-2.0General OCR Theory把所有人工光学信号统一为”字符”的端到端 OCR 范式,以 GOT 为代表
  • Shi et al.,「An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition」(TPAMI 2017):CRNN+CTC 经典论文,OCR 领域引用量最高的工作之一。
  • Liao et al.,「Real-time Scene Text Detection with Differentiable Binarization」(AAAI 2020):DB 方法论文,提出可微分二值化,在弯曲文本上效果显著。
  • Li et al.,「TrOCR: Transformer-based Optical Character Recognition with Pre-trained Models」(arXiv 2021):微软 TrOCR 论文,将 Transformer 引入 OCR,大幅提升手写体识别。
  • Du et al.,「PP-OCR: A Practical Ultra Lightweight OCR System」(arXiv 2020):PaddleOCR 技术报告,详细介绍了轻量级 OCR 的工程优化策略。
  • Wei et al.,「GOT-OCR 2.0: General OCR Theory」(arXiv 2024, 2409.01704):提出 OCR-2.0 概念,580M 参数端到端统一模型,处理文本/公式/表格/图表/乐谱等所有光学字符。
  • Cui et al.,「PaddleOCR 3.0 Technical Report」(arXiv 2025, 2507.05595):PaddleOCR 3.x 架构与 PP-StructureV3、PP-OCRv5 的全面技术报告。
  • Cui et al.,「PaddleOCR-VL: Boosting Multilingual Document Parsing via a 0.9B Ultra-Compact Vision-Language Model」(arXiv 2025, 2510.14528):0.9B 超紧凑 VLM 实现 SOTA 文档解析,109 语言。
  • PaddleOCR GitHub:https://github.com/PaddlePaddle/PaddleOCR——工业级 OCR 工具箱,70k+ Stars,文档完善,适合上手实践。