space ocr
內建驗證的欄位擷取 API

擷取欄位
知道該覆核哪些值

與 schema 一致的 JSON — 每個值都帶座標,沒通過比對的值會進入覆核清單。

不需範本。不需訓練。沒有悄悄讀錯的數字。

主控台就是試驗場 — 拖入一個檔案,先看 API 會回傳什麼。
POST /ocr/fields 的真實回應結構
store_nameABC 超市✓ verified
date2025-04-10✓ verified
items[0].price$1.99⚠ text_mismatch
total$4.94✓ verified
invoice_no⚠ missing
7 個欄位中 2 個待覆核

接入只需一次 POST

在請求裡寫下欄位名;如果你已經知道某個值該長什麼樣,也一併寫上。回傳的 JSON 中每個值都帶座標與標記,下面的呼叫可以原樣複製執行。

request
1
2
3
4
5
6
7
8
9
10
11
12
curl -X POST https://api.space-ocr.com/ocr/fields \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image": "https://example.com/receipt.jpg",
    "imageType": "url",
    "fields": [
      { "name": "store_name" },
      { "name": "invoice_no", "pattern": "^[0-9]{6}$" },
      { "name": "total", "type": "number", "required": true }
    ]
  }'
response
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
{
  "status": "success",
  "data": {
    "values": {
      "store_name": "Supermarket ABC",
      "invoice_no": "10O482",
      "total": "$4.94"
    },
    "cells": {
      "invoice_no": {
        "box": { "xmin": 612, "ymin": 96,
                 "xmax": 742, "ymax": 118 },
        "quad": [ /* 4 corners */ ],
        "verified": false,
        "review": { "reasons": ["pattern_mismatch"] },
        "evidence": { "text_match": true }
      }
      // …store_name, total — same shape
    },
    "review": {
      "unit": "field", "declared": 3,
      "returned": 3, "boxed": 3, "verified": 3,
      "flagged": [
        { "path": "invoice_no",
          "reasons": ["pattern_mismatch"] }
      ],
      "by_reason": { "pattern_mismatch": 1 }
    },
    "normalized": { "invoice_no": "10O482", "total": 4.94 },
    "image": { "width": 1654, "height": 2339 }
  }
}

任何欄位,寫名字就行

不需訓練、不需設定處理器、不需註冊文件類型。

下次執行,答案不變

同一頁面跑三輪 — 463 個值中只有 16 個變動。

讀錯的值會自己舉手

每個值都帶座標和標記 — 只需複核被標記的,不必逐條檢查。

$0.05 / 次掃描(含稅)· 失敗不計費 · 每月 100 頁免費,無需信用卡

開發者的應用案例

外部開發者基於同一端點實作的 demo。

Michiel Tech Lab

values 與 cells 分開回傳,業務值和影像上的依據可以放進同一個介面。

發票核對台帳

把回傳的座標疊加在照片上,逐項與影像核對並修正。需複核的項目確認完畢後,再經金額驗算與重複提醒,存入 SQLite 並匯出 CSV。

Next.jsTypeScriptSQLiteZod
和泉惣之助

normalized 以與 values 相同的結構回傳,顯示照原樣、計算用數值可以直接實作。

發票 → 會計傳票 CSV

把拍攝的發票轉換為會計軟體可直接匯入的傳票 CSV。依稅率拆分分錄,判定含稅與否,需要人工確認之處另存為一份檔案。

PythonCSV (CP932)弥生会計
Ryo03

明細辨識很強——表格行不會錯位,拍攝紙本與 PDF 直出的結果相同。

工程成本台帳

讀取紙本訂單、送貨單與發票,進行數量×單價與明細合計的驗算、工程與往來廠商主檔比對、重複入帳偵測。僅將未通過的項目標註在原件對應位置,經人工確認後計入各工程成本。

PythonFastAPISQLite
健檢結果表 — 依座標重排
MogTech Lab 守井 清吾 (工學博士・資訊工程)

由於每個值都會回傳座標,我們既能依據圖片版面重建朗讀順序,也能在自己的實作中驗證該值來自圖片的哪個位置。

單據朗讀應用

把發票或健檢結果表重建成螢幕閱讀器可以從頭讀到尾、且讀得通順的順序的 Web 應用。分成左右兩欄的單據,依回傳順序朗讀會把左右兩張表混成同一行,因此依據 cells 的座標重建朗讀順序,並讓原圖上的方框隨目前朗讀的值移動。作者是一位全盲工程師,朗讀順序的驗證全部以實際聆聽完成。

PythonFastAPIJinja2NVDA

音声合成:Open JTalk(Modified BSD)/HTS voice "tohoku-f01"(東北大学 Intelligent Communication Network Laboratory、Creative Commons Attribution 4.0)

Blue Basket

沒有 quad,這個介面就不成立——照片是傾斜的,框也能正好落在文字上。

單據整批轉 CSV 應用程式

選擇裝有單據照片與 PDF 的資料夾,批次讀取全部頁面並匯出 CSV 的 Windows 應用程式。只有需要複核的儲存格會上色,並以 quad 框出原件上的對應位置;畫面依印刷原樣顯示,CSV 輸出 normalized 值。單一 exe 即可執行,通訊僅限 API——PC 之外不儲存任何資料。

PythonPySide6PyInstaller
Pool133

字元讀得沒錯,但值不符合宣告的型別——這一區分能在同一個儲存格裡同時取得,對建置複核畫面幫助很大。

送貨單驗算·核對流水線

將一張列印送貨單的照片,經擷取 → 驗算 → 與採購資料核對 → 登錄到 Google Sheets 的 Cloudflare Workers 應用程式。僅數量×單價驗算與採購主檔核對全部通過的列自動登錄,未通過的列附原因歸入待複核。每列的判定結果(可登錄 / 待複核 / 不適用)以三色框疊加在原件照片上。

Cloudflare WorkersHonoTypeScriptGoogle Sheets

難的部分,從 OCR 讀出文字之後才開始。

照片和資料庫欄位之間的那層處理,已經建好了。

商品
單價
しゅまろやかトースト6枚
¥98
富山県産こしひかり5k
¥1,980
カルビーフルグラ800g
¥698
  • 01

    “這個金額是從原件哪裡來的?”

    每個值都帶指向原圖的 box / quad 座標。

  • 02

    “同樣的 ¥711 有四行,為什麼選這一行?”

    先把值與 OCR 原文逐字比對,再定座標。

  • 03

    “單據是轉了90度進來的。”

    旋轉和傾斜都按拍攝時的原樣讀。

  • 04

    “最怕的是錯了還悄悄通過。”

    所有值都與 OCR 原文交叉比對 — 不能確定的會進入 review.flagged

  • 05

    非同步 + 簽名 Webhook

    /jobs 輪詢 · HMAC Webhook · OpenAPI 3.1。

  • 06

    不用另外架資料庫

    建好資料夾和表,行會持續累積,用 /view 加條件取回。

值的位置,從不由模型決定。

流程在每次呼叫中經過的五個步驟。

  1. 01

    用 OCR 讀整頁

    逐字找出文字與它所在的位置。座標只在這一步產生。

  2. 02

    模型抽出值

    模型把原圖與讀到的文字放在一起看,抽出你指定的欄位或文件本身的結構。它不會憑空造出座標。

  3. 03

    把值錨定到原文位置

    模型給出的每個值,都會按字元錨定到 OCR 實際讀到它的頁面位置上。

  4. 04

    比對兩邊結果

    對不上的值會把那一處裁下來再讀一次,仍無法確認的會帶著原因被標記回傳。

  5. 05

    回傳值與依據

    每個值都帶著它被讀取位置的 boxquad 一起回傳。

同一批照片並排實測

同樣的圖片、同樣的欄位結構、同樣的評分腳本,每個引擎跑三輪。原始回應與評分程式碼全部公開。

同一份文件的左右對比 — space ocr 為每個值回傳一個座標框,對方引擎為整張表回傳一個區塊
下面的數字正是從這些照片測出的 — 點擊即可切換大圖。
16 vs 100同一頁面跑三輪時發生變化的值的數量。
91.1% vs 70.0%463 個欄位的欄位正確率 — space ocr 對 比較對象引擎。
138 vs 1上方價目表上的座標框數量 — 每個值一個,還是整張表一個。

8 cases over 7 documents · 463 fields · 3 runs each · August 2026 — 與 Mistral Document AI 的受控實測。

讓校驗看得見、摸得著

API 回傳的那批已校驗的值,放在一個為閱讀而做的介面裡:你指向一個值,照片就作答。

  • 01
    把照片丟進來就行

    不用設定,也不用寫程式。把一疊照片拖進瀏覽器,資料列會自己填好。

  • 02
    指向值,照片作答

    游標停在儲存格上,原圖對應的位置就亮起來;從照片反查回值,同樣管用。

  • 03
    存疑的地方不藏著

    沒通過交叉核驗的值會用顏色標出來,而不是悄悄出錯,你只需要看該看的那些。

  • 04
    在發現它的地方就改掉

    原圖就在旁邊,直接改值。不用另開視窗,也不用翻它出自哪一頁。

  • 05
    原樣帶走

    試算表匯出成 Excel 不亂碼的 CSV,文件集匯出成 .md / .txt。

三種格式,還有存放的地方

上傳時先選格式。讀出來的結果會堆在資料夾裡,之後可以從那裡查詢和搜尋。

POST /ocr/fields

結構化欄位

指定要的欄位,帶型別回傳,明細列也會展開。列會堆疊成一張表,可查詢、可匯出 CSV。

POST /ocr/markdown

Markdown

標題、段落、清單與表格保持原有結構,可直接放進文件站、Wiki 或 LLM 的上下文。

POST /ocr/text

純文字

以段落為單位的原始判讀結果。要為掃描件建索引、做檢索或比對時,這是最直接的形態。

POST /create

資料夾

結果就留在你命名的資料夾裡。資料夾可以巢狀,表格、文件束和備忘都放在同一個地方。

GET /view

查詢

把堆好的列按條件篩出來。where · sort · select 和分頁都在伺服器端處理。

GET /space

搜尋

可以順著目錄樹往下找,也可以在搜尋框裡打一次,資料夾名、檔名、備忘內文和讀出來的儲存格值都會一起命中。

讓 AI 智慧體歸檔並取回

只需接上一個 MCP 伺服器。把照片交給它,智慧體會按類型建好資料夾和表格,一張照片堆成一列,之後再按條件把你要的列取回來。結果一直留在那裡,不需要另外搭一套資料庫。

MCP 端點https://mcp.space-ocr.com/mcp
  • space_create建好資料夾和表格
  • space_upload上傳照片堆成列
  • space_view帶條件取回
  • space_delete確認之後刪除

任何支援 MCP 的地方都能用

ClaudeChatGPTPerplexityVS CodeCursor

常見問題

也可以從一次諮詢開始。

不必是開發者。若您有意將日常業務自動化,我們將一起評估適配情況,包括使用真實資料的試行。

加入 Discord
會計與出納事務
採購、接單與銷售紀錄
生產、倉儲與配送
醫院與長照機構
銀行、保險與地產公司
人事、合約與內部行政
把紙本資料變成數據
減少打字與謄寫
傳真、手寫與無固定格式的資料
核對與簽核流程
對接現有系統(CSV、API)
其他問題均可洽詢