给扫描 PDF 补上可搜索文字层:OCRmyPDF 多语言 OCR 配置(3 条命令快速上手)
【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF
OCRmyPDF 基于 Tesseract 给扫描版 PDF 添加可搜索文字层,但默认只识别英语,中文、日文、韩文要先装语言包。财务丢来一批扫描发票,Ctrl+F 搜"合计"没反应——就是缺文字层。下面 3 条命令跑通 OCRmyPDF 多语言 OCR,之后按症状调参。
🚀 先跑通:从装语言包到第一次识别
查 Tesseract 版本与语言包
先在终端确认两件事:Tesseract 版本、已装哪些语言。
tesseract --version tesseract --list-langsOCRmyPDF 要求 Tesseract ≥ 4.1.1,且明确不支持 5.4.0(该版本有回归问题,会直接拒绝运行)。--list-langs的输出就是已装语言包,全新安装通常只有eng和osd。语言包是.traineddata模型文件,除了英语,其他语言都得单独装。
按系统安装语言包
各平台装法不同,Debian/Ubuntu 一条 apt 命令就够,其余见表:
apt-cache search tesseract-ocr # 列出可安装的语言包 apt-get install tesseract-ocr-chi-sim # 装中文简体| 系统 | 安装中文简体的做法 |
|---|---|
| Debian/Ubuntu | apt-get install tesseract-ocr-chi-sim |
| Fedora/RHEL | dnf install tesseract-langpack-chi_sim |
| macOS | brew install tesseract --all-languages(一次性装全语言包) |
| Windows | 下载chi_sim.traineddata放进C:\Program Files\Tesseract-OCR\tessdata\ |
| Docker | 基于官方镜像扩展,见下方 |
Docker 用户写一个派生镜像就行:
FROM jbarlow83/ocrmypdf RUN apt-get update && apt-get install -y tesseract-ocr-chi-sim装完再跑一次tesseract --list-langs,列表里出现chi_sim就算到位。
跑第一条中文 OCR 命令,用 Ctrl+F 验证
对一张扫描发票执行中文识别:
ocrmypdf -l chi_sim invoice.pdf invoice_ocr.pdf打开输出文件,Ctrl+F 搜"合计",能高亮命中就成了。个别字识别偏差不用慌,属于正常水平,下一节讲怎么压下去。
语言代码怎么读:ISO 639-2 对照
Tesseract 用 ISO 639-2 Alpha-3 三字母代码标识语言,-l参数填的就是它。
| 语言 | 代码 | 说明 |
|---|---|---|
| 英语 | eng | 默认启用 |
| 中文简体 | chi_sim | 别写 zh 或 cn |
| 中文繁体 | chi_tra | 繁体文档用这个 |
| 日文(横排) | jpn | 常规讲义、手册 |
| 日文竖排 | jpn_vert | 竖排版面专用 |
| 韩文 | kor |
混排文档用+拼多个代码,如-l chi_sim+jpn+eng。不指定-l时默认英语;一旦指定了其他语言,记得把eng也带上,否则英文部分会漏。部分语言还有特殊变体包(jpn_vert就是一个),遇到旧字体或特殊版式时留意有没有对应包。
🔧 识别不准?按"症状 → 参数"调优
别一次全开参数,先对症状,再动一个。四个常用方向如下,tesseract_ocr.py 源码 里能找到每个参数的完整定义。
| 症状 | 参数 | 一行命令 |
|---|---|---|
| 分块错乱、段落被截 | --tesseract-pagesegmode 3(默认)/6/11 | ocrmypdf -l chi_sim --tesseract-pagesegmode 6 a.pdf b.pdf |
| 中文识别率低 | --tesseract-oem 1(LSTM 引擎) | ocrmypdf -l chi_sim --tesseract-oem 1 a.pdf b.pdf |
| 背景不均、有灰斑 | --tesseract-thresholding adaptive-otsu | ocrmypdf -l chi_sim --tesseract-thresholding adaptive-otsu a.pdf b.pdf |
| 整体对比度低、字发灰 | --tesseract-thresholding sauvola | ocrmypdf -l chi_sim --tesseract-thresholding sauvola a.pdf b.pdf |
| 大图卡住、超时无文字层 | --tesseract-downsample-large-images | ocrmypdf -l chi_sim --tesseract-downsample-large-images a.pdf b.pdf |
- 版面切分(PSM):3 是全自动,常规多段落文档直接用;6 假设整页是一个统一文本块,适合单栏扫描件;11 保留原文位置,适合插图多的讲义。
- 识别引擎(OEM):Tesseract 4+ 带 LSTM 神经网络引擎,1 为纯 LSTM,日常中文文档优先选它;0 是旧引擎,2 混合,3 自动。
- 阈值处理:仅 Tesseract 5.0+ 生效。默认 otsu(传统 Otsu 二值化)够用的就别动;背景深浅不均换 adaptive-otsu;整体对比度低用 sauvola(基于局部标准差)。
- 大图处理:Tesseract 单边上限 32767 像素。OCRmyPDF 默认会先下采样再送识别;特别大的页面若仍超时,显式加这个参数,并配合更大的
--tesseract-timeout。
踩坑排查:报错与修复
现象:报Language "zh" not found一类"语言不可用"。原因:语言代码写错,zh、cn都不是有效代码,Tesseract 只认 ISO 639-2 三字母码。修复:以语言列表为准,中文简体是chi_sim:
tesseract --list-langs现象:竖排日文整页乱序、字符错位。原因:拿横排包jpn处理竖排版面,PSM 也没匹配。修复:
ocrmypdf -l jpn_vert --tesseract-pagesegmode 5 lecture.pdf out.pdf现象:启动即报Tesseract 5.4.0 is not supported。原因:5.4.0 存在回归问题,OCRmyPDF 拒绝该版本。修复:升级到更新的 5.x(或换受支持的旧版),再用tesseract --version确认。
现象:超大扫描页长时间无输出,最终没有文字层。原因:图像单边超过 32767 像素,或识别耗时超出 timeout(默认 180 秒)。修复:
ocrmypdf -l chi_sim --tesseract-downsample-large-images --tesseract-timeout 600 a.pdf b.pdf进阶:用户词典与自定义模型
专有名词老被认错的,加一份用户词典:UTF-8 纯文本、每行一个词,用--user-words指过去。
echo "增值税专用发票" > words.txt ocrmypdf -l chi_sim --user-words words.txt a.pdf b.pdf极端情况(罕见语言、特殊字体)才考虑自训模型:jTessBoxEditor 框样本 →tesstrain.sh训练出.traineddata→ 放进 tessdata 目录 → 用-l customlang调用。四步走完,模型即插即用。
速查表:按场景抄作业
| 场景 | 直接复制的参数组合 |
|---|---|
| 常规中文文档 | -l chi_sim --tesseract-oem 1 |
| 中日混排讲义 | -l chi_sim+jpn+eng --tesseract-pagesegmode 3 |
| 竖排日文 | -l jpn_vert --tesseract-pagesegmode 5 |
| 韩文手册(含英文) | -l kor+eng --tesseract-oem 1 |
| 低质量扫描件(背景不均、图大) | --tesseract-thresholding adaptive-otsu --tesseract-downsample-large-images --tesseract-timeout 600 |
先照速查表跑,哪个症状没消再回来对参数调。更多语言包与平台细节见 docs/languages.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),仅供参考