OCR 处理扫描件
Tesseract 是常用的开源 OCR 引擎,配合语言包可识别中英文扫描件。处理 PDF 的常规做法是先把页面渲染成高分辨率图片,再逐张识别,输出带坐标的文本块。识别质量主要由图像质量决定,去噪、纠偏、二值化这些预处理步骤往往比换引擎更能提升准确率。
基本信息
| 引擎 | tesseract-ocr,需另装语言包 |
|---|---|
| 中文包 | tesseract-ocr-chi-sim(简体) |
| 转换工具 | poppler-utils 提供 pdftoppm 把 PDF 转图片 |
| Python 封装 | pytesseract,需指向已安装的引擎 |
| 推荐分辨率 | 300dpi 起步,过低会明显拉高错字率 |
安装与命令行识别
安装与命令行识别
# Debian/Ubuntu 示例:引擎 + 中文简体语言包
apt-get install -y tesseract-ocr tesseract-ocr-chi-sim
# PDF 先转图片(poppler-utils 提供 pdftoppm)
pdftoppm -r 300 -png input.pdf page
tesseract page-1.png stdout -l chi_sim+engPython 调用
Python 调用
from PIL import Image
import pytesseract
text = pytesseract.image_to_string(Image.open("scan.png"), lang="chi_sim+eng")
print(text[:200])提升识别率的做法
- 先做图像预处理:灰度化、二值化、去噪、纠偏,再送识别
- 按版面裁切:把多栏页面切成单栏再逐栏识别,避免阅读顺序错乱
- 保留坐标:用带坐标的输出模式定位文本块,便于按位置重排
- 分级处理:清晰页面直接识别,模糊与倾斜页面单独走一遍增强流程
- 抽样核对:每批任务人工核对若干页,统计错字率再决定是否调参
常见问题与对策
| 现象 | 原因 | 对策 |
|---|---|---|
| 中文识别成乱码 | 未安装中文语言包 | 安装 chi_sim 并在参数中指定 |
| 整段文字顺序错乱 | 多栏版面未切分 | 按栏切图后逐栏识别 |
| 错字率高 | 图像分辨率或对比度不足 | 提高到 300dpi 以上并做预处理 |
| 数字识别不稳定 | 字体或表格线干扰 | 限定字符集或裁掉表格线 |
识别质量与图像质量强相关:先做去噪、纠偏、二值化,再按 300dpi 以上转图,通常比直接识别低清截图效果好得多。
批量任务的工程做法
- 转图与识别分离成两步,便于单独重跑失败页而不是整份文档重来
- 任务记录每页状态与耗时,失败页清单直接导出给人工复核
- 识别结果与图片路径一起保存,抽查时能对照原图判断错在哪
- 对识别置信度低的文本块做标记,入库时可降低权重或转人工
- 定期统计错字样本并按文档来源归类,识别质量的短板往往集中在少数扫描源