Mistral OCR vs space-ocr 第二回合:沒人拿來做基準的照片
space-ocr 與 Mistral OCR 的受控基準擴充到 15 個案例、14 份文件、769 個欄位:欄位準確率、多次執行的穩定性、視覺大模型在旋轉文件上的崩潰,以及一張把 ¥711 印了四行的收據。
本月稍早,我們發表了與 Mistral Document AI 的受控基準。當時挑的是難讀的「文件」;但實際環境送來的是難讀的「照片」——旋轉的、揉皺的、疊著的、蓋著章的、深夜單手拍的。
於是我們補了 7 個正是這種照片的案例,把一切重測一遍:15 個案例、14 份文件、769 個欄位、每方各跑 3 次,所有參賽方同結構、同評分。這次 space-ocr 一方走的是公開 API——任何帳號都在呼叫的那個 POST /ocr/fields。
| 769 欄位 · 3 次執行 | space-ocr | Mistral OCR | 視覺大模型 (mistral-medium) |
|---|---|---|---|
| 欄位準確率(精確比對) | 89.2% | 69.3% | 66.8% |
| 同一輸入 3 次執行的總分波動 | 6 個欄位 | 106 個欄位 | 53 個欄位 |
兩條閱讀須知。標準答案固定了一種寫法,所以每一方的絕對分都是下限——要看的是差距。而波動那一行比看上去重要:同樣的輸入跑兩遍,一邊給你能審的 diff,另一邊給你雜訊。
差距在哪裡拉開
在最乾淨的文件上兩邊幾乎打平。差距全部來自結構與拍攝條件變差的地方:
| 分條件得分 | space-ocr | Mistral OCR | 視覺大模型 |
|---|---|---|---|
| 乾淨的高密度印刷表格 | 1.000 | 0.986 | 0.960 |
| 兩行明細的收據 | 0.718 | 0.179 | 0.077 |
| 點陣印表單(橫躺拍攝) | 0.872 | 0.778 | 0.217 |
| 複寫聯堆(橫躺+蓋章) | 0.833 | 0.611 | 0.130 |
| 深夜·寫字板上 | 0.831 | 0.488 | 0.441 |
| 暗光·揉皺的配送單 | 0.912 | 0.898 | 0.830 |
表裡最鋒利的一行:視覺大模型在旋轉面前崩潰——兩份橫躺文件上 0.217 與 0.130,而帶 OCR 前端的參賽方讀到 0.611–0.872。OCR 在讀取前偵測並轉正方向;裸的視覺通路收到的就是旋轉的像素。兩份文件不構成定律,所以只說窄結論:在本語料裡,3 次執行 3 次如此。
一張收據,四個 ¥711
最後一個新案例把抽象論證變成實物。這張 7-Eleven 收據上,711 出現在八個地方——合計、iD 支付、銷售聯金額、稅額行都是 ¥711,電話號碼、07:11 的時間、日期、單號裡也藏著 711。
請求 total、id_payment、amount,讀對的引擎會把同樣三個字元回傳三次。值與值無法自我區分,能說清來自哪一行的只有座標。3 次執行裡,三個欄位每次都帶著落在各自正確行上的框回來,座標每次相同。只回傳值的回應,連表達「讀的是哪一行」的介面都沒有——對與錯,看起來一樣。
一個圖庫看完整個語料
這次測量用到的全部新照片。從列表裡挑一張看——綠色框全部是引擎真實回傳的座標,交易方資訊由我們打碼。

仍然會漏過去的東西
這個 API 內建的驗證層驗證的是出處:框與文字在兩個獨立讀取器之間逐字元一致。這批難拍的照片上殘留的錯誤,大多正是我們一直明文列為範圍之外的那類——兩個讀取器對同一個誤讀達成一致:被眩光燒白的字、被模糊化開的字。交叉驗證抓不住共識錯誤。所以覆核標記是把人的注意力路由過去的訊號,不是替代;結構驗證與商業規則仍要壓在上面。
本文所有數字的統一標註:15 個案例 · 14 份文件 · 769 個欄位 · 各 3 次執行 · 2026 年 8 月 · 所有參賽方同圖同結構同評分 · space-ocr 經公開 API 測得。語料偏向高密度日文商業單據。新照片印有真實交易方資訊,僅以上文打碼版發布。只測欄位抽取,不涉及 markdown 轉換、速度或價格。