OCRmyPDF 多语言 OCR 配置指南:让中文扫描 PDF 可搜索的完整路径
【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF
PDF 里明明写着合同金额,Ctrl+F 搜了半天一个结果都没有——扫描件本质是图片,没有文字层。OCRmyPDF 就是给这类 PDF 补上可搜索文字层的工具,配上 Tesseract 的多语言支持,中文照样能识别、能搜索。咱们先 5 分钟跑通中文识别,再按"症状"调参数。
5 分钟跑通:Linux + 中文简体
先说个概念:Tesseract 认语言靠的是三字母代码(ISO 639-2),中文简体是chi_sim,繁体是chi_tra,日文jpn,韩文kor。装语言包就是把对应代码的模型文件放进系统。
Ubuntu/Debian 上两条命令装好引擎和中文包,再用 pip 装上 OCRmyPDF:
sudo apt install tesseract-ocr tesseract-ocr-chi-sim pip install ocrmypdf装完花 10 秒确认两件事:版本和语言代码。
tesseract --version # 需要 4.1.1 以上 tesseract --list-langs # 输出里应该有 chi_sim⚠️ 如果你的版本是 5.4.0,先换掉:这个版本有回归问题,OCRmyPDF 会直接拒绝工作。
然后对一份中文扫描件开跑(下面这个文件换成你自己的):
ocrmypdf -l chi_sim 合同扫描件.pdf 合同_已识别.pdf用pdftotext验一下文字层真的写进去了:
pdftotext 合同_已识别.pdf - | grep 合同能搜到内容,恭喜,最短路径通了。像下面这种老式扫描页,就是它最典型的输入:
💡 文档里中英混排很正常,语言代码用+连起来就行:-l eng+chi_sim。不写-l时默认只认英语。
换台机器,语言包最省事的装法
语言包文件叫.traineddata,说白了就是 Tesseract 的"语言教材"。不同系统拿到它的办法不一样,给你各系统里最省事的方案。
Windows:手动放文件
Windows 的 Tesseract 安装包只带英语,得手动补:从 Tesseract 官方的 tessdata 仓库下载目标语言的.traineddata文件(中文简体就是chi_sim.traineddata),复制进 Tesseract 安装目录下的tessdata文件夹(常见路径C:\Program Files\Tesseract-OCR\tessdata\)。放完再跑一次tesseract --list-langs确认。
macOS:一条命令带全
Homebrew 装 Tesseract 时把所有语言包一起拉下来:
brew reinstall tesseract --all-languages装完所有代码都能用,不用一个个挑。
Docker:派生一个新镜像
官方镜像里同样只保证英语。写个 Dockerfile 在官方镜像基础上补语言包:
FROM jbarlow83/ocrmypdf RUN apt-get update && apt-get install -y tesseract-ocr-chi-simdocker build -t ocrmypdf-zh .之后,新镜像里中文就可用了。更多细节看 docs/docker.md。
识别乱码或不准?按症状下药
先别急着翻参数大全,先看你的问题长得像下面哪种。
症状一:字丢了、位置乱了
多半是自动版面分析没扛住排版。--tesseract-pagesegmode用来告诉 Tesseract"这一页长什么样":单栏干净扫描件给6(跳过版面猜测,直接按整块读),图文混排给11(稀疏文本,保留原文位置)。比如下面这种地图页,文字零散分布在图之间:
ocrmypdf -l chi_sim --tesseract-pagesegmode 11 图纸.pdf 图纸_已识别.pdf症状二:底灰、亮度不均、错字多
Tesseract 5.0+ 支持调二值化算法(把灰图变黑白图的过程),对应--tesseract-thresholding。默认的全局 otsu 遇到光照不均就会翻车,这种旧扫描件就是典型:
- 背景颜色变化大 →
--tesseract-thresholding adaptive-otsu - 对比度低、字迹发虚 →
--tesseract-thresholding sauvola
症状三:整页报"图像太大"或识别超时
Tesseract 有单边上界(32767 像素),超大幅扫描图会直接失败。加--tesseract-downsample-large-images让 OCRmyPDF 先缩小再识别,图特别大的话顺手把--tesseract-timeout调高一点,给它留够时间。
症状四:整体精度上不去
默认引擎模式(--tesseract-oem 3,自动选择)大多数情况够用;如果换了语言包后效果还是平平,可以强制走 LSTM 神经网络引擎试试:--tesseract-oem 1。另外,阿拉伯文这类复杂排版如果字序错乱,用--pdf-renderer sandwich强制走 Tesseract 内置渲染器,能解决大部分回排问题。
一次处理一堆文件
手点命令太累,批量就靠 for 循环。假设一批中文发票要统一加文字层并输出成 PDF/A:
mkdir -p 已完成 for f in 发票_*.pdf; do ocrmypdf -l chi_sim --output-type pdfa "$f" "已完成/$f" done再进阶一点:专业文档里总有反复出现、标准语言包不认识的术语,--user-words可以喂一个词典(UTF-8 纯文本,每行一个词):
# 医学术语,每行一个 echo "心肌梗死" > 术语.txt ocrmypdf -l chi_sim --user-words 术语.txt 病历.pdf 病历_已识别.pdf还有种特殊情况:日文竖排文档。要装竖排专用语言包jpn_vert,同时把分段模式设成5(单竖列):
ocrmypdf -l jpn_vert --tesseract-pagesegmode 5 竖排文档.pdf 竖排_已识别.pdf排坑清单
每条都是"症状 → 原因 → 一条命令验证",直接照抄。
- 报"语言不可用"→ 代码写错了,中文简体是
chi_sim,不是zh也不是cn。 验证:tesseract --list-langs,看输出里到底有哪些代码。 - 程序启动就报错,提到 5.4.0→ 该版本有回归,被明确不支持。 验证:
tesseract --version,不达标就升级或换回 5.x 其他版本。 - 识别出来全是乱码英文→ 忘了
-l,默认只认英语。 验证:pdftotext 输出.pdf - | head,肉眼确认文字层是不是你期望的语言。 - 个别页没有文字层→ 大概率是图像超限,Tesseract 单页失败了。 验证:重跑一次加上
--tesseract-downsample-large-images,再对同一页执行第 3 条的pdftotext命令对比。
参数速查表
拿不准就按这一行抄,"为什么"列说明了每组合对应的场景:
| 文档情况 | 推荐参数组合 | 为什么 |
|---|---|---|
| 常规中文文档 | -l chi_sim | 默认引擎和阈值就够用 |
| 中英混排 | -l eng+chi_sim | 一份文档里两种语言都要认 |
| 单栏干净扫描件 | -l chi_sim --tesseract-pagesegmode 6 | 跳过版面猜测,更稳更快 |
| 图文混排页面 | --tesseract-pagesegmode 11 | 稀疏文本,保留原文位置 |
| 光照不均的扫描 | --tesseract-thresholding adaptive-otsu | 局部阈值适应背景变化 |
| 低对比度、字迹发虚 | --tesseract-thresholding sauvola | 按局部标准差做二值化 |
| 超大幅图像 | --tesseract-downsample-large-images | 绕开 32767 像素上限 |
| 日文竖排 | -l jpn_vert --tesseract-pagesegmode 5 | 竖排语言包 + 单竖列模式 |
| 精度始终上不去 | --tesseract-oem 1 | 强制 LSTM 神经网络引擎 |
动手清单
- 装语言包,跑
tesseract --list-langs确认代码在列。 ocrmypdf -l chi_sim 输入.pdf 输出.pdf,再用pdftotext验证能搜到字。- 还不准才动参数——对照上面速查表挑一行,一次只改一个。
想深入的话,看 官方多语言文档 docs/languages.md,各平台语言包安装方式都有;用 Docker 的话再看 docs/docker.md。
【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考