每次報稅季或月底結帳,你是不是也曾經把一整袋收據倒在桌上,然後一張一張手key進Excel?發票、的士收據、餐廳單、淘寶電子單、還有那張被咖啡濺到的停車場票根。光是分類就要半小時,更別說打錯一個數字,整張報表就要重來。

這篇文章要教你的是:如何用現在已經開源、可以自己架設的OCR模型,把「拍照→辨識→整理成表格」這條路自動化。我們會用到 HuggingFace 上這週衝上熱門的 XingChen-AGI/TeleOCR(基於 Qwen2.5-VL 的圖文轉文字模型),以及同家族的 Qwen-Image 系列生態。你不用會寫程式到很深,只要有基本的電腦操作能力,跟著做就能建立一套屬於自己的單據處理流程。

為什麼傳統OCR不夠用,AI OCR強在哪裡?

先講一個很多人踩過的坑。傳統OCR(例如早期的Tesseract)做的事情是「看字認字」,它把圖片切成很多小方塊,逐字辨識。問題是收據這種東西排版超亂:金額可能在右上角、日期被折到、品項名稱跟數量擠在一起,還有一堆手寫備註。傳統OCR給你的是一坨沒有結構的文字,你還是得自己判斷「哪個數字是總額」。

新一代的視覺語言模型(VLM)不一樣。它同時「看圖」也「理解語意」。你給它一張收據,它不只知道上面寫了什麼,還知道「Total」「合計」「應付金額」指的都是同一件事。TeleOCR 這類模型甚至可以讓你用一句話下指令,例如「請把這張收據的日期、商家、總金額抽出來,用JSON格式回傳」,它就照做。

這就是關鍵差異:傳統OCR給你文字,AI OCR給你結構化資料。而結構化資料,才是可以直接丟進Excel、丟進會計系統的東西。

實際怎麼做?三步驟建立你的單據流水線

第一步:選擇你的執行方式

你有兩條路可以走。第一條是完全不懂技術也能用的路線:找已經包好介面的線上服務,把圖丟上去就有結果。第二條是本文重點,自己用開源模型跑,好處是資料不外流、長期成本低、可以完全客製。

如果你選第二條,最簡單的入門方式是透過 HuggingFace 的 Inference API,或是用 Ollama、LM Studio 這類工具在本機跑量化版本。以 TeleOCR 來說,它基於 Qwen2.5-VL,代表你可以搭配社群的 GGUF 量化檔,在一般有獨顯的筆電上就跑得動。香港很多中小企的會計同事電腦規格其實不差,這條路是可行的。

第二步:寫出你的「抽取指令」

這一步是整篇文章最值錢的地方。多數人失敗不是因為模型不夠強,而是因為指令寫得太隨便。你不能只說「幫我讀這張收據」,你要明確告訴它你要什麼欄位、什麼格式。

一個實用的指令範本長這樣:

你是一個單據辨識助手。請閱讀這張收據圖片,並以JSON格式輸出以下欄位:
{
  "date": "YYYY-MM-DD 格式的日期",
  "merchant": "商家名稱",
  "category": "餐飲/交通/辦公/其他 四選一",
  "total": "總金額,純數字",
  "currency": "HKD 或 TWD",
  "tax_id": "統一編號或商業登記號,沒有就填 null"
}
若某欄位無法辨識,請填 null,不要猜測。

注意最後那句「不要猜測」非常重要。AI 很怕你逼它給答案,它會硬掰。明確允許它填 null,準確率反而會上升。這是很多教學沒講到的細節。

第三步:批次處理與人工複核

一張一張丟太慢。你可以寫一個簡單的迴圈,把資料夾裡所有圖片依序送進模型,結果存成 CSV。以下是一個概念性的 Python 範例:

import os, json, csv
from your_ocr_client import recognize

rows = []
for filename in os.listdir("receipts"):
    result = recognize(f"receipts/{filename}", prompt=EXTRACT_PROMPT)
    data = json.loads(result)
    data["source_file"] = filename
    rows.append(data)

