EN

视觉大模型 OCR 实现指南

利用视觉大模型实现高级光学字符识别

返回教程列表
进阶11 分钟

视觉大模型 OCR 实现指南

利用视觉大模型实现高级光学字符识别

视觉大模型 OCR 实现指南(2026):经典 OCR 答「有什么字」,VLM 答「文档说了什么+结构化输出」。核心三件套:unreadable_fields 反幻觉出口、提示词内算术自检+代码复验、整数分单位。含规模化混合漏斗架构与多页策略。

视觉大模型 OCR 实现指南

经典 OCR(Tesseract、云端 OCR API)回答的是“这一页上有什么字符”。而视觉大语言模型回答的是你真正关心的问题:“这份文档说了什么,并以结构化数据的形式给我。” 版面理解、字段关联、手写容忍度以及提取逻辑,全部融合在一次模型调用中。本指南涵盖 VLM-OCR 的优势场景、可投入生产的实现方案,以及面向规模化的混合架构。

决策表

场景使用方案

大规模数字化清晰印刷页面经典 OCR — 每页成本更低,结果确定 发票/收据/表单 → 结构化字段VLM — 版面+关联是难点,而 VLM 原生擅长 混合质量的扫描件、文档照片、手写内容VLM — 容错性显著更好 表格 → 数据VLM — 经典 OCR 会破坏表格结构 需要字符级坐标(如脱敏覆盖层)经典 OCR(或混合方案)— VLM 无法返回可靠的逐词边界框 海量数据 + 结构化输出混合方案(见下文)

核心实现

模式是:视觉输入 + 强制结构化输出 + 验证——与所有视觉分析工作相同的三角结构:

python
import base64, json
from anthropic import Anthropic

client = Anthropic()

SCHEMA_PROMPT = '''Extract this receipt as JSON: {"merchant": str, "date": "YYYY-MM-DD", "currency": "ISO code", "line_items": [{"description": str, "qty": number, "amount_cents": int}], "subtotal_cents": int, "tax_cents": int, "total_cents": int, "unreadable_fields": [str]} Rules: amounts in cents. If a field is not legible, null it and list it in unreadable_fields. Verify line_items sum ≈ subtotal. JSON only.'''

def extract_receipt(image_bytes: bytes, media_type='image/jpeg') -> dict: resp = client.messages.create( model='claude-opus-4-8', max_tokens=4000, messages=[{'role': 'user', 'content': [ {'type': 'image', 'source': {'type': 'base64', 'media_type': media_type, 'data': base64.standard_b64encode(image_bytes).decode()}}, {'type': 'text', 'text': SCHEMA_PROMPT}, ]}], ) return json.loads(resp.content[0].text)

三个关键细节承担了主要工作:

  • unreadable_fields 为模型提供了退路——没有它,模糊的总金额会被*看似合理地编造*出来。明确允许“我无法读取此项”是文档 AI 中最强的反幻觉杠杆。
  • 提示词中的算术自检(明细项之和 ≈ 小计;小计+税费 = 总计)——然后在代码中重新验证,并将不一致的结果转人工审核。数学一致性可以捕获大多数严重的误读。
  • 金额以整数分表示——浮点货币提取是经典的静默数据损坏来源。
  • 对所有输出进行模式验证(Zod vs Pydantic);在针对*你的*文档混合体测量的准确率达标之前,设置置信度阈值转人工(HITL 模式)——供应商演示的准确率不等于你的准确率。

    面向规模化的混合架构

    在数据量较大时,成本结构倾向于漏斗式方案:

  • 经典 OCR 处理(廉价、快速)→ 原始文本 + 单词边界框
  • 廉价启发式规则分流文档:清晰文本 + 简单布局 → 规则/正则提取;其余文档 →
  • VLM 提取处理困难子集(复杂布局、低质量扫描、验证失败)
  • 这样通常能将远不到一半的真实世界数据发送给 VLM,同时在其擅长的场景下保持高准确率。与文本去重相同的漏斗经济逻辑:仅在灰色地带使用昂贵的智能处理。

    对于无延迟压力的*批量*数字化,可通过批量 API(五折优惠)运行 VLM 阶段。

    多页文档

  • 原生 PDF 输入(如果支持)优于自行栅格化——页面结构得以保留。
  • 对于超长文档,逐页提取并共享运行上下文(“你当前在第 N 页;请延续以下未结清明细项”),然后合并——整本书一次调用容易导致中间上下文注意力丢失。
  • 为每个提取的字段保留页面来源;审计人员会问“这个数字来自哪里”。
  • FAQ

    在表单处理上,准确率与云端 OCR 服务相比如何? 在*结构化提取*(字段、表格)方面,对于杂乱的真实世界输入,VLM 现在通常优于经典的表单识别产品;在清晰印刷品的原始字符准确率方面,经典 OCR 仍然表现出色且成本更低。请用你最差的 50 份文档进行测试,而不是最好的。

    手写体呢? 对于清晰的手写体可用(比 Tesseract 好几个数量级),但必须设置置信度阈值转人工。

    需要本地部署怎么办? 开源视觉模型(如 Qwen-VL 类)可以自行托管,使用相同的提示模式——准确率略低于前沿模型,但隐私保护完全由你掌控(合规性)。


    *最后更新:2026 年 6 月。*

    相关工具

    openaipython
    所属主题:OpenAI 开发实战