OCR-Pro v2.1: 高精度中英文OCR技能
v2.1 更新内容 (2026-06-12)
- 新增 TrOCR 引擎:微软 Transformer OCR,手写体 SOTA(IAM 数据集 CER 2.89)
- 新增公式识别引擎:基于 Pix2Text 的数学公式 → LaTeX 转换
- 手写体识别大幅提升:TrOCR 取代 EasyOCR 成为手写体首选引擎
- 引擎选择策略更新:手写体场景优先使用 TrOCR
概述
本技能采用 三层架构 + 引擎专项优化 极大提升OCR准确度:
| 层级 | 方法 | 准确度提升 | 成本 |
|---|---|---|---|
| L1 图像预处理 | 通用/英文/手写体三种模式 | +10-30% | 零 |
| L2 多引擎OCR | 7大引擎智能选择 | +15-35% | 免费 |
| L3 LLM纠错 | 视觉模型对照原图修正 | +20-40% | API调用 |
最终准确度:印刷体中文95%+,印刷体英文97%+,手写体英文92%+(v2.1 TrOCR提升),手写体中文85%+
前置条件
必须
- Python 3.10+ (venv隔离环境)
- 网络连接(首次使用时自动下载模型)
OCR引擎(越多准确度越高)
| 引擎 | 安装方式 | 适用场景 | 模型大小 |
|---|---|---|---|
| RapidOCR(PP-OCRv3) | pip install rapidocr-onnxruntime |
中英文通用,最快 | ~10MB |
| EasyOCR | pip install easyocr |
80+语言,手写体辅助 | ~130MB |
| TrOCR [v2.1] | pip install torch transformers |
英文手写体SOTA | ~1.5GB |
| Pix2Text [v2.1] | pip install pix2text |
数学公式→LaTeX | ~50MB |
| PP-OCRv4 ONNX | 已集成 | 中英文通用(v4改进) | ~17MB |
| PP-OCRv5 ONNX | 已集成 | 中英日+手写体专项优化 | ~21MB |
| en_PP-OCRv3 ONNX | 已集成 | 英文印刷体专项 | ~9MB |
> 引擎的 Python 包通过 pip 安装,模型文件在首次调用对应引擎时自动从 HuggingFace 镜像 (hf-mirror.com) 下载。
辅助库
- PyMuPDF (
pip install PyMuPDF) - PDF处理 - OpenCV (
pip install opencv-python-headless) - 图像预处理 - Pillow (
pip install Pillow) - 图像预处理
Python环境路径
# 推荐使用 fusion-ocr venv(已包含完整依赖,避免 PyTorch/ONNX 冲突)
VENV_PATH: C:\Users\Administrator\.workbuddy\binaries\python\envs\fusion-ocr
PYTHON: C:\Users\Administrator\.workbuddy\binaries\python\envs\fusion-ocr\Scripts\python.exe
SCRIPTS_DIR: C:\Users\Administrator\.workbuddy\skills\ocr-pro\scripts
首次使用安装依赖
# 创建venv(如不存在)
C:\Users\Administrator\.workbuddy\binaries\python\versions\3.13.12\python.exe -m venv C:\Users\Administrator\.workbuddy\binaries\python\envs\fusion-ocr
# 核心依赖
C:\Users\Administrator\.workbuddy\binaries\python\envs\fusion-ocr\Scripts\pip.exe install rapidocr-onnxruntime PyMuPDF opencv-python-headless Pillow numpy
# 深度学习引擎(先装 PyTorch CPU)
C:\Users\Administrator\.workbuddy\binaries\python\envs\fusion-ocr\Scripts\pip.exe install torch --index-url https://download.pytorch.org/whl/cpu
C:\Users\Administrator\.workbuddy\binaries\python\envs\fusion-ocr\Scripts\pip.exe install transformers==5.11.0
# EasyOCR (多语言)
C:\Users\Administrator\.workbuddy\binaries\python\envs\fusion-ocr\Scripts\pip.exe install easyocr
# 公式识别引擎 [可选]
C:\Users\Administrator\.workbuddy\binaries\python\envs\fusion-ocr\Scripts\pip.exe install pix2text
> ⚠️ Windows 注意事项:如果 import torch 出现 Segmentation Fault,请使用独立的 venv(不要与 onnxruntime 混装),或使用 fusion-ocr venv。
执行流程
流程总览
输入(PDF/图片)
↓
[检测类型] → PDF? → [提取嵌入文字] → 有文字? → 直接输出
↓ ↓
↓ 无文字? → [PDF转图片]
↓ ↓
图片? ────────────→ [图像预处理] ← 根据场景选择模式
↓ ├─ standard (通用)
↓ ├─ english (英文印刷)
↓ └─ handwriting (手写体)
[多引擎OCR] ← 智能选择引擎
├─ RapidOCR (中英通用,最快)
├─ RapidOCR-EN (英文印刷体优化)
├─ PP-OCRv5 (中英日+手写体)
├─ EasyOCR (80+语言辅助)
├─ TrOCR [v2.1] (手写体SOTA)
├─ Pix2Text [v2.1] (数学公式LaTeX)
└─ 腾讯OCR (MCP,表格强)
↓
[合并结果] ← 置信度加权
↓
[LLM纠错] ← 对照原图 + 专项prompt
↓
输出(文字/JSON/LaTeX)
Step 1: 输入检测与PDF处理
如果输入是PDF文件:
- 先用
pdf_to_images.py --info检测PDF信息 - 如果有嵌入文字(digital PDF):
- 用pdf_to_images.py --text提取嵌入文字
- 直接输出,不需要OCR - 如果是扫描件(scanned PDF):
- 用pdf_to_images.py转为300DPI图片
- 继续Step 2
# 检测PDF信息
{{PYTHON}} {{SCRIPTS_DIR}}/pdf_to_images.py --input "<pdf_path>" --info
# 提取嵌入文字(digital PDF)
{{PYTHON}} {{SCRIPTS_DIR}}/pdf_to_images.py --input "<pdf_path>" --text
# 转为图片(scanned PDF)
{{PYTHON}} {{SCRIPTS_DIR}}/pdf_to_images.py --input "<pdf_path>" --output "<output_dir>" --dpi 300
Step 2: 图像预处理
根据场景选择预处理模式:
# 通用预处理(中英混合)
{{PYTHON}} {{SCRIPTS_DIR}}/preprocess.py --input "<image_path>" --output "<output_dir>" --dpi 300
# 英文印刷体专项预处理(更强锐化+字间距保留)
{{PYTHON}} {{SCRIPTS_DIR}}/preprocess.py --input "<image_path>" --output "<output_dir>" --dpi 300 --mode english
# 手写体专项预处理(断笔修复+淡墨增强)
{{PYTHON}} {{SCRIPTS_DIR}}/preprocess.py --input "<image_path>" --output "<output_dir>" --dpi 300 --mode handwriting
# 加二值化(极低质量文档)
{{PYTHON}} {{SCRIPTS_DIR}}/preprocess.py --input "<image_path>" --output "<output_dir>" --dpi 300 --binarize
预处理模式对比:
| 模式 | 去噪 | 对比度 | 锐化 | 特殊处理 |
|---|---|---|---|---|
| standard | 自适应 | CLAHE 2.0 | 轻度(0.3) | — |
| english | 自适应 | CLAHE 2.5 | 强力(0.5) | 英文字体边缘强化 |
| handwriting | 轻柔 | CLAHE 3.0 | 轻度(0.3) | 形态学断笔修复+淡墨增强 |
Step 3: 多引擎OCR
查看可用引擎
{{PYTHON}} {{SCRIPTS_DIR}}/ocr_pipeline.py --list-engines
引擎A: RapidOCR (默认,中英通用)
{{PYTHON}} {{SCRIPTS_DIR}}/ocr_pipeline.py --input "<image_path>" --engine rapidocr --detail
引擎B: EasyOCR (80+语言辅助)
# 英文模式
{{PYTHON}} {{SCRIPTS_DIR}}/ocr_pipeline.py --input "<image_path>" --engine easyocr --lang en --detail
# 中英双语模式
{{PYTHON}} {{SCRIPTS_DIR}}/ocr_pipeline.py --input "<image_path>" --engine easyocr --lang en,ch_sim --detail
引擎C: TrOCR [v2.1 新增] (手写体SOTA)
# 手写体识别(推荐!IAM CER 2.89)
{{PYTHON}} {{SCRIPTS_DIR}}/ocr_pipeline.py --input "<image_path>" --engine trocr --detail
# 印刷体识别
{{PYTHON}} {{SCRIPTS_DIR}}/ocr_pipeline.py --input "<image_path>" --engine trocr --detail
# 也可直接调用 trocr_engine.py
{{PYTHON}} {{SCRIPTS_DIR}}/trocr_engine.py --input "<image_path>" --mode handwritten --json
{{PYTHON}} {{SCRIPTS_DIR}}/trocr_engine.py --input "<image_path>" --mode printed --json
{{PYTHON}} {{SCRIPTS_DIR}}/trocr_engine.py --input "<image_path>" --mode both --detail
TrOCR 模型说明:
- microsoft/trocr-base-handwritten: 手写体专用,IAM 数据集 CER 2.89(SOTA)
- microsoft/trocr-base-printed: 印刷体专用,SROIE 数据集 F1 96.60
- ViT 编码器 + GPT-2 风格解码器,端到端识别
- 首次运行自动下载模型(~1.5GB),后续秒级加载
引擎D: Pix2Text 公式识别 [v2.1 新增]
# 纯公式图片识别
{{PYTHON}} {{SCRIPTS_DIR}}/ocr_pipeline.py --input "<image_path>" --engine formula --detail
# 含公式的文档识别
{{PYTHON}} {{SCRIPTS_DIR}}/ocr_pipeline.py --input "<image_path>" --engine formula --detail
# 也可直接调用 formula_engine.py
{{PYTHON}} {{SCRIPTS_DIR}}/formula_engine.py --input "<image_path>" --mode formula --json
{{PYTHON}} {{SCRIPTS_DIR}}/formula_engine.py --input "<image_path>" --mode document --detail
公式识别说明:
- 基于 Pix2Text (P2T),CPU 友好,ONNX Runtime 推理
- 纯公式图片:直接返回 LaTeX 代码(如 $$E=mc^2$$)
- 文档混合:自动检测公式区域并区分文字/公式
- 首次运行自动下载模型(~50MB)
引擎E: PP-OCRv5 (中英日+手写体)
{{PYTHON}} {{SCRIPTS_DIR}}/ocr_pipeline.py --input "<image_path>" --engine rapidocr_v5 --detail
智能引擎选择(推荐)
# 英文印刷体场景 → 自动选英文专用引擎
{{PYTHON}} {{SCRIPTS_DIR}}/ocr_pipeline.py --input "<image_path>" --engine english --detail
# 手写体场景 → 自动选 TrOCR + EasyOCR + V5(v2.1优化)
{{PYTHON}} {{SCRIPTS_DIR}}/ocr_pipeline.py --input "<image_path>" --engine handwriting --detail
# 中英混合场景 → 自动选V5+RapidOCR
{{PYTHON}} {{SCRIPTS_DIR}}/ocr_pipeline.py --input "<image_path>" --engine mixed --detail
# 全引擎运行(最高准确度)
{{PYTHON}} {{SCRIPTS_DIR}}/ocr_pipeline.py --input "<image_path>" --engine all --detail
引擎F: 腾讯OCR (MCP)
调用 mcp__tencent-docs__ocr.extract 工具识别图片中的文字
参数: image_url 或 image_path
引擎G: Vision LLM直识
对于手写体或低质量图片,直接用视觉语言模型识别效果最好:
- 读取图片文件(使用Read工具读取图片,视觉模型直接识别)
Step 4: LLM纠错(核心提升步骤)
这是准确度提升最大的步骤!
自动生成纠错Prompt
# 中文印刷体
{{PYTHON}} {{SCRIPTS_DIR}}/format_correction.py --ocr-result "<json>" --image "<img>" --mode standard
# 中文手写体
{{PYTHON}} {{SCRIPTS_DIR}}/format_correction.py --ocr-result "<json>" --image "<img>" --mode handwriting
# 英文印刷体
{{PYTHON}} {{SCRIPTS_DIR}}/format_correction.py --ocr-result "<json>" --image "<img>" --mode english
# 英文手写体
{{PYTHON}} {{SCRIPTS_DIR}}/format_correction.py --ocr-result "<json>" --image "<img>" --mode english_handwriting
# 表格
{{PYTHON}} {{SCRIPTS_DIR}}/format_correction.py --ocr-result "<json>" --image "<img>" --mode table
# 输出到文件
{{PYTHON}} {{SCRIPTS_DIR}}/format_correction.py --ocr-result "<json>" --image "<img>" --mode english --output "<txt>"
手动纠错流程
- 用
Read工具读取原始图片(视觉模型可看到图片内容) - 将OCR原始文本粘贴到对话中
- 使用纠错prompt模板,让模型对照图片修正
Step 5: 输出
根据用户需求输出:
- 纯文本 (.txt)
- JSON格式 (.json) - 含每个文字块的位置和置信度
- Markdown格式 (.md) - 保留标题和段落结构
- LaTeX格式 - 公式识别专属输出
- 直接在对话中输出
使用场景示例
场景1: 英文手写作业 (v2.1 优化)
用户: 识别学生英语手写作业
→ Step 2: 预处理 --mode handwriting
→ Step 3: --engine handwriting(TrOCR主力 + EasyOCR辅助 + V5兜底)
→ Step 4: --mode english_handwriting 纠错
→ Step 5: 输出
场景2: 数学公式图片 (v2.1 新增)
用户: 识别这个数学公式
→ Step 2: 预处理 standard
→ Step 3: --engine formula
→ 输出: LaTeX代码 $$E = mc^2$$
→ 无需 Step 4 纠错(公式识别直接输出 LaTeX)
场景3: 含公式的论文扫描件 (v2.1 新增)
用户: 识别这篇数学论文
→ Step 1: PDF转图片
→ Step 2: 预处理 standard
→ Step 3: --engine formula(文档模式,自动区分文字/公式)
→ Step 4: LLM纠错文字部分
→ Step 5: Markdown + LaTeX 混合输出
场景4: 英文教材扫描件
用户: 识别这个英文PDF
→ Step 1: 检测PDF → 扫描件
→ Step 2: 预处理 --mode english
→ Step 3: --engine english(自动选英文专用模型)
→ Step 4: --mode english 纠错
→ Step 5: 输出
场景5: 中文扫描版PDF
用户: 帮我识别这个PDF里的文字
→ Step 1: 检测PDF → 扫描件
→ Step 2: 预处理 standard
→ Step 3: --engine rapidocr
→ Step 4: --mode standard 纠错
→ Step 5: 输出
场景6: 极致准确度模式
用户: 必须100%准确
→ Step 2: 预处理(standard + binarize两版)
→ Step 3: --engine all(全部引擎)
→ Step 4: LLM纠错(参考多引擎结果+原图)
→ Step 5: 输出
引擎选择策略 (v2.1 更新)
| 场景 | 推荐引擎 | 预处理模式 | 纠错模式 | 原因 |
|---|---|---|---|---|
| 英文手写作业 | trOCR | handwriting | english_handwriting | TrOCR手写SOTA,IAM CER 2.89 |
| 数学公式 | formula | standard | — | Pix2Text直接输出LaTeX |
| 含公式文档 | formula | standard | standard | 自动区分文字/公式 |
| 英文印刷PDF | english | english | english | 英文专用模型+强锐化 |
| 中文印刷PDF | PyMuPDF提取 | — | — | 数字PDF无需OCR |
| 扫描版中文 | rapidocr | standard | standard | 本地免费+纠错 |
| 中英混合 | mixed | standard | standard | V5+RapidOCR |
| 低质量扫描件 | all | standard+binarize | standard | 多引擎+预处理 |
| 表格 | 腾讯OCR | standard | table | 表格结构保持好 |
准确度优化技巧
- 手写体用 TrOCR(v2.1新增) — 微软 TrOCR 在 IAM 手写数据集 CER 仅 2.89,远超 EasyOCR
- 数学公式用 Pix2Text(v2.1新增) — 专为公式设计的 ONNX 推理引擎,CPU 可用
- 英文印刷体用 --mode english — 英文专用模型+更强锐化,准确度+10%
- 手写体用 --mode handwriting — 断笔修复+淡墨增强,配合 TrOCR 效果最佳
- 多引擎交叉验证 — 两引擎都识别对的字,准确度极高
- LLM纠错是最大提升因素 — 尤其是英文易混淆字符(rn/m、cl/d、0/O)
- 英文纠错专用prompt — 针对 TrOCR 输出特点优化
文件结构
~/.workbuddy/skills/ocr-pro/ # Skill 包
├── SKILL.md # 技能定义和指令 (v2.1)
├── scripts/
│ ├── preprocess.py # 图像预处理(3种模式)
│ ├── pdf_to_images.py # PDF处理
│ ├── ocr_pipeline.py # OCR流水线(7引擎+智能选择+合并)
│ ├── trocr_engine.py # TrOCR手写/印刷体引擎 [v2.1新增]
│ ├── formula_engine.py # Pix2Text公式识别引擎 [v2.1新增]
│ ├── format_correction.py # LLM纠错prompt生成器
│ └── model_downloader.py # 模型自动下载(首次运行触发)
└── references/
└── engine_comparison.md # 引擎对比参考
~/.cache/workbuddy/ocr-pro/models/ # 模型缓存
├── PP-OCRv3/ # en_PP-OCRv3_rec (~9MB)
├── PP-OCRv4/ # v4 det+rec (~17MB)
└── PP-OCRv5/ # v5 det+rec+dict (~21MB)
~/.cache/huggingface/hub/ # HuggingFace 模型缓存
└── models--microsoft--trocr-*/ # TrOCR 模型 (~1.5GB)
变量替换说明
在使用本技能的bash命令时,以下变量需替换为实际路径:
- {{PYTHON}} → C:\Users\Administrator\.workbuddy\binaries\python\envs\fusion-ocr\Scripts\python.exe
- {{SCRIPTS_DIR}} → C:\Users\Administrator\.workbuddy\skills\ocr-pro\scripts
完整端到端命令示例
# === 英文手写体 (v2.1 推荐) ===
# 1. 手写体预处理
{{PYTHON}} {{SCRIPTS_DIR}}/preprocess.py --input "input.png" --output "preprocessed/" --dpi 300 --mode handwriting
# 2. TrOCR手写体识别
{{PYTHON}} {{SCRIPTS_DIR}}/ocr_pipeline.py --input "preprocessed/input_preprocessed.png" --engine trocr --detail
# 3. 英文手写体纠错
{{PYTHON}} {{SCRIPTS_DIR}}/format_correction.py --ocr-result "ocr_output.json" --image "input.png" --mode english_handwriting
# === 数学公式 (v2.1 新增) ===
# 1. 标准预处理
{{PYTHON}} {{SCRIPTS_DIR}}/preprocess.py --input "formula.png" --output "preprocessed/" --dpi 300
# 2. 公式识别
{{PYTHON}} {{SCRIPTS_DIR}}/ocr_pipeline.py --input "preprocessed/formula_preprocessed.png" --engine formula --detail
# 输出:LaTeX 代码,无需纠错
# === 英文印刷体 ===
# 1. 英文专项预处理
{{PYTHON}} {{SCRIPTS_DIR}}/preprocess.py --input "input.png" --output "preprocessed/" --dpi 300 --mode english
# 2. 英文引擎识别
{{PYTHON}} {{SCRIPTS_DIR}}/ocr_pipeline.py --input "preprocessed/input_preprocessed.png" --engine english --detail
# 3. 英文纠错
{{PYTHON}} {{SCRIPTS_DIR}}/format_correction.py --ocr-result "ocr_output.json" --image "input.png" --mode english
# === 通用(中文/混合)===
# 1. 标准预处理
{{PYTHON}} {{SCRIPTS_DIR}}/preprocess.py --input "input.png" --output "preprocessed/" --dpi 300
# 2. 标准引擎识别
{{PYTHON}} {{SCRIPTS_DIR}}/ocr_pipeline.py --input "preprocessed/input_preprocessed.png" --engine rapidocr --detail
# 3. 标准纠错
{{PYTHON}} {{SCRIPTS_DIR}}/format_correction.py --ocr-result "ocr_output.json" --image "input.png" --mode standard