图片识别 API 怎么选:OCR 与视觉模型对比
发票识别、截图问答、文档解析看起来都是"看图",实际该用 OCR 专用模型还是通用视觉大模型?这篇按任务类型拆开对比,附站内实际挂单价、图片 token 的成本估算方法和接入代码。
"能不能识别这张图"是最模糊的需求描述。同一个问题,答案可能是每百万 tokens 三毛钱的 OCR 专用模型,也可能是贵二十倍的通用视觉大模型——差别不在精度,而在你要的到底是把字抄下来还是看懂图在说什么。
选错方向的代价很直接:用通用视觉模型做批量发票录入,账单会难看得让你想重写;反过来用 OCR 模型做截图问答,它只会把界面文字吐给你,答不出"这个报错该怎么办"。
先说结论
- 只提取文字、版面固定(发票、身份证、运单、表格):用 OCR 专用模型,单价通常比通用视觉模型低一个数量级
- 需要理解语义、做判断(截图问答、图表解读、UI 走查、质检):用通用视觉大模型
- 混合任务分两段走:OCR 先抽文本,再喂给便宜的文本模型做理解,总成本往往最低
- 分辨率是成本开关:先缩放到业务够用的尺寸,再送模型
三类任务先分清
| 任务类型 | 典型场景 | 需要的能力 | 推荐方向 |
|---|---|---|---|
| 纯文本提取 | 发票、证件、票据、扫描件 | 字符准确率、表格结构还原 | OCR 专用模型 |
| 文档理解 | 合同比对、研报摘要、长 PDF | 版面分析加语义归纳 | OCR 加文本模型两段式 |
| 视觉问答 | 截图排障、图表解读、商品图审核 | 空间关系、常识推理 | 通用视觉大模型 |
判断方法很简单:如果你的验收标准能写成"字段抽对了没有",那是第一类;如果验收标准是"回答得像不像人",那是第三类。
站内实际挂单价
以下价格取自平台价格页,单位为每百万 tokens(输入 / 输出),按次计费的模型单独标注:
| 模型 | 定位 | 输入 | 输出 |
|---|---|---|---|
| qwen-vl-ocr | OCR 专用 | $0.3 | $0.57 |
| qwen3.5-ocr | OCR 专用 | $0.6 | $2 |
| gemini-2.5-flash | 通用多模态 | $0.3 | $2.5 |
| qwen3-vl-plus | 通用多模态 | $1 | $10 |
| doubao-seed-2-0-lite | 通用多模态 | $1 | $5.5 |
| gpt-5.6-terra | 通用多模态 | $3 | $15 |
| gpt-5.5 | 旗舰多模态 | $7.5 | $60 |
看这张表要抓住两个事实:OCR 专用模型和通用多模态模型的输入价差能到十几倍;而输出价差更夸张,因为视觉模型的输出往往是长段描述。完整清单和实时价格以 价格速查 为准。
图片是怎么变成钱的
图片不会免费进模型。图像在送入模型前会被切块并编码成 token,具体换算比例各家不同、且随分辨率变化,这里不给通用公式——用返回的 usage 反推才是准的。
from openai import OpenAI
import base64, pathlib, os
client = OpenAI(api_key=os.environ["ZAIMOD_API_KEY"],
base_url="https://api.zaimod.com/v1")
b64 = base64.b64encode(pathlib.Path("invoice.jpg").read_bytes()).decode()
r = client.chat.completions.create(
model="gemini-2.5-flash",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "只输出这张发票的金额和开票日期,用 JSON。"},
{"type": "image_url",
"image_url": {"url": f"data:image/jpeg;base64,{b64}"}},
],
}],
)
print(r.usage) # prompt_tokens 里就含图片折算的部分
拿到 prompt_tokens 后除以图片数量,就是你这条业务线单张图的真实 token 成本。用这个数去乘单价,比任何估算表都可靠。
降本的四个动作
缩图。 手机直出照片动辄四五千像素,业务上通常 1024 到 1600 的长边就够。缩放发生在客户端,省的是 token,不是带宽。
裁掉无关区域。 发票只留票面,截图只留报错弹窗。视觉模型对整屏截图的注意力会被稀释,裁图既省钱又提准。
先 OCR 再理解。 文档类任务里,OCR 输出文本通常只有几百 tokens,把它交给 gpt-4o-mini($0.156 / $0.624)做归纳,比直接让旗舰视觉模型读整页图便宜得多。
按置信度分流。 关键字段置信度高的直接入库,低置信度的才升级到贵模型复核。这一条能把平均成本压到全程用旗舰模型的零头。
接入时容易踩的坑
统一走 OpenAI 兼容协议,切换模型只改 model 字段,协议细节见 OpenAI 兼容协议详解。实践中有三处要注意:
- base64 别塞进日志:一张图编码后几百 KB,日志会被撑爆,也容易泄露敏感票据
- 单请求图片数量有上限:多页 PDF 要分页送,不要一次传二十张
- 不要假设所有模型都支持图片:部分文本模型收到
image_url会直接 400,调用前先确认模型标签
错误码含义可对照 大模型 API 错误码速查;如果是并发太高被拦,先看 429 限流排查。
选型路线
- 先确认验收标准:字段级准确率,还是回答质量
- 字段级:从 qwen-vl-ocr 起测,不够再升 qwen3.5-ocr
- 回答级:先用 gemini-2.5-flash 这类低价多模态打底,效果不够再逐级上探
- 用 20 到 50 张真实样本做 A/B,记录准确率与单张 token 成本
- 准确率差距小于 3% 时,选便宜的那个
常见问题
Q:OCR 模型能直接输出结构化 JSON 吗?
多数支持,但稳定性不如通用模型。稳妥做法是 OCR 出文本,再用文本模型按 schema 抽取,两段各司其职。
Q:手写体、模糊拍照能用 OCR 专用模型吗?
先测。手写体和低质量扫描件是 OCR 的弱项,这类场景通用视觉模型的鲁棒性往往更好,值得多花那点钱。
Q:视频和 PDF 怎么办?
PDF 按页转图后走同一套流程;视频需要抽帧,属于另一条链路,图像与视频生成、理解类模型的清单见 媒体模型文档。
Q:同一张图重复分析,能缓存吗?
能,而且必须做。对图片内容做哈希作为缓存键,同样的图只调一次模型,命中率高的话成本能降一半以上。