OCR Server 免費開源工具:把手機的文字辨識開放成區網 API

OCR Server 是免費開源的 iOS 應用,把 iPhone 的文字辨識開放成區域網路 API,同一個 Wi-Fi 的電腦用 curl 就能呼叫,圖片只在手機記憶體處理,不落地也不外送。本文拆解它的伺服器架構與 JSON 回應設計,並整理使用前要接受的三個現實:無身分驗證的明文 HTTP 區網邊界、鎖屏即斷線沒有背景模式,以及表格與清單辨識限定 iOS 26。

用 AI 摘要這篇文章:

你的 iPhone 其實早就會辨識文字:照片裡指到字就能選取複製,捷徑 App 裡也有現成的萃取文字動作。這些都靠 Apple 的 Vision 架構在裝置端完成,不花流量、不按次計費。缺的從來不是辨識能力,是讓別台機器呼叫它的那一哩。OCR Server 補的就是這一哩:一個免費的開源 iOS App,把 iPhone 變成區域網路上的文字辨識端點,桌上的電腦一行 curl 就能把圖餵過去,拿回整頁文字加上每行字的座標。把語音或文件送去雲端辨識的服務我們介紹過不少,例如按分鐘計費的Any2Text;這個 App 走的是反方向:你的圖從頭到尾不離開手機。

先把這篇的判斷基礎講清楚:它是開源專案,我把 GitHub 上的 Swift 原始碼完整讀過一遍,對照 App Store 商店頁與開發者在 issue 裡的公開回覆。辨識速度與準確度這類要實際跑才知道的事,文中只引官方說法,值不值得留給你自己的圖來回答。

結論先講。它在官方文件裡承諾 100% 本地處理,這點在程式碼層站得住;但它同時是在手機裡開了一個沒上鎖的 HTTP 連接埠,同一個 Wi-Fi 裡的任何人都能用;而且鎖屏就斷線,背景模式明確不做了。把它當成一台很小的伺服器來部署,先設好網路前提,這筆交換才成立。

一支手機裡跑著完整的網頁伺服器

這不是相機 App 順便附帶上傳功能。翻開原始碼,HTTP 服務用的是 Vapor,一套原本拿來寫後端服務的 Swift 框架,被完整內嵌進手機。這個選擇有個演進痕跡:早期的 1.2 版用的是輕量級的 Swifter,1.3 版整個換成 Vapor,等於開發者中途把底層框架整個換掉。伺服器監聽所有網路介面,預設連接埠 8000,設定頁可以改成 1 到 65535 的任意值,v1.3.9 起輸入還會先驗證合法性,這正是倉庫唯一被合併的外部貢獻。

對外只有三條路由:瀏覽器打開就看到的上傳網頁、給程式呼叫的 upload(逐行辨識,回傳全文與座標),以及 docOCR(段落、表格與清單,限 iOS 26 以上)。有個貼心到近乎工程師風格的細節:那個上傳網頁本身就把 curl 指令直接印在畫面上,忘了參數也不用翻文件;iOS 26 以上還會多印一條 docOCR 的範例。引擎是 Apple Vision 的新 Swift 介面,預設走準確等級,開著語言校正與自動偵測語言,同樣建立在 Apple 的 Vision 架構上。表格與清單則走另一個 iOS 26 才有的文件辨識介面,直接輸出 Markdown 格式;原始碼裡還能看到它先抓表格與清單,再把落在這些區塊裡的段落排除掉,避免同一行字被輸出兩次。

開發者也真的按伺服器的標準對待它:服務行程掛掉會自動重啟,App 內建監控面板,CPU、記憶體、熱狀態、電池全都看得到,網路連線狀態也有即時顯示。上傳大小設了 100MB 上限,程式註解標明可以自行調整。這些細節湊起來的訊息很明白:它是一台恰好放在口袋裡的伺服器。設定面板同樣照伺服器的思路開參數:辨識等級可以在快速與準確之間切換,語言校正與自動偵測語言各有獨立開關,改完設定服務會重啟生效,行為全部攤在明面上。

iPhone 螢幕顯示 OCR Server App 介面,狀態列寫著 server is running,並列出 Wi-Fi 與 Ethernet 兩個網路介面的伺服器網址,手機以傳輸線與其他設備相連Pin
App 主畫面顯示伺服器狀態與各網路介面的存取網址(專案官方 README 圖片,早期 v1.1 版介面)

不上傳這件事,可以打開原始碼對答案