with open("output.csv", "w", newline="", encoding="utf-8-sig") as f:
    writer = csv.DictWriter(f, fieldnames=rows[0].keys())
    writer.writeheader()
    writer.writerows(rows)

跑完之後,一定要人工複核。我的建議是設定一個「信心門檻」:如果模型回傳的 total 是 null,或金額明顯不合理(例如一張茶餐廳收據顯示 8,800 元),就標記起來人工看。實務上,一疊 100 張收據,大約只有 5 到 10 張需要你動手。這比全部手key快太多了。

香港台灣讀者的實際應用場景

對自由工作者來說,這套流程最大的價值是「報稅季不用崩潰」。平常收到單據就隨手拍照丟進一個雲端資料夾,年底跑一次批次,直接產出會計師要的明細表。

對中小企來說,可以進一步接上 Google Sheets 的 Apps Script,讓新拍的照片自動觸發辨識、自動新增一列。會計同事只需要在 Sheets 上覆核,不用再開 Excel 手打。

有一個台灣的餐飲業案例值得一提:他們把供應商送來的紙本對帳單全部拍照,用類似的 VLM 流程抽取「品項、數量、單價」,再跟自家 POS 系統比對,一個月省下大約 15 小時的人工核對時間。換算成時薪,這筆投資兩三個月就回本了。

成本與隱私:自己跑還是用雲端?

這是最多人問的問題。用雲端 API 的優點是快、不用管硬體,缺點是單據內容會離開你的電腦。收據上通常有你的名字、消費習慣、有時候還有信用卡末四碼。對重視隱私的用戶,自己在本機跑量化模型是更安心的選擇。

成本上,本機跑只有電費跟硬體攤提;雲端 API 則看用量。如果你一個月只處理幾十張,雲端很划算;如果你每天有上百張,自己架設長期會便宜很多。這個取捨沒有標準答案,端看你的量與敏感度。

總結:先從十張開始

不要想一次就建立完美系統。今天先做一件事:挑十張你最常出現的收據類型,用上面教的指令範本試跑一次,看看準確率如何。你會發現,只要指令寫得夠明確,AI 的表現通常比你想像的好。等你抓到訣竅,再慢慢擴大到你所有的單據。省下來的時間,拿去喝杯咖啡也好。

延伸閱讀

常見問題

Q: 我完全不會寫程式,也能用這套方法嗎?

A: 可以。 你可以先用現成的線上 OCR 服務或手機 App 體驗「拍照轉表格」的流程,理解概念後再考慮自己架設。本文的程式範例只是讓你了解原理,實務上有很多免寫程式的替代方案。

Q: TeleOCR 跟一般手機內建的掃描功能差在哪?

A: 差在「理解」而不只是「辨識」。 手機內建掃描通常只幫你把圖片轉正、去背,輸出的還是圖片或純文字。TeleOCR 這類視覺語言模型能直接輸出結構化的 JSON,幫你分好欄位,這才是省時間的關鍵。

Q: 辨識錯誤率大概多少?需要全部人工檢查嗎?

A: 視單據清晰度而定,通常八成到九成五之間。 印刷清楚、格式固定的收據準確率高;手寫或皺褶嚴重的會下降。建議設定 null 值與異常金額的自動標記,只人工複核被標記的那幾張,不用全部重看。

Q: 收據上有個資,用 AI 辨識會不會有隱私風險?

A: 取決於你用哪種方案。 雲端 API 代表圖片會上傳到對方伺服器,請先確認其隱私政策。若你處理的是敏感單據,建議用本機執行的量化模型,資料完全不出你的電腦。

Q: 這套流程可以用來處理發票、合約或名片嗎?

A: 可以,只要改指令範本。 視覺語言模型的強項就是泛用。你只要把要抽取的欄位改成「合約甲方、乙方、簽約日」或「姓名、公司、職稱、電話」,同一套流程就能沿用。