這裡的 OCR 怎麼運作
掃描版 PDF 裡存的是頁面圖片,不是文字。要從中得到 Markdown,就得用文字辨識模型逐張讀圖。大多數網站的做法是把檔案上傳到伺服器,這裡則是讓模型來到你的裝置上:
- 轉換器先查看每一頁。 已有文字層的頁面直接讀取,更快也更準確。沒有文字層,或文字層由對應不到字母的字元組成的頁面,交給 OCR。
- 把頁面繪製成圖片,就在分頁裡完成,解析度足以看清小字。
- 偵測模型找出文字行,辨識模型逐行讀取。兩者都是 PaddleOCR 模型(Apache 2.0),透過 WebAssembly 執行,瀏覽器允許時使用多執行緒。
- 依閱讀順序重新排列各行:合併段落,依行高推斷標題,把依欄對齊的行重建成表格。之後這一頁就和其他頁面一樣轉成 Markdown。
第一次轉換掃描檔時會下載模型:拉丁字母和中文約 6 MB,日文或韓文約 20 MB。之後模型留在快取裡,OCR 立刻就能開始。
速度如何?
在較新的筆電上,模型載入完成後,一般頁面每頁約 2 到 4 秒。手機比較慢,字小又密的頁面也比一封信慢。進度列會顯示正在辨識哪一頁,取消隨時可以停下。已經辨識的頁面會保留,重新開始時從停下的地方接著做。
如果只有部分頁面是掃描的,就只有這些頁面走 OCR。一份 200 頁的報告,只有附錄三頁是掃描檔,轉換速度和完全沒有掃描頁時幾乎一樣。
檢查 OCR 沒把握的頁面
辨識模型很好,但並不完美。轉換器不會讓你從頭校對到尾,而是記錄模型對每一行的信心度。只要某頁有一行低於門檻,這頁就會出現在待檢查頁面裡,標註「OCR 對部分字詞沒把握」,頁面影像就放在它的 Markdown 旁邊,方便對照。
相反的問題也在這裡解決。有些 PDF 的文字層是壞的:字型對應到錯誤的字元,讀出來毫無意義。這些頁面會被標記為疑似亂碼,點用 OCR 辨識這一頁,就只針對這一頁從影像重新辨識。
選對模型
| 你的文件 | 在「掃描頁」中選擇 | 下載大小 |
|---|---|---|
| 英文、西班牙文、法文、德文、葡萄牙文等拉丁字母語言 | 拉丁字母和中文 | 約 6 MB |
| 中文(簡體和繁體印刷體) | 拉丁字母和中文 | 約 6 MB |
| 日文 | 日文 | 約 21 MB |
| 韓文 | 韓文 | 約 18 MB |
你的選擇會在下次造訪時保留。中文文件夾雜英文時,「拉丁字母和中文」模型兩者都能讀;日文或韓文文件夾雜英文時,選日文或韓文模型比較好,因為每個模型也認得拉丁字母和數字。
讓掃描檔辨識得更好
- 自己掃描時用 300 dpi。 低於 200 dpi,小字就開始糊成別的字母。
- 頁面越正,辨識越好。 斜著拍的頁面,或往書背彎進去的頁面,邊緣附近可能漏字。
- 文字層不可信時,在掃描頁裡選所有頁面,例如老式掃描器 OCR 產生的文字層。轉換器會忽略它,自己辨識每一頁。
- 在手機上轉換長掃描檔時,可以只轉換部分頁面,避免記憶體不足。
OCR 目前還做不到的
- 手寫字不支援,模型是用印刷體訓練的。
- 擁擠或歪斜的表格。 掃描的表格在欄位對齊清楚時會變成 Markdown 表格。欄位擠得很近,或頁面掃歪了,就可能輸出為一行行文字。詳見 PDF 表格轉 Markdown。
- 公式依模型看到的字元輸出,不會變成 LaTeX。
- 上面模型以外的語言,例如阿拉伯文、希伯來文、西里爾字母、希臘文、泰文或印地文,OCR 都不支援。不過這些語言的 PDF 只要有文字層,照樣能轉換,因為不需要 OCR。
瀏覽器裡的 OCR 安全嗎?
安全。每一頁都在這個分頁裡繪製和辨識,文字一直留在它的記憶體裡,直到你複製或下載。頁面的任何內容,不論影像或文字,都不會傳送到任何地方。所以掃描的合約、病歷和其他不想上傳的文件都可以放心使用。執行時你可以打開瀏覽器開發人員工具的網路面板查看:沒有任何請求帶著你的檔案或文字。
常見問題
能轉換文件照片嗎?
請先把照片做成 PDF,大多數手機都能在分享選單裡把掃描結果或照片存成 PDF。然後把 PDF 拖到這裡。目前還不直接接受圖片檔。
為什麼第一次掃描比較慢?
因為第一次要下載 OCR 模型,只下載這一次。只要瀏覽器保留快取,之後的掃描即使換了一天也不用再等。
掃描檔有文字層,但文字是錯的,怎麼辦?
那個文字層來自掃描器內建的 OCR,品質可能很差。在掃描頁裡選所有頁面重新轉換,或在看起來不對的頁面上使用用 OCR 辨識這一頁。
能離線使用嗎?
轉換開始後,只要模型已在快取裡,就不需要網路。中途斷線,處理也會繼續。