官方文件寫 100% 本地處理,商店頁也標所有處理在本機完成,隱私標籤是「不收集資料」,後者為開發者自行填報。這類宣稱通常只能選擇相不相信,但因為它開源,你有第三個選項:直接驗。整份原始碼裡沒有任何檔案寫入,上傳的圖在記憶體裡跑完辨識就丟掉;沒有任何對外連線呼叫,僅有的外部網址是 App 內建的說明文件檢視器;也找不到分析、廣告或追蹤元件。整個 App 牽涉到錢的地方只有一個請喝咖啡的內購,走的是 Apple 帳單。宣稱與程式碼對得上,這在工具 App 裡算少見的乾淨。

文件面就沒這麼講究。商店頁連結的隱私政策是一個 GitHub Pages 頁面,全文只有一句話:We don’t store your data, period. 沒有寫誰負責、涵蓋哪些服務、出了事怎麼聯絡。想在裝置端完成辨識的路線,語音那邊也有對應的例子,像先前介紹過的本機語音轉 Markdown 工具;差別在於那些至少有正式文件,而這裡的承諾全寫在程式碼裡。對看得到原始碼的人,這反而更硬;對看不到的人,它是真空。

三條路由都沒上鎖,你的 Wi-Fi 就是它的城牆

原始碼裡的三條路由都沒有身分驗證,沒有 API key,也沒有 TLS,走明文 HTTP。實際意義是:連上同一個 Wi-Fi 的任何人,都能把你的手機當成免費 OCR 用,也都能送 100MB 的請求本體進去。手機端不會留下請求紀錄,誰在什麼時候送了什麼圖,事後無從查起。

為什麼這會改變你的決定。在家用網路,這通常是可以接受的取捨,區網本來就是信任邊界,官方文件也只叫你在同一個網路裡存取;不裝鎖對單人開發的區網工具來說也是常見選擇,加了身分驗證反而會擋到最主要的使用場景,這點算是合理推論。換到辦公室、宿舍或咖啡廳的共用網路,性質就變了:你等於對整個網段開放一個吃記憶體的端點,而且沒有用量上限擋在前面。要真正隔離,得靠路由器的訪客網路或 VLAN,把辨識手機關進一個連不到你其他設備的網段;App 本身沒有提供任何鎖,改連接埠只是換個門牌,擋不住會掃 port 的人。

明文 HTTP 還有另一層:同網段的監聽設備理論上看得到你送出的圖片內容。家用場景裡這個風險很小,但如果你打算辨識的是合約、就診紀錄這類文件,先把網路層前提想清楚,再按下上傳。

鎖屏就斷線,背景模式明確不做了

官方文件給的長時間運行方案很老實:開啟引導式存取(Guided Access)把整支手機鎖在這個 App 裡,並保持螢幕亮著。2026 年 7 月有人在 GitHub issue 回報鎖屏後服務中斷,開發者的回覆相當直接:此 App 並不打算加入背景模式,要背景執行可以考慮裝在 Mac 上,或改用同一開發者的 macocr。

這是 iOS 對背景常駐伺服器的平台限制,加上開發者自己的設計決定,短期內不會變。引導式存取本來是為了協助需求設計的功能,拿來顧伺服器等於把手機變成單用途設備,觸控停用、自動鎖屏一併關掉。代價要算清楚:螢幕常開代表持續耗電與發熱,實際幅度我沒有量測,不給數字,但拿舊手機當全天候設備的人,供電與擺放位置都要先想好。

出路官方已經畫好了。這個 App 在 macOS 15.4 以上、Apple 晶片的 Mac 也能安裝,要長時間跑,Mac 才是正確載體;偏好命令列的人,同一位開發者的 macocr 是 macOS 13 以上可用的終端機版本,倉庫描述同樣強調走 Vision 架構。想讓 iPhone 承擔 24 小時服務的人,這條路在設計上就不通。

免費、單人維護,先被寫程式的人看見

商店版本 1.3.9,發布於 2026 年 5 月底,與 GitHub 最新發布同版,沒有漂移。免費、無廣告、無訂閱,唯一的內購是一次 4.99 美元的請喝咖啡,所有功能不付錢都能用。最低系統 iOS 18.4,下載大小約 20.4MB。App 介面與說明文件都做了多語系,繁中、簡中、日文、韓文、法文齊備,README 也有六種語言版本,對一個單人專案來說誠意突出。

