OCR 与图像

一百页扫描件怎么快速巡检:先做可追溯的缩略总览

一百页扫描件逐页打开很慢,只看第一页又会漏掉倒置、空白和重复页。缩略总览适合先发现大范围异常,但它不能替代细字、金额和签章检查。做总览时,最重要的是保留页号与原件之间的对应关系。

阅读文本 / Reading text
本文使用合成样本演示处理方法。代码已通过隔离环境中的示例检查;这不代表对所有真实文件或产品效果的保证。处理重要文件前,请保留原件,并按文中的边界与验收项复核。 一百页扫描件逐页打开很慢,只看第一页又会漏掉倒置、空白和重复页。缩略总览适合先发现大范围异常,但它不能替代细字、金额和签章检查。做总览时,最重要的是保留页号与原件之间的对应关系。 缩略图保持比例,不把所有页拉成一样 使用 ImageOps.contain 可以在给定框内缩小图像并保持长宽比,再放到固定大小的卡片中。横页和竖页的差别应该保留,否则总览可能掩盖页面方向异常。页码标签由系统添加,不与原始页面内容混淆。 构造两页可追溯总览 from PIL import Image, ImageOps, ImageDraw pages = [Image.new("RGB", (100, 200), "white"), Image.new("RGB", (200, 100), "#dddddd")] sheet = Image.new("RGB", (240, 160), "#eeeeee") draw = ImageDraw.Draw(sheet) manifest = [] for index, page in enumerate(pages): thumb = ImageOps.contain(page, (100, 120)) x = index * 120 + (120 - thumb.width) // 2 sheet.paste(thumb, (x, 5)) draw.text((index * 120 + 10, 140), f"Page {index + 1}", fill="black") manifest.append({"page": index + 1, "source_size": page.size, "thumb_size": thumb.size, "column": index}) assert sheet.size == (240, 160) assert manifest[0]["thumb_size"] == (60, 120) assert manifest[1]["thumb_size"] == (100, 50) assert [row["page"] for row in manifest] == [1, 2] assert pages[0].size == (100, 200) 代码生成内存图,没有写文件,也没有调用识别服务。真实批次应按页分组生成多个总览,避免把数千张缩略图放入一个巨大画布。标签最好还能关联来源文件 ID,防止多个文件的第一页混淆。 总览负责发现什么 可快速发现 不适合仅靠缩略图判断 下一步 大面积空白 是否遗漏淡色批注 打开原图 方向明显异常 小角度倾斜是否影响识别 查看局部与 OCR 结果 页面外形突变 内容是否缺行 对照原始页号 疑似重复页 两页细微修订 比较原图和文本 标记异常而不是自动删除 空白页可能承担章节分隔,重复外观可能是不同版本签署页。总览只负责把疑点交给审校者,不应自动删掉“不像有用内容”的页面。最终交付仍需说明输入页与输出内容的对应关系。 先巡检输入,再审查翻译 使用 OmniDoc(产品入口) 处理长扫描件前,做一次总览巡检能更早发现输入问题。译后再围绕异常页和高风险字段审查,比只看开头几页更有针对性。总览提供方向,原图与双语内容提供最终判断依据。 参考: Pillow ImageOps.contain 。 - 1 -
更新于 2026-10-08