OCR 文字识别
OCR(光学字符识别)是把图像中的文字提取成可编辑文本的技术。从 1960 年代的邮政编码识别到今天的 PaddleOCR、TrOCR,OCR 经历了从手工特征到深度学习、从规则模板到 Transformer 的完整演进。前置阅读:CNN 卷积网络、Transformer 架构、ViT 视觉 Transformer。
把 OCR 想象成一个人读信:
- 文字检测 = 先用眼睛扫一遍信纸,找到”哪里有字”——框出每行、每段甚至每个单词的位置。
- 文字识别 = 再把框出来的区域逐个读出来——像小时候看图认字,从像素图案映射到对应汉字或字母。
- 端到端 OCR = 一个高手一眼扫过整封信,同时完成定位和识别——不需要先框再读两步走。
传统 OCR(检测→分割→识别→后处理)像流水线工人分工合作;现代端到端模型(TrOCR、GOT-OCR2.0)像一个全栈翻译,一个网络通吃。而最新的趋势是视觉语言模型(VLM)——把 OCR 当作大语言模型的一项”阅读理解”能力,让一个模型既能认字、又能理解版面结构甚至回答关于文档的问题(如 PaddleOCR-VL)。
传统 OCR 流程
Section titled “传统 OCR 流程”- 文字检测:在整张图中找到文字区域,输出矩形框(或多边形)。经典方法如 CTPN 用垂直锚框检测文本行;EAST 用全卷积网络直接输出得分图和几何框;DB(Differentiable Binarization)在分割图上做可微分二值化,能处理弯曲文本。
- 文字识别:把每个检测到的文字区域(透视校正后)送入识别网络。CRNN+CTC 是最经典的方案。
- 后处理:拼写纠错、排版还原、表格结构恢复等。
CRNN + CTC 架构
Section titled “CRNN + CTC 架构”CRNN(Convolutional Recurrent Neural Network)是 2015 年提出的,至今仍是 OCR 识别的主流方案之一,三段式结构:
- CNN 特征提取:用 CNN(如 ResNet)把输入图像(高度归一化为 32 像素)压缩为特征序列。一张宽 W 的图经过若干卷积下采样后,宽度变为 W/4,得到一个”从左到右”的特征向量序列。
- BiLSTM 序列建模:双向 LSTM 在特征序列上跑一遍,捕捉字符之间的上下文关系——比如看到”中”后面大概率跟”国”而非随机汉字。
- CTC 解码:CTC(Connectionist Temporal Classification)解决”特征序列长度 > 字符数”的对齐问题。它允许输出中出现空白符(blank),最终通过合并重复字符和删除空白符得到识别结果。
网络结构与数据流细节
Section titled “网络结构与数据流细节”以原始 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 像最后的”去重整理员”,把连续重复和空白去掉,给出最终句子。
CTC 损失的数学推导
Section titled “CTC 损失的数学推导”设字符集为 A,额外引入一个空白符 ε,输出空间为 A' = A ∪ {ε}。对于长度 T 的特征序列,网络在每个时间步输出 |A'| 类的概率分布:
一条路径(path,又称 alignment)π = (π_1, ..., π_T) 的概率为各步独立相乘:
CTC 定义一个多对一映射 B:先删除空白,再合并相邻的重复字符。例如 B("hhe-ll-lo") = "hello"(- 代表 blank)。目标标签 l 的条件概率是所有能映射到它的路径概率之和:
直接枚举所有路径是指数级的,实践中用**前向-后向算法(forward-backward)**在格(lattice)上动态规划求解,复杂度 O(T × |l|)。最终损失为负对数似然:
训练时不需要逐字符标注位置,只需知道图片对应的文字内容即可——这大大降低了标注成本。
为什么需要 blank? 没有空白符就无法区分”两个连续相同字符”和”一个长字符”。例如输出
aa既可能是 “aa”,也可能是 “a”。引入 blank 后,a-a映射为 “aa”,aa映射为 “a”,对齐问题迎刃而解。
场景文字检测方法
Section titled “场景文字检测方法”| 方法 | 核心思想 | 特点 |
|---|---|---|
| CTPN | 在 CNN 特征上用垂直锚框检测文本行片段,再拼接 | 擅长水平长文本 |
| EAST | 全卷积网络直接预测文本得分图和旋转矩形/多边形 | 速度快,端到端 |
| DB | 在分割概率图上做可微分二值化,自适应阈值 | 处理弯曲、不规则文本 |
| FCENet | 用傅里叶变换拟合文本轮廓 | 任意形状文本 |
DB(可微分二值化)的关键公式
Section titled “DB(可微分二值化)的关键公式”标准二值化是不可导的硬阈值 B̂ = 1[P ≥ t],DB 用一个可微的近似函数替代:
其中 P 是网络预测的概率图,T 是网络预测的自适应阈值图,k 是放大系数(默认 50)。这样梯度可以从二值化结果回传到分割网络,让端到端训练成为可能。后处理时再用标准二值化得到最终的文字掩码连通域。
端到端 OCR 与 Transformer 时代
Section titled “端到端 OCR 与 Transformer 时代”- TrOCR(Transformer-based OCR):encoder 用 ViT/CNN 提取图像 patch 特征,decoder 用 Transformer 自回归生成文本。不需要 CTC,直接 seq2seq,在手写体、文档理解上表现优异。
- PaddleOCR:百度开源的工具套件,集成了 PP-OCR 系列模型(轻量 CNN + CTC),支持 80+ 语种,部署极轻量(模型仅几 MB),是工业界最流行的 OCR 方案之一。
TrOCR 的架构细节
Section titled “TrOCR 的架构细节”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,损失是标准的字符级交叉熵:
TrOCR 的训练分三阶段:(1) 大规模合成数据(数亿张)预训练;(2) 人工标注数据微调;(3) 自标注数据进一步提升。基础版 TrOCR-Base 约 334M 参数,TrOCR-Large 约 558M。
使用 PaddleOCR 做文字识别
Section titled “使用 PaddleOCR 做文字识别”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 自动完成 检测→校正→识别 全流程使用 easyocr 做多语言 OCR
Section titled “使用 easyocr 做多语言 OCR”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 做识别用 PyTorch 搭建一个最小 CRNN+CTC
Section titled “用 PyTorch 搭建一个最小 CRNN+CTC”下面是一个可运行的最小实现,帮助理解 CRNN 的数据流和 CTC 训练流程:
import torchimport 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 为 blankctc_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]搞混导致报错。
使用 TrOCR(HuggingFace)识别手写
Section titled “使用 TrOCR(HuggingFace)识别手写”from transformers import TrOCRProcessor, VisionEncoderDecoderModel
processor = TrOCRProcessor.from_pretrained("microsoft/trocr-base-handwritten")model = VisionEncoderDecoderModel.from_pretrained("microsoft/trocr-base-handwritten")
from PIL import Imageimage = Image.open("handwritten_note.png").convert("RGB")pixel_values = processor(image, return_tensors="pt").pixel_valuesgenerated = 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,避免单张图信息过载。
训练技巧(进阶)
Section titled “训练技巧(进阶)”- 数据增强: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 decay1e-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定义保持一致。
最新进展(2025–2026)
Section titled “最新进展(2025–2026)”近两年 OCR 领域最重要的变化是:视觉语言模型(VLM)把 OCR 从”只认字”推向”理解文档”,以及通用大模型在文档任务上对专用 OCR 的全面挑战与反超。
GOT-OCR2.0:通用 OCR 理论(2024)
Section titled “GOT-OCR2.0:通用 OCR 理论(2024)”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%,在古籍、生僻字、印章、图表理解上大幅提升,开源与闭源方案中均处领先。
PP-OCRv6:小模型的逆袭(2026)
Section titled “PP-OCRv6:小模型的逆袭(2026)”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)。
- VLM 化:OCR 正从”专用小模型 + 流水线”转向”通用视觉语言模型”,一个模型同时做检测、识别、版面理解、结构化输出(Markdown/JSON)。
- 文档解析(Document Parsing)取代纯 OCR:输出不再只是文本,而是结构化数据,直接喂给下游 LLM/Agent,成为 RAG 系统的”数据入口”。
- 小模型对抗大模型:PP-OCRv6(34.5M)在专用任务上超越 235B 的通用 VLM,说明针对性优化的轻量模型在工业部署中仍有不可替代的价值。
- 合成数据 + 自训练:大规模合成渲染 + 模型自标注成为快速扩展多语种、多场景能力的主流方法(PaddleOCR、TrOCR、GOT 均如此)。
- 证件识别:身份证、驾驶证、营业执照——自动提取关键字段,秒级完成,替代人工录入。各大银行、保险公司的标配。
- 发票/票据自动化:财务系统自动识别发票金额、日期、税号,实现报销自动化。
- 车牌识别:停车场出入口、交通违章抓拍,OCR + 车辆检测联合使用。
- 文档数字化:将纸质档案、古籍扫描件转为可检索文本,Google Books、各大图书馆的核心技术。
- 翻译拍照翻译:手机摄像头实时 OCR + 机器翻译——Google 翻译、百度翻译的拍照功能。
- 验证码识别:自动识别图形验证码,既是安全攻防的战场,也用于无障碍辅助。
- RAG 与 Agent 的文档入口:2025 年以来,OCR/文档解析成为 RAG(检索增强生成)系统的标配数据预处理层——把 PDF、扫描件、截图转成结构化 Markdown/JSON,再交给 LLM 检索与回答。Dify、RAGFlow、Cherry Studio 等平台都深度集成 PaddleOCR 作为数据引擎。
典型类库与工具
Section titled “典型类库与工具”| 类库 | 语言 | 说明 |
|---|---|---|
| PaddleOCR | Python | 百度开源,支持 100+ 语种,轻量部署,工业界最流行;3.x 版本已集成 PP-StructureV3 版面分析、PaddleOCR-VL 视觉语言模型 |
| easyocr | Python | 基于 PyTorch,多语言支持好,几行代码即用 |
| Tesseract | C++/Python | Google 开源的传统 OCR 引擎,历史悠久,印刷体效果好 |
| TrOCR (HuggingFace) | Python | 微软开源的 Transformer OCR,手写体和文档理解强 |
| GOT-OCR2.0 | Python | 通用 OCR-2.0 模型,统一处理文本/公式/表格/图表/乐谱 |
| MMOCR | Python | 基于 MMDetection 的 OCR 工具箱,算法齐全 |
| CnOCR | Python | 专注中文的轻量 OCR,开箱即用 |
| MinerU | Python | 多类型文档转 Markdown 工具,深度集成 PaddleOCR |
| 术语 | 英文 | 解释 |
|---|---|---|
| 光学字符识别 | OCR / Optical Character Recognition | 将图像中的文字转换为可编辑文本的技术 |
| 文字检测 | Text Detection | 在图像中定位文字区域,输出边界框或掩码 |
| 文字识别 | Text Recognition | 将裁剪出的文字图像转为字符序列 |
| CRNN | CRNN | CNN 特征提取 + BiLSTM 序列建模的 OCR 经典架构 |
| CTC | Connectionist Temporal Classification | 解决变长序列对齐的损失函数,无需逐字符位置标注 |
| 可微分二值化 | Differentiable Binarization (DB) | 在分割概率图上用可学习阈值做二值化,端到端训练 |
| 端到端 OCR | End-to-End OCR | 一个模型同时完成检测和识别,如 TrOCR |
| TrOCR | Transformer-based OCR | 用 ViT encoder + Transformer decoder 的 seq2seq OCR |
| beam search | Beam Search | 解码时保留 top-k 候选路径,比贪心解码更准确 |
| 版面分析 | Layout Analysis | 将文档图像切分为文本、表格、图片等区域 |
| 视觉语言模型 | Vision-Language Model (VLM) | 同时处理图像和文本的多模态大模型,可把 OCR 视为一种”阅读理解”能力 |
| 文档解析 | Document Parsing | 将整页文档转为结构化数据(Markdown/JSON),包含版面分析+OCR+结构恢复 |
| 多 token 预测 | Multi-Token Prediction (MTP) | 一次解码步骤预测多个 token,提升自回归模型吞吐量 |
| OCR-2.0 | General 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,文档完善,适合上手实践。