OCR 与图像

手机拍的文档方向不对,先处理 EXIF 再送 OCR

手机里的合同照片看着是竖的,上传后却横了过来。原因可能是像素本身没有旋转,查看器只是根据 EXIF 方向标记调整了显示。OCR 输入如果忽略该标记,就会读到另一个方向的页面。

阅读文本 / 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