為什麼 OCR 會直接給你錯字,而不是報錯

文字辨識很少承認自己失敗。它會交回一整句看起來完全通順的話,只是錯了一個字——偏偏就是關鍵的那一個。本文說明它發生在哪裡、又該怎麼抓出來。
從截圖裡複製文字通常都行得通,而問題就出在這裡。它失敗的時候,很少會大聲說出來。沒有紅色底線、沒有「無法辨識文字」、也沒有空白方框。你得到的是一句讀起來很順的話——只錯了一個字,而那個字剛好改變了意思。
這就是為什麼有人會貼上少一位數的訂單編號、拼錯一個字母的設定鍵,或是一份文件裡冒出一個原本根本不存在的字。辨識沒有當掉,它只是很有自信地猜了一個。
辨識是分類器,不是剖析器
先了解引擎實際在做什麼會有幫助。文字辨識先把圖片切成一行一行,再切成一個一個像字的區域,然後把每個區域丟進分類器,由分類器回傳最可能的字元。那個分類器從來不會說「我不知道」,它永遠會給出找得到的最接近答案。
輸入品質好的時候,這個最接近的答案幾乎處處都對。品質差的時候,最接近的答案就會變成另一個剛好長得很像的字元:可能是 o 的 a、可能是 l 的 1,或是一個和鄰居共用部件、很容易看錯的漢字。引擎完全不知道自己錯了。
什麼叫輸入「品質差」
有四件事會影響,重要性大致照這個順序:
- 文字在畫面上有幾個像素高。 字越小,能拿來分類的像素越少。這是最大的一項。
- 字元集。 中日韓文字筆畫密集,少掉幾個像素,字的形狀和身分都會跟著變。拉丁字母比較單純,撐得比較久。
- 反鋸齒與縮放。 每一次縮放都會把每一筆的邊緣糊開。縮一次還行,連續疊三次,形狀就沒了。
- 對比與背景。 白底灰字、深底淺字都會削弱邊緣,文字後面的漸層和照片也一樣。
大多數的失敗回報都來自第一項,而解法通常是想辦法擷取到更多像素,而不是更用力去試。
InSnap 沒有另外的準確度設定,它就處理你選取的那些像素:密集介面的 1x 截圖,每一行已經是螢幕當初畫出來的高度;2x 的 Retina 擷取則有兩倍。以同一段文字來說,這兩者的差別,往往就是「正確」與「看似合理但其實錯了」的差別。

實務上的界線在哪裡
與其用猜的,不如做一個小而可重複的測試,親眼看到那條界線在哪:把同一句話用幾種不同的文字高度畫出來,逐次跑辨識,再把輸出和輸入逐字比對。下面兩張圖做的就是這件事,用的是本機引擎跑出的真實結果,不是編出來的範例。
中文那一行和英文那一行各以五種高度繪製,每次都重新辨識一次。紅色標出的是和原始文字不同的字元。

從這裡可以得出兩件事。第一,這一行是「一路正確到突然不正確」:沒有逐步劣化的過程,只有一個尺寸界線,低於它就冒出錯字。第二,兩種文字斷掉的位置不一樣。這裡拉丁文字還比較早出錯,中文反而撐得比較久——這和多數人從「中文比較難」得到的直覺正好相反。
把同一句話放到更小的尺寸去辨識,輸出會變成另一種錯法。不是空白、也不是亂碼,而是一句由真實存在、但就是不對的字所組成的話:

第二張圖才是重點。它展示了錯誤結果實際長什麼樣子:明顯到你不會察覺,細微到又不至於等於沒有。
怎麼在文字進到文件之前攔下來
辨識沒辦法告訴你它沒把握,所以你得在「錯一個字代價很高」的地方親自檢查。
- 有數字或識別碼的一律檢查。 訂單編號、授權金鑰、版號字串、發票金額。只錯一位數字,放在上下文裡根本看不出來,到了下游卻是致命的。
- 檢查長度。 兩個字元的識別碼跑出三個,或反過來,都是很可靠的警訊。
- 檢查不常見的字元。 直線符號、空格、不斷行空格、西里爾字母與拉丁字母的混淆。如果是程式碼,貼進等寬字型的檢視畫面就會一目了然。
- 檢查頭尾。 一行開頭或結尾的字元,在偵測階段最容易被切掉。如果某一行結尾怪怪的,先看最後一兩個字元。
- 放大重新擷取,不要直接放大圖片。 把模糊的一行放大,並不會生出細節,也幾乎不會把錯字救回來;把同一塊區域用 2x 重新擷取,或先在來源端放大再擷取,才會有用。
由此可得的實務結論是:在良好解析度下框一個大一點的範圍,會比框得緊緊的極小截圖更好辨識。裁切能減少雜訊,縮小卻會減少資訊,而分類器吃的正是資訊。
你可以信賴到什麼程度
誠實的總結:
| 情況 | 通常沒問題 | 通常不行 |
|---|---|---|
| 一般介面大小的英文與拉丁字母文字 | 是 | — |
| 一般介面大小的中文 | 是 | — |
| 高度約在 10 px 以下的文字 | — | 不行 |
| 日文假名、韓文、俄文 | — | 不行 |
| 壓在照片或漸層上的文字 | 有時可以 | 有時不行 |
| 被大幅縮放過的截圖 | — | 不行 |
InSnap 的本機辨識對中文、英文與拉丁字母語言處理得不錯,包含帶重音的字元。日文假名、韓文與俄文則不夠可靠。這是內建模型本身的限制,不是某個設定,所以碰到這些文字時,誠實的做法是把複製到的內容再核對一次。
常見問題
文字辨識沒把握的時候會告訴我嗎?
不會。字元分類器永遠都會給出最佳猜測,介面上也沒有另外的複製信心指標。安全的假設是:它回傳的每個字元都是「最有可能的那個」,而不是「保證正確的那個」。
同樣的內容再跑一次,能把錯字修好嗎?
通常不行,因為輸入沒變,而模型對同一批像素的結果是固定的。解法是改變輸入:把同一塊區域用更大的尺寸重新擷取,或先在來源端放大再擷取,然後再辨識一次。
為什麼同一頁的兩張截圖,一張行、一張不行?
最常見的原因是文字在畫面上有幾個像素高,而這取決於螢幕縮放,以及擷取時是 1x 還是 2x。同一頁換個縮放比例、或換到另一台螢幕,就可能跨過那條尺寸界線。
它會讀取圖片和照片裡的文字嗎?
只有在文字夠大、夠清楚,而且背景單純的時候。文字壓在照片、漸層或複雜插畫上,正是錯字最容易出現的地方。
這個功能需要連上網際網路嗎?
不需要。辨識在本機執行,複製這一步也一樣。不會上傳任何東西,離線時的準確度完全相同。
部落格的更多文章

如何讓截圖的 OCR 辨識結果更準確
文字辨識的品質取決於你餵給它多少像素。框緊文字、保留解析度、避開傾斜與雜亂背景,並認清語言限制。
2026年10月25日
如何在 Mac 與 Windows 上複製截圖或圖片中的文字
把截圖裡的文字變成可以複製的文字。包含 Mac 與 Windows 的內建做法,以及用 InSnap 在本機快速完成 OCR 的流程。
2026年10月23日
如何從影片或暫停畫面複製文字
影片裡的字幕、簡報、錯誤訊息和程式碼,其實都還是文字。暫停在畫面上、框選區域,再用 OCR 複製出來,不必重新打字。
2026年10月25日
InSnap 如何自動更新(以及如何手動檢查)
說明自動背景檢查、手動檢查更新的選單項目,以及 Windows 安裝版與可攜版的行為差異;更新會保留哪些資料,失敗時又該怎麼處理。
2026年10月25日