每次報稅季或月底結帳,你是不是也曾經把一整袋收據倒在桌上,然後一張一張手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: 可以,只要改指令範本。 視覺語言模型的強項就是泛用。你只要把要抽取的欄位改成「合約甲方、乙方、簽約日」或「姓名、公司、職稱、電話」,同一套流程就能沿用。