採用面的落差很有意思。GitHub 上累積了上千顆星與上百次 fork;App Store 台灣區 5 則評分平均滿分,美國區與日本區則掛零。它是一個先被寫程式的人看見的工具。倉庫 2025 年 8 月初開張,同月中旬就上了 App Store,跑了一年多、十四個版本,從最初的上傳辨識長到今天的座標與文件模式。開發者帳號 riddleling 佔了 124 個提交;期間有人提交了兩個接上 MCP 協定、讓 AI 代理直接呼叫的 PR,都被關掉沒有合併,方向要不要往代理生態靠,作者顯然有自己的節奏。GitHub 上的名字是 Wei-Cheng Ling,issue 裡用繁體中文回覆使用者。

功能是照著使用者的要求長出來的。倉庫第一個 issue 就是要文字方塊座標,後來 JSON 回應裡就有了;接著有人追問旋轉角度資訊,四角座標也補上了;2026 年 5 月中有人回報段落與換行辨識不佳,同一個月就加入文件辨識模式並隨版發布。回應速度快是單人維護的優點,作者一旦停下來就是它的風險。

三分鐘試出它值不值得留

它適合的工作形狀:寫腳本把截圖批次轉成文字、團隊在區網共用一個辨識端點、手上剛好有閒置的 iPhone。如果你的來源是 PDF,先確認文件本身有沒有文字層,我們介紹過的firecrawl pdf-inspector就是在做這件事的判別;要把辨識出來的文字縫回 PDF,Nano PDF是另一端的例子。官方文件還提過用多支手機組成辨識叢集的玩法,吞吐量官方沒有給數字,我沒有實測。

官方流程很短:App Store 裝完打開,伺服器自動啟動,畫面會顯示手機在區網裡的 IP,還附一個重新整理 IP 的按鈕,換了網路環境不用重開 App。同一個 Wi-Fi 的電腦用瀏覽器打開那個地址,就有現成的上傳網頁,選圖送出,官方稱幾秒內回傳結果。要接進自己的程式,官方文件給的例子一行就通:

電腦瀏覽器開啟手機 IP 的 OCR Server 網頁,頁面印出 curl 呼叫範例,下方是選擇檔案與上傳按鈕,網址旁顯示不安全標記Pin
官方 README 的網頁介面示範:curl 指令直接印在上傳頁上,網址列可見明文 HTTP 的不安全標記
curl -H "Accept: application/json" -X POST http://手機IP:8000/upload -F "file=@圖片檔.png"

偏好 Python 的話,README 也附了用 requests 上傳的完整範例,連回應怎麼解析都寫好了。回傳的 JSON 欄位名稱很直白:ocr_result 是整頁合併後的文字,ocr_boxes 是陣列,每個元素帶自己的文字內容與座標,image_width 和 image_height 標明圖片尺寸,單位是像素。座標不只給了外接矩形,還給了四個角的原始位置,圖片有旋轉或傾斜時角度資訊不會丟,要做版面分析或把文字貼回原位置都夠用。

一張 Rust 程式設計書籍封面上畫著紅色文字方塊框,書名與副標各自被框起並附文字標籤,展示 OCR 座標輸出結果Pin
官方 README 示範的座標輸出:紅框標出每段文字的辨識方塊(專案原始檔案)

驗收的方式:拿你自己最常見的那種圖先試一張,發票、螢幕截圖、文件照片都行。換行與欄位有沒有對、速度順不順,一張圖就會給答案;要看表格結構,先確認手機已經升到 iOS 26,否則 docOCR 端點會明確回你一句不支援,這個拒絕訊息寫得很清楚,不會讓人猜。看到結果欄位亂掉,後面的功夫就全省了。

判斷很簡單。值得裝的形狀:你要在區網內做文字辨識、不想管雲端服務的金鑰與計費、手上有多餘的 iPhone 且能接受它插著電亮著螢幕。不屬於你的形狀:服務要對外開放、需要加密與身分驗證、要無人值守的穩定輸出,這三種需求該去 Mac、自架服務或雲端找答案。

授權與專案現況

採 MIT 授權,原始碼完整公開,有 Apple 開發環境的人可以自己編譯安裝。專案現況(截至 2026 年 8 月):GitHub 上 1,821 顆星、162 次 fork,App Store 版本 1.3.9,倉庫最後提交 2026 年 6 月初,單人維護。相關資源:

Sliven 褚崇名
Sliven 褚崇名

每日分享科技新知、免費資源以及 WordPress、虛擬主機相關主題,任何問題歡迎在科技月球下方留言,或是發送 Email 至 [email protected] 與我聯繫。

文章: 988

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


Share to...