阅读文本 / Reading text
本文使用合成样本演示处理方法。代码已通过隔离环境中的示例检查;这不代表对所有真实文件或产品效果的保证。处理重要文件前,请保留原件,并按文中的边界与验收项复核。
表格单元格裁得很紧,文字旁边一点空白都没有,识别效果未必更好。更重要的是,裁剪与补边改变了坐标原点。如果不保存这些变化,后续把识别结果画回整页时,就会出现看似随机的偏移。
空白边距是输入策略
Pillow 的
ImageOps.expand
可以在图像外添加边框。边框宽度应通过自己的样本验证,不能把某个固定像素值当成所有 OCR 引擎的要求。本文只是用小图展示补边与坐标平移,不测识别准确率。
明确一个像素从哪里移动到哪里
from PIL import Image, ImageOps
crop = Image.new("L", (20, 10), 255)
crop.putpixel((0, 0), 0)
padding = 4
padded = ImageOps.expand(crop, border=padding, fill=255)
assert padded.size == (28, 18)
assert padded.getpixel((padding, padding)) == 0
assert padded.getpixel((0, 0)) == 255
crop_origin = (100, 50)
def back_to_page(x, y):
return x - padding + crop_origin[0], y - padding + crop_origin[1]
assert back_to_page(4, 4) == (100, 50)
assert back_to_page(14, 9) == (110, 55)
assert crop.size == (20, 10)
样本假设只发生裁剪和等宽补边,没有缩放、旋转或透视变换。若管线包含更多步骤,需要保存完整变换链,而不是在最终坐标上凭感觉加减几个数字。
裁剪边界怎样验收
检查项
观察方法
失败处理
字符未被切断
对照原页放大查看
扩大裁剪区域
边框未盖住文字
对比像素与尺寸
修正补边实现
原点记录正确
用已知角点回映射
检查操作顺序
空白内出现识别框
查看是否为噪声
不直接认作正文
别把区域裁剪等同于内容理解
一个紧邻金额的货币符号可能位于裁剪区外。OCR 即使准确识别了数字,业务字段也仍然不完整。裁剪规则要考虑标签与单位,而不只是文字黑色像素的外接矩形。
翻译审查保留上下文
使用
OmniDoc(产品入口)
处理扫描材料时,若自己先做区域预处理,应保留整页与裁剪来源。审校不只需要知道某个词怎么翻,还需要知道它属于表头、脚注还是正文。适当边距和来源坐标都是减少歧义的实用信息。
参考:
Pillow ImageOps.expand
。
- 1 -
更新于 2026-10-08