很多文档流水线把「收到 PDF」和「调用 OCR」绑死——结果一年里 60%–80% 的页根本不必 OCR:它们自带可选文字层、矢量表格或可复制文本。先做 PDF 预检测(pre-flight),再决定走文本抽取还是 OCR,是 OCR Cost 优化里投入产出比最高的一步。本文用可复现的口径说明为什么、怎么检、以及团队如何落地 OCR Optimization。
1. 为什么 OCR 前必须先检测 PDF
「PDF OCR」在采购清单里往往按页计费:AWS Textract、Google Document AI、Azure Document Intelligence、ABBYY、PaddleOCR 托管版……单价从 $0.0015/页到 $0.05+/页 不等。问题在于:PDF 不是单一格式。同一份「发票.pdf」可能是:
- ERP 导出的原生文本 PDF(
pdftotext一秒出全文); - Word 转 PDF 的嵌入字体文本;
- 扫描仪生成的纯位图 PDF(必须 OCR);
- 前 3 页是封面扫描、后面是可选文字的混合型。
不做预检就全量 OCR,等于对已有文字层再「看图识字」——不仅浪费钱,还会引入 OCR 错字、表格错位,下游 RAG 检索质量反而下降。财务、法务、保险理赔等批量场景里,预检测 + 按页路由 通常能把云 OCR 调用量砍掉一半以上;在原生文本占比高的行业(银行对账单、电子合同、政府公开数据),年节省 70%–80% OCR Cost 并不夸张。
2. OCR 账单从哪来:一页多少钱
优化前先统一计量口径。云厂商常见计费维度:
| 计费项 | 典型单价(2026) | 备注 |
|---|---|---|
| 基础 OCR(纯文本) | $0.0015–0.003/页 | 仅识别字符,无表格/表单 |
| 表格 / 表单 OCR | $0.01–0.05/页 | Document AI「结构化」档 |
| 手写 / 低质量扫描 | 溢价 1.5–3× | 需专用模型或人工复核队列 |
| 自托管 GPU(摊销) | ≈$0.0003–0.001/页 | 视 QPS 与显卡利用率 |
假设月均 200 万页、混合价 $0.008/页,年 OCR 账单约 $192,000。若预检发现 75% 页可走文本抽取(成本接近零),仅 25% 走 OCR,则 OCR 侧年支出约 $48,000——节省 约 75%;加上误识别带来的返工减少,业务侧常体感接近「省 80%」。
API 单价还会随区域、Batch、承诺用量变化;选型时可对照 Google Document AI 定价 与 AWS Textract 定价 做敏感性分析。若你已在用多模型路由省 LLM 费用,文档侧也应同样做分层——可参考站内 OmniRoute 迁移验收清单 的分层思路。
3. 三类 PDF:谁该 OCR、谁该直接抽文本
| 类型 | 特征 | 推荐路径 | 相对成本 |
|---|---|---|---|
| A. 原生文本 | pdffonts 有字体;pdftotext 字符数 > 阈值 | 直接文本抽取 + 编码归一 | ≈0 |
| B. 混合型 | 部分页有文字层,部分页为扫描图 | 按页预检后分流 | 中 |
| C. 纯扫描 | 无字体、无文字对象;整页大图 | OCR(必要时预处理:去噪、纠偏) | 高 |
判断 B 类时最容易翻车:不要用「整份文档一个结论」。一份 200 页的并购资料包,可能只有附录扫描件需要 OCR。按页检测是 PDF OCR 优化与按文档检测的分水岭。
Adobe 在 PDF 字体与文字层 文档中说明了嵌入字体与扫描层的区别——预检逻辑应对齐「页级是否有 text operator」,而不是只看文件扩展名。
4. 预检测流水线:五步决策
- 结构探测:页数、是否加密、是否损坏;损坏文件进修复队列,别送进按页计费 OCR。
- 文字层探测:每页提取字符数、字体对象数;超过阈值(如 ≥ 30 可打印字符且乱码率 < 5%)标记为
TEXT_OK。 - 图像占比:单页最大位图面积 / 页面面积 > 85% 且文字层为空 →
SCAN。 - 质量评分:对
SCAN页算 DPI、对比度、倾斜角;过低质量先走图像增强再 OCR,避免「识别失败 → 重试 → 双倍计费」。 - 路由:
TEXT_OK→ 本地抽取;SCAN→ OCR 队列(可按语言/版式选引擎);HYBRID→ 拆页并行。
把以上五步写成可观测的指标:preflight_text_ratio、ocr_pages_ratio、ocr_retry_rate。每月复盘一次,比单纯砍 OCR 单价更有效。
5. 工具对比:开源 vs 云 API
| 环节 | 开源 / 本地 | 云 API |
|---|---|---|
| 预检 / 抽文本 | PyMuPDF、poppler pdftotext、qpdf | 一般不需要云 |
| OCR 引擎 | Tesseract、PaddleOCR、Surya | Document AI、Textract、Azure DI |
| 表格还原 | pdfplumber、camelot(原生 PDF) | 云「表单/表格」模式 |
| 适合 | 大批量、合规要求数据不出域 | 复杂版式、多语言手写、SLA |
OCR Optimization 的常见组合:本地预检 + 云 OCR 只处理 SCAN 页。这样既保留云厂商在难例上的准确率,又把调用量压到真正需要的子集。
6. 落地示例:Python 预检 + 路由
# pip install pymupdf
import fitz # PyMuPDF
MIN_CHARS = 30
MAX_GARBAGE_RATIO = 0.05
def page_classify(page) -> str:
text = page.get_text("text").strip()
if len(text) >= MIN_CHARS:
# 简易乱码率:非中英文数字标点占比
import re
garbage = len(re.findall(r"[^\w\s\u4e00-\u9fff.,;:%/-]", text, re.U))
if garbage / max(len(text), 1) <= MAX_GARBAGE_RATIO:
return "TEXT_OK"
imgs = page.get_images(full=True)
if imgs and len(text) < MIN_CHARS:
return "SCAN"
return "HYBRID"
def route_pdf(path: str) -> dict:
doc = fitz.open(path)
stats = {"TEXT_OK": 0, "SCAN": 0, "HYBRID": 0}
ocr_pages = []
for i, page in enumerate(doc):
kind = page_classify(page)
stats[kind] += 1
if kind != "TEXT_OK":
ocr_pages.append(i)
return {"stats": stats, "ocr_pages": ocr_pages}
生产环境请加上:超时、并发限制、加密 PDF 密码回调、以及把结果写入对象存储元数据,供下游检索服务读取。预检本身应跑在稳定、可水平扩展的 worker 上——批量任务与 CI 类 workload 类似,与其挤在共享 VPS 上,不如用固定算力节点(见文末云端 Mac 方案)。
7. 案例:一年节省约 80% OCR 成本
某跨境物流 SaaS,日均入库 8,000 份 提单/报关 PDF(平均 4 页,约 3.2 万页/日)。改造前:全量 Document AI 基础 OCR,约 $0.006/页,月费约 $5,760。
| 阶段 | 动作 | OCR 页占比 | 月 OCR 费用(估) |
|---|---|---|---|
| 改造前 | 全量云 OCR | 100% | ~$5,760 |
| 改造后 | 页级预检 + 本地抽文本 | 22% | ~$1,270 |
| 节省 | — | — | ~78%(含预检算力仍 <$200/月) |
额外收益:原生文本字段准确率从 OCR 的 96% 提升到接近 100%;客服工单里「单号识别错误」下降 40%+。这就是 OCR Cost 优化里常被忽略的隐性收益。
8. OCR Optimization 检查清单
- ☐ 指标看板:文本抽取页 / OCR 页 / 重试页 三元组
- ☐ 按页路由,禁止「整文件一种策略」
- ☐ 扫描页先质检(DPI、倾斜)再 OCR,控制重试
- ☐ 原生 PDF 表格走 pdfplumber/camelot,别拍照式 OCR 表格
- ☐ 多语言文档按语种选引擎(中日韩与拉丁系分开评测)
- ☐ 抽样人工对齐:预检标为 TEXT_OK 的页,每周抽检 0.1%
- ☐ 账单告警:OCR 调用日环比 +30% 自动通知(与 API 成本分层 同一套 FinOps 纪律)
9. 常见问题
预检会不会比 OCR 还慢?
单页文本探测通常是毫秒级,远低于云 OCR 的网络 RTT + 推理时间。瓶颈在批量 IO 时,用并行 worker 与本地 SSD 缓存即可。
文字层是「假文本」怎么办?
有些扫描 PDF 会叠一层劣质 OCR 文字。用乱码率、与图像块重叠检测、以及抽样人工校验识别;可疑页降级为 SCAN 重新 OCR。
加密 PDF 如何处理?
在预检阶段解析权限位;需要密码的进解密队列。切勿把解密失败文件反复送进计费 OCR。
80% 节省是否适用于所有行业?
取决于原生文本占比。纯扫描档案库可能只能省 10%–20%;电子发票、合同、报表类可达 70%–85%。先用 1% 样本做预检统计再立项。
自托管 Tesseract 能否替代云 OCR?
简单版式、大批量场景可以;复杂表格、手写、多栏杂志式排版仍建议云 API 或专用模型。最佳实践是预检本地做、难例上云。
和 LLM「读 PDF」有什么关系?
多模态模型按 token 计费读 PDF 更贵。应先把 PDF 变成干净文本/JSON,再喂给 LLM;这与 OCR 前预检是同一套 FinOps 逻辑。
批量预检与 OCR worker,需要稳定算力
文档预检、图像增强与自托管 OCR 都是长时间 CPU/GPU 任务:共享 VPS 上容易因邻居噪声导致超时重试,反而推高 OCR Cost。Apple Silicon 统一内存适合并行跑 PyMuPDF 预处理 + 本地推理,macOS 上 Python 工具链开箱即用,Gatekeeper 与权限模型也便于企业合规部署。
若你在搭建 PDF OCR 流水线或 RAG 文档入库服务,Nuvcloud 云端 Mac mini M4 提供独享算力与固定出口 IP,适合作为预检与 OCR worker 节点——查看套餐方案,让 OCR Optimization 算在稳定硬件上。