space ocr
指南文章价格文档
developer

Mistral OCR vs space-ocr 第二回合:没人拿来做基准的照片

space-ocr 与 Mistral OCR 的受控基准扩展到 15 个用例、14 份文档、769 个字段:字段准确率、多次运行的稳定性、视觉大模型在旋转文档上的崩溃,以及一张把 ¥711 印了四行的小票。

7 分钟阅读· 2026-08-14

本月早些时候,我们发布了与 Mistral Document AI 的受控基准。当时选的是难读的"文档";但生产环境送来的是难读的"照片"——旋转的、揉皱的、叠着的、盖着章的、深夜单手拍的。

于是我们补了 7 个正是这种照片的用例,把一切重测了一遍:15 个用例、14 份文档、769 个字段、每方各跑 3 次,所有参赛方同模式、同评分。这次 space-ocr 一方走的是公开 API——任何账号都在调用的那个 POST /ocr/fields

769 字段 · 3 次运行space-ocrMistral OCR视觉大模型 (mistral-medium)
字段准确率(精确匹配)89.2%69.3%66.8%
同一输入 3 次运行的总分波动6 个字段106 个字段53 个字段

两条阅读须知。标准答案固定了一种写法,所以每一方的绝对分都是下限——要看的是差距。而波动那一行比看上去重要:同样的输入跑两遍,一边给你能审的 diff,另一边给你噪声。

差距在哪里拉开

在最干净的文档上两边几乎打平。差距全部来自结构和拍摄条件变差的地方:

分条件得分space-ocrMistral OCR视觉大模型
干净的高密度印刷表格1.0000.9860.960
两行明细的小票0.7180.1790.077
针式打印单(横躺拍摄)0.8720.7780.217
复写联堆(横躺+盖章)0.8330.6110.130
深夜·写字板上0.8310.4880.441
暗光·揉皱的配送单0.9120.8980.830

表里最锋利的一行:视觉大模型在旋转面前崩溃——两份横躺文档上 0.217 和 0.130,而带 OCR 前端的参赛方读到 0.611–0.872。OCR 在读取前检测并归正方向;裸的视觉通路收到的就是旋转的像素。两份文档不构成定律,所以只说窄结论:在本语料里,3 次运行 3 次如此。

一张小票,四个 ¥711

最后一个新用例把抽象论证变成实物。这张 7-Eleven 小票上,711 出现在八个地方——合计、iD 支付、销售联金额、税额行都是 ¥711,电话号码、07:11 的时间、日期、单号里也藏着 711。

请求 totalid_paymentamount,读对的引擎会把同样三个字符返回三次。值与值无法自我区分,能说清来自哪一行的只有坐标。3 次运行里,三个字段每次都带着落在各自正确行上的框回来,坐标每次相同。只返回值的响应,连表达"读的是哪一行"的界面都没有——对与错,看起来一样。

一个画廊看完整个语料

这次测量用到的全部新照片。从列表里挑一张看——绿色框全部是引擎真实返回的坐标,交易方信息由我们打码。

7-Eleven 小票,小计、税额、合计、iD支付、金额、单号六处绿色真实返回框
¥711 小票与引擎的真实返回框:小计、消费税、合计、iD 支付、金额、单号,3 次运行全部锚定在各自的行上。卡号由我们打码。

仍然会漏过去的东西

这个 API 自带的校验层验证的是出处:框与文本在两个独立读取器之间逐字符一致。这批难拍的照片上残留的错误,大多正是我们一直明文列为范围之外的那类——两个读取器对同一个误读达成一致:被眩光烧白的字、被模糊化开的字。交叉校验抓不住共识错误。所以复核标记是把人的注意力路由过去的信号,不是替代;模式校验和业务规则仍要压在上面。

Why it matters

本文所有数字的统一标注:15 个用例 · 14 份文档 · 769 个字段 · 各 3 次运行 · 2026 年 8 月 · 所有参赛方同图同模式同评分 · space-ocr 经公开 API 测得。语料偏向高密度日文商业单据。新照片印有真实交易方信息,仅以上文打码版发布。只测字段抽取,不涉及 markdown 转换、速度或价格。

第一篇基准文章有完整方法和已公开用例集的原始输出;如何度量校验层本身是另一篇。想看看你手里最糟的照片会被读成什么样,落地页的演示不用注册就能读一张。

相关文章