手機拍的文件方向不對,先處理 EXIF 再送 OCR

手機裡的合約照片看著是豎的,上傳後卻橫了過來。原因可能是像素本身沒有旋轉,檢視器只是根據 EXIF 方向標記調整了顯示。 OCR 輸入如果忽略該標記,就會讀到另一個方向的頁面。

手機拍的合約照片在相簿裡是垂直的,上傳後卻變成橫的,很多人會以為照片拍歪了或文件出錯。這篇文章寫給需要把手機照片送進 OCR 或翻譯流程的人,幫你分辨「顯示方向」和「像素方向」這兩件事。

讀完後,你會了解 EXIF 方向標記是什麼、Pillow 用哪個函數處理它,以及哪些問題它解決不了。範例使用合成樣本,程式碼已在隔離環境中做過檢查,但這不代表對所有真實文件或產品效果的保證。處理重要文件前,請先保留原件,並依文中的邊界與驗收項複審。

手機拍的文檔方向不對怎麼辦?一句話結論

先用 ImageOps.exif_transpose 應用 EXIF 方向標記,再把調整後的圖送入 OCR; 傾斜和透視問題要另外處理。

你的情況推薦做法原因
檢視器顯示正常,但解析結果橫置先用 ImageOps.exif_transpose 應用 EXIF 方向像素未旋轉,只有顯示圖層做了調整
照片整體輕微傾斜單獨評估傾斜校正exif_transpose 不處理拍攝角度
紙張呈梯形檢測紙張邊界後做透視校正透視變形不屬於 EXIF 方向問題
需要保存 OCR 返回的框同時記錄輸入尺寸、方向變換與輸出尺寸調整後的圖座標與原圖不同

顯示方向與像素方向要分開看

手機照片的像素本身可能沒有旋轉,檔案裡的 EXIF 方向標記告訴檢視器該如何顯示它。檢視器會據此調整畫面,OCR 引擎若忽略這個標記,就會讀到另一個方向的頁面。

Pillow 的 ImageOps.exif_transpose 會根據方向資訊調整像素,並移除已套用的方向標記,避免後續再次旋轉。它處理的是 EXIF 方向,不是任意拍攝傾斜或透視變形。把手機歪拍的紙張拉正,仍需要另一套幾何處理。

用合成像素測試旋轉邊界

下面的程式碼以合成圖片檢查方向標記是否正確套用:

from PIL import Image, ImageOps

source = Image.new("RGB", (40, 20), "white")
source.putpixel((0, 0), (255, 0, 0))
source.getexif()[274] = 6
fixed = ImageOps.exif_transpose(source)
assert fixed.size == (20, 40)
assert fixed.getpixel((19, 0)) == (255, 0, 0)
assert fixed.getexif().get(274) is None
assert source.size == (40, 20)
again = ImageOps.exif_transpose(fixed)
assert again.size == fixed.size
assert again.tobytes() == fixed.tobytes()

這裡用角落的紅像素幫助檢查幾何關係,沒有呼叫 OCR 引擎,也沒有模擬真實文字。因此測試只能支持「方向標記被正確應用」這一結論,不能支持「文字辨識率提高多少」。示例依赖 Pillow,应在锁定版本中运行。

對方向異常做分流

遇到方向問題時,先看現象,再判斷原因。下表可以幫你決定下一步:

觀察可能原因下一步
檢視器正常、解析器橫置EXIF 未應用檢查方向標籤與像素
整頁輕微傾斜拍攝角度獨立評估傾斜校正
頁面呈梯形透視變形偵測紙張邊界後校正
文字上下顛倒但無標記元資料缺失根據頁面內容判斷,不盲猜

座標記錄要從旋轉後開始

如果 OCR 在調整後的圖上回到文字框,框的座標就對應調整後的圖,而不是最初拍攝的圖。因此需要保留三樣資訊:輸入尺寸、方向變換和輸出尺寸。展示高亮時,再對座標應用逆變換,回到原圖位置。

只保存一組框,卻不記錄它屬於哪張圖,高亮位置就會偏離文字。

翻譯前先把圖放正

通過OmniDoc(產品入口)的 OCR 與翻譯入口處理掃描材料時,可以先對照原件確認方向。 方向、透視和清晰度是三個不同的檢查項,需要分別確認。

輸入條件整理清楚之後,再用雙語結果判斷翻譯品質。如果一遇到漏字就歸因於翻譯模型,往往會漏掉真正的輸入問題。

參考資料:Pillow ImageOps。

📊 核心對比

處理對象處理方式是否由 exif_transpose 完成
EXIF 方向標記按標記調整像素是
整頁輕微傾斜拍攝角度校正否,需獨立評估
頁面呈梯形透視校正否,需偵測紙張邊界

🎯 哪一種做法適合你?

如果你…

  • 檢視器正常、OCR 結果橫置:先套用 EXIF 方向,再重新送入 OCR。
  • 照片整體歪斜:把傾斜校正作為獨立步驟,不要指望方向處理解決。
  • 紙張邊緣呈梯形:先偵測紙張邊界,再做透視校正。
  • 需要高亮原圖位置:儲存輸入尺寸與變換訊息,展示時再做逆變換。

❓ 常見問題(FAQ)

1. exif_transpose 能把歪拍的紙張拉正嗎?

不能。它只根據 EXIF 方向標記調整像素,不處理拍攝角度或透視變形,這些需要另外的幾何處理。

2. 為什麼檢視器顯示正常,OCR 結果卻是橫的?

檢視器會套用 EXIF 方向標記,而像素本身可能沒有旋轉。 OCR 如果忽略該標記,就會讀到另一個方向的頁。

3. 範例程式碼能說明辨識率提高了多少嗎?

不能。範例以合成像素檢查方向標記是否正確應用,沒有呼叫 OCR 引擎,也沒有模擬真實文字。

4. OCR 回傳的框為什麼會和原圖位置對不上?

如果 OCR 是在調整後的圖上運行,框的座標對應調整後的圖。需記錄輸入尺寸、變換與輸出尺寸,展示時再做逆變換。

📝 總結

手機照片的方向問題,先看顯示方向還是像素方向,再分別處理方向、傾斜、透視。處理重要文件前,請保留原件並完成複審。

立即體驗:上傳文件即可開始翻譯,保留原排版

更新於 2026-11-11