阅读文本 / Reading text
本文使用合成样本演示处理方法。代码已通过隔离环境中的示例检查;这不代表对所有真实文件或产品效果的保证。处理重要文件前,请保留原件,并按文中的边界与验收项复核。
手机里的合同照片看着是竖的,上传后却横了过来。原因可能是像素本身没有旋转,查看器只是根据 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
。
- 1 -
更新于 2026-10-08