space ocr
指南文章價格文件
Image OCR

回傳結構化欄位而不是一堆文字的圖像 OCR

用 space-ocr 對 JPEG、PNG 等圖像做 OCR:宣告你需要的欄位,每個值都連同 box 與 quad 座標一起回傳,需要複核的值彙整在 data.review.flagged 裡。

大多數圖像 OCR只是丟給你一堆純文字,然後就沒了。你拍一張收據,跑一遍,回來的是一團列,你還得自己去讀、去拆、再輸入到對應的欄裡。原本在頁面上一眼就能看清的結構,沒了。

space-ocr 把圖像讀成結構化欄位——店名在這、日期在那、合計在那邊、明細是一列列的。每個值還帶著它在圖像上被讀取的確切位置:data.cells[path] 裡有一個軸對齊的 box 與一個四點的 quad。而與頁面核對不上的值,會帶著理由出現在 data.review.flagged 裡。所以回到你手上的是一份待辦清單,而不是一個只能盲信的數字。

看一次你可以親自核對的真實擷取

這是一張圖像——拍了兩張收據的照片——被讀成了欄位。把滑鼠移到下方任一值上,圖像上的框就是這個值被讀取的位置。這裡的每個數字、框與字元比對比例,都直接讀自一次真實的解析結果,而不是擺拍。比對比例說明的是這個值有多少字元在頁面上被定位到,屬於佐證,不是通過或不通過的判定分。

Receipts with extracted-field bounding boxes
Verified fields
KINSHO · 合計 2,045
ライフ · 合計 4,286

Each value with a box carries a verified on-page location — in data.cells[path], that is box + 4-point quad + evidence.match_ratio — on a 0–1000 normalized grid (0,0 top-left → 1000,1000 bottom-right), the same shape the live API returns. Hover a field to trace it back to the pixels it came from.

三種形態,同一份契約
同一頁可以取成具名欄位、取成保留版式的 Markdown(POST /ocr/markdown),或取成還原了閱讀順序的純文字(POST /ocr/text)。三者回傳的外殼一致,都是 values / cells / review / image,所以無論選哪一種,座標與 verified 判定的處理方式都一致。
結構化欄位,不是一堆文字
圖像會在 data.values 底下變成帶名字的欄位與列——店名、日期、合計、明細列——形狀就是你宣告的那份 schema,而不是一串你得自己去拆的長字串。
每個值都有位置
data.cells[path] 裡有軸對齊的 box(xmin/ymin/xmax/ymax)與四點的 quad,都是 0–1000 的正規化座標。換算成像素所需的尺寸由 data.image 給出:x = box.xmin / 1000 × width。
手機照片也行
EXIF 方向在讀取之前就已套用,所以回傳的座標與你看到的照片對齊。系統不做傾斜校正,因此 quad 會跟隨手持拍攝的傾斜;很大的照片可能先被縮小。座標的基準是 data.image,而不是你上傳的那個檔案。
宣告你需要的欄位
在 fields 陣列裡寫下 name 與 type,需要時再加上 required、pattern、min/max、enum、label、near。想從文件本身出發,就把 autoFields 設為 true,取回它從這份文件讀出的欄位名稱。
不只是合計,還有明細列
帶 children 的 array 欄位以可重複的列回傳,每個儲存格都保有自己的路徑與位置:items[0].amount 指向一個儲存格,items[0] 指向它所在的那一列。
乾淨的匯出
帶 UTF-8 BOM 的 CSV(Excel 與中日韓文字安全,明細列展開),以及帶非同步工作(POST /upload → GET /jobs/{jobId})與 HMAC 簽章 Webhook 的 REST API JSON。

space-ocr 裡的圖像 OCR 如何運作

把圖像以 URL 或純 base64 傳送到 /ocr/fields——JPEG、PNG、GIF、BMP、TIFF、WebP 都會被直接讀取。EXIF orientation 在讀取前套用,很大的照片可能會被縮到長邊 4000px,所以真正被讀的那一版頁面尺寸由 data.image 給出,座標都以它為基準換算。

你要的結果用 fields 陣列描述:每個欄位一個 name 與一個 type(string / number / integer / date / array / object),明細列用帶 children 的 array 欄位,需要時再宣告 required、pattern、min/max 或 enum。想從文件出發,就送 autoFields: true,直接用回傳的欄位名稱。宣告不會傳給模型,因此不會左右讀取本身——它決定的是哪些內容會進 data.review.flagged,以及確定性的 data.normalized 層解析出什麼。(PDF 走 Web 應用,先把每一頁算繪成圖片;API 本身讀的是圖像。)

從圖像擷取欄位
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
curl -s https://api.space-ocr.com/ocr/fields \
  -H "Authorization: Bearer $SPACE_OCR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image": "https://example.com/receipt-photo.jpg",
    "imageType": "url",
    "fields": [
      { "name": "store_name", "type": "string", "required": true },
      { "name": "date", "type": "date", "required": true },
      { "name": "total", "type": "number", "required": true, "min": 0 },
      {
        "name": "items",
        "type": "array",
        "children": [
          { "name": "name", "type": "string" },
          { "name": "price", "type": "number" }
        ]
      }
    ]
  }'

如何對圖像做 OCR

  1. 傳送你的圖像
    把 JPEG、PNG、GIF、BMP、TIFF 或 WebP 以 URL 或純 base64 傳送到 /ocr/fields,或拖進應用程式。EXIF 方向會在讀取前套用。
  2. 宣告你的欄位
    傳送一個 fields 陣列,為每個值寫明 name 與 type——明細列表格用帶 children 的 array 欄位。也可以把 autoFields 設為 true,從回傳的欄位名稱開始。
  3. 讀取結構化結果
    業務資料留在 data.values。data.cells 為每個路徑給出 box 與 quad、verified 判定與 evidence,data.image 則是把這些座標換算成像素的基準。
  4. 處理待複核清單
    逐一處理 data.review.flagged:每一項都給出 path 與 reasons。打開 cells[path],把 box 畫到圖像上,再把值與那裡印著的字對照。編輯會儲存在原始 OCR 值旁邊。
  5. 匯出或查詢
    下載 CSV(UTF-8 BOM,明細列已展開),或用 GET /view 搭配 where、sort、select 查詢已儲存的工作表——讀取已儲存的列不會重跑 OCR,也不計費。

簡單、可預期的定價

每張圖片 $0.05(含稅),每月 100 點數免費且免信用卡,失敗的掃描不計費。方案計畫增加每月點數、更多工作表與儲存空間。

Free
$0
  • 100 點數/月
  • 3 工作表
  • 1 GB 儲存空間
免費 — 免信用卡
Starter
$19/月
  • 500 點數/月
  • 15 工作表
  • 10 GB 儲存空間
免費開始
最受歡迎
Pro
$39/月
  • 1,100 點數/月
  • 無限工作表
  • 100 GB 儲存空間
免費開始
space-ocr 能對哪些圖像格式做 OCR?
公開 API 直接讀取點陣圖像——JPEG、PNG、GIF、BMP、TIFF、WebP。圖像會被自動轉成 RGB。PDF 走 Web 應用,先把每一頁算繪成圖片再做 OCR。
圖像 OCR 給我的是結構化欄位還是純文字?
結構化欄位。圖像會在 data.values 底下被讀成帶名字的值與列——店名、日期、合計、明細列——形狀就是你宣告的那份 schema,而不是一團你得自己解析的純文字。
我能對手機拍的照片做 OCR 嗎?
能。EXIF orientation 在讀取之前就已套用,所以回傳的座標與顯示出來的照片對齊。系統不做傾斜校正,四點的 quad 會跟隨手持拍攝的傾斜,而這些座標所屬的頁面尺寸由 data.image 給出。
圖像 OCR 會保留每個值的位置嗎?
會。data.cells 裡的每個路徑都帶一個 box(0–1000 正規化格線上的 xmin/ymin/xmax/ymax)與一個四點的 quad,換算成像素所需的尺寸由 data.image 給出。cells[path].evidence 保存核對的佐證,包括 match_ratio,以及在這個端點上的 printed_text——在那個座標上讀到的原始字元。
我怎麼知道哪些值需要複核?
讀 data.review.flagged。每一項都有 path 與一個依優先順序排序的 reasons 陣列(text_mismatch、missing、pattern_mismatch、out_of_range 等已文件化的理由代碼),需要複核的數量就是 flagged.length。用 path 打開 cells[path],把 box 畫在值旁邊對照。兩次獨立的讀取仍可能在同一個誤讀上達成一致,所以業務規則檢核仍然要保留。
我怎麼把圖像傳給 API?
傳送到 POST /ocr/fields,作為 URL(imageType 'url')或純 base64(imageType 'base64',不帶 data-URI 前綴)。用 Bearer 權杖認證,金鑰以 spocr_ 開頭。傳一個描述你所需內容的 fields 陣列,或把 autoFields 設為 true。
圖像 OCR 多少錢?
每張圖片 $0.05(含稅),每月 100 點數免費且免信用卡,失敗的掃描不計費。方案計畫(Starter 與 Pro)增加每月點數、更多工作表與儲存——見上方的方案。

把你自己的圖像變成可核對的資料

免費額度——每月 100 點數,免信用卡。每個值都連同它在圖像上的位置一起回傳。

相關