米格速压
OCR 识字 原理

OCR 怎么识别图片里的字?为什么有时认错 / 漏认 / 错位

OCR 识字工具不是黑盒。理解它的工作原理(图像预处理 → 文字检测 → 字符识别)能解释 90% 的识别失败,以及怎么从拍照角度让识别率从 60% 提到 95% 以上。

米格速压
2026-05-149 分钟
分享

有次同事拿着一份合同照片给我:"帮我把里面的条款抠出来,我要做对比表。" 合同 12 页,每页 800-1000 字。我用 OCR 工具识别,出来的结果一塌糊涂: 标点错位、表格变文字流、"0" 和 "O" 混杂、行尾的字号小的字直接漏掉。 最后我花了 1 小时手动校对,基本等于自己重打了一遍。

那次之后我研究了一下 OCR 怎么工作的。原理搞懂了,90% 的识别失败都能解释, 也能反推怎么拍照才能让识别率从 60% 提到 95% 以上。这篇就是这个逆向工程的结果。

OCR 在做的 3 件事(顺序很重要)

OCR 不是"看图认字"这么简单。它实际上是三个独立步骤串起来的:

  1. 图像预处理:把原图旋转摆正、去除噪点、调对比度,变成模型适合处理的标准格式
  2. 文字检测:在图里找出"哪些区域是文字"(画出文字行的边界框),哪里是图片 / 表格 / 空白
  3. 字符识别:把检测到的每一行文字,一个字一个字识别出来

多数人以为 OCR 重点是第 3 步("字符识别"够不够准),其实第 1 步和第 2 步出问题, 第 3 步再准也救不回来。这是 OCR 工具效果好坏的核心。

第 1 步出错:图像预处理

预处理失败最常见的 3 种:

问题 1:倾斜超过 5°,文字检测全错

文字检测算法假设文字"水平排列"。原图倾斜 5° 以内,模型可以校正过来; 倾斜 10° 以上,模型可能把同一行的左右两半识别成两行,识别结果完全乱套。

怎么避免:拍照时手机水平方向跟纸张水平方向对齐(俯拍时,手机长边对齐纸张长边)。 用 iOS / 现代 Android 的"扫描文档"功能,系统会自动检测纸张边缘并修正倾斜。

问题 2:光线不均匀,半张图变暗

你头顶有灯,纸张右半亮、左半暗。OCR 的预处理算法默认全图统一对比度, 右半的高亮区域可能被算法当成"过曝白纸",左半的暗区文字 OCR 当成"低对比度淡化文字"扔掉。

怎么避免:拍照前先看纸张表面有没有阴影。让光源在前方而不是头顶。 实在不行,在背景白纸下方塞张白纸做漫反射,光线就匀了。

问题 3:分辨率太低,字符分辨不出来

手机摄像头默认拍 4000×3000 像素的图,看起来很清楚。 但有些 OCR 工具会先把图缩放到 1024px 处理,这一缩,小字号的字直接糊成一团。

怎么避免:拍照时只拍重要内容,把不需要识别的部分裁掉。 原图就是"主要文字 + 极少空白"的话,工具缩放后仍然清晰。如果整张 A4 纸只用了中间 1/4 的内容, OCR 缩放后中间那块就只有 1/16 的有效像素了。

第 2 步出错:文字检测

第 2 步是"画文字边界框",它的失败模式比较微妙:

问题 4:多列排版被压成单列

报纸 / 杂志 / 学术论文经常 2 列或 3 列排版。没有"版面分析"功能的 OCR 工具 会把同一行从左到右扫一遍,把第 1 列第 1 行 + 第 2 列第 1 行连成一句话, 整篇看起来全乱了。

解决:用支持"自动版面分析"的 OCR(高端 OCR 默认带,免费的版本可能不带)。 实在没有,识别前手动把多列图裁成单列单独识别。

问题 5:表格被识别成文字流

表格的每个单元格是独立内容,但没有表格识别能力的 OCR 会把整张表格当文字段读,所有单元格内容混排,结构丢失。

解决:用带"表格识别"功能的 OCR 工具,它会输出结构化数据(可导出 Excel / CSV)。 如果你拿到的工具不支持表格识别,接受文本流后手动重建表格。

第 3 步出错:字符识别

字符识别的错误率受 3 个因素影响:

问题 6:相似字符混淆

  • 0 / O / o:数字零和字母大小写 O 在多数字体下几乎相同
  • 1 / l / I:数字一、小写 L、大写 I 在某些字体下完全相同
  • "己 / 已 / 巳":中文里也有大量形近字
  • "未 / 末""未 / 来""己 / 巳 / 已"

OCR 靠"上下文"区分:身份证号场景里 0 必然是数字,合同里"已签字"和"己签字"前者更可能。 但当上下文不明显时(如商品编码 A1B2C3),错误率上升

问题 7:小字号被忽略

OCR 模型训练时主要用大字号文本,字号小于 8pt(图像中实际像素 < 20px 高)的字识别率明显下降。 合同里的"批注小字"、"页脚法律声明"经常被识别错。

解决:拍照时让小字部分占图的更大比例。如果整张 A4 上只关心页脚, 就单独拍页脚,小字也能放大到 OCR 容易识别的尺寸。

怎么拍照让识别率从 60% 提到 95%

综合上面 7 个错误模式,我现在拍要 OCR 的图片都按这套来:

  1. 用"扫描文档"模式(iOS Notes / Microsoft Lens / 印象笔记扫描),自动校正倾斜和透视
  2. 光线从前方过来(不要头顶光),纸张上没有阴影
  3. 距离 30-40cm,让纸张占满取景框 80% 以上
  4. 对焦在文字密集区域,等画面停下来再按快门
  5. 多页文档分页拍,不要一次拍两页(同时拍两页的话,两边的文字都不够清晰)

做这 5 件事,即便用普通 OCR 工具,中文印刷体识别率也能稳定在 95% 以上。

识别完了别忘了校对

OCR 永远做不到 100% 准确。识别完后必须人工校对的 3 个地方:

  • 数字 / 字母混排:商品编号、身份证号、银行卡号 —— 这些位置 OCR 错一个字就报废
  • 标点符号:OCR 经常把"。"识别成"."、","识别成"、",合同里这种错容易导致歧义
  • 句末漏字:文字行右边缘的字符识别率比中间低,经常漏最后一两个字

总结

OCR 不是黑盒。它的 3 步处理流程决定了你拍照阶段就要做哪些事, 做好预处理 + 用对版面分析功能 + 知道哪些字符容易错,90% 的失败可以避免。

站里的图片识字 OCR 工具 内置自动倾斜校正 + 版面分析,中文识别率 96%+。识别后想保留排版可以直接导出富文本格式, 或者用PDF 转 Word 不乱码这篇里的流程二次加工。

常见疑问

为什么我拍的同一份文件,有时候识别准确,有时候不准?
99% 是因为拍摄环境变了。OCR 对光线均匀度、对比度、清晰度、倾斜角度都敏感。常见的差异点:① 一次靠窗户拍,一次靠台灯拍,亮度不同;② 一次水平拍,一次斜着拍 10°,文字行检测难度差很多;③ 一次用平板拍(分辨率 1600px),一次用手机拍(分辨率 3000px),识别率有差距。
手写文字能识别吗?
能,但准确率比印刷体低很多。OCR 模型训练数据 99% 是印刷字,手写字的训练数据有限。手写中文识别率通常在 60-85%(印刷中文 95%+),英文手写比中文好(因为字符简单)。如果识别手写笔记,推荐用专门的手写 OCR 引擎(比如 Google Lens 或者讯飞输入法的手写识别),通用 OCR 工具表现一般。
能识别表格的结构吗?
能,但需要 OCR 工具有"版面分析"功能。传统 OCR 只输出文字流,所有单元格内容混在一起。带版面分析的 OCR 输出结构化数据(每个单元格的位置 + 内容 + 表格行列归属),可以直接导出 Excel。如果你的 OCR 工具只给你一堆文字,说明没做版面分析,需要换工具。
为什么数字 0 被识别成字母 O?
在多数字体里 0 和 O 形状几乎相同,OCR 模型只能靠"上下文"区分(身份证号场景 99% 是数字)。如果你的图里数字和字母混排(比如商品编码 A1B2C3),识别错可能性大。补救:① 选 OCR 工具时看支持不支持"指定识别集"(只识别数字 / 只识别字母);② 识别后手动用查找替换:数字 0 区域里出现的 O 全替换成 0。
能直接识别 PDF 里的文字吗?
分两种情况。① 如果 PDF 本身是"文字层 PDF"(从 Word 导出的那种),不需要 OCR,任何 PDF 阅读器都能直接复制文字;② 如果 PDF 是"扫描件 PDF"(每页是一张图),需要 OCR 引擎识别。识别完后,有些工具支持"覆盖文字层",输出的 PDF 既保留原扫描图,又能搜索 / 复制文字。
繁体中文 / 日文 / 韩文能识别吗?
主流 OCR 都支持。繁体中文模型和简体几乎是同一个(共享 80% 字符),识别率相当。日文 / 韩文是独立模型,识别前需要选对"识别语言",选错的话会用简体模型解析日文,出来一堆"乱码"。多语种混排的图(比如中英混排)要选支持多语种同时识别的引擎。
识别后的文字怎么保留原排版?
保留排版需要 OCR 工具支持"按段落输出"和"保留换行"。原图是 3 栏排版,工具按段落输出可以还原 3 栏;原图是诗歌,工具保留换行可以还原每行结构。如果工具只输出"纯文本流",所有段落和换行都会被压成单行,需要后续手动重排。这是评估 OCR 工具质量的重要标准之一。

看完即用

图片识字 OCR

提取图片中的文字,支持中英混合识别

立即免费使用
作者
米格速压

米格速压编辑组,专注于办公文件处理场景的教程编写。每周二、五更新。