Appearance
MarkItDown的OCR不是传统Tesseract,是把图片提取出来送给Vision LLM做"看图识字"。GPT-4o能到95%+,小模型可能只有60%。这5步优化让OCR精度从60%升到95%。
Step 1:先把OCR开启
MarkItDown默认不启用OCR,需要手动开启:
bash
pip install 'markitdown[all]' markitdown-ocr
pip install openai # 或 anthropic / google-generativeaipython
from markitdown import MarkItDown
from openai import OpenAI
md = MarkItDown(
enable_plugins=True, # 关键:启用 OCR 插件
llm_client=OpenAI(),
llm_model="gpt-4o" # 精度优先选 gpt-4o 或 claude-3-5-sonnet
)
result = md.convert("scan.pdf")
print(result.text_content)CLI模式:
bash
markitdown document.pdf --use-plugins --llm-client openai --llm-model gpt-4o -o output.mdStep 2:选对模型
| 推荐模型 | 适用场景 |
|---|---|
| gpt-4o / claude-3-5-sonnet | 复杂表格、公式、高精度需求 |
| gemini-2.0-flash-exp | 速度快,精度尚可 |
| claude-opus-4 | 最高精度,响应较慢 |
| 4o-mini / LLaVA + Ollama | 简单文本,可本地运行 |
Step 3:自定义OCR Prompt
默认Prompt偏通用,对于特定场景明确要求效果更好:
python
# 公式文档
"Extract all text accurately, convert formulas to LaTeX, output clean Markdown"
# 表格文档
"Convert tables to proper Markdown grid tables, preserve all data"
# 图文混排
"Extract text in reading order, describe images briefly, output structured Markdown"Step 4:图像预处理(低质量扫描件杀手)
在送进MarkItDown之前,先用OpenCV预处理:
python
import cv2
import numpy as np
def preprocess_for_ocr(img_path):
img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC) # 放大两倍
_, img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) # 二值化
img = cv2.medianBlur(img, 3) # 去噪
cv2.imwrite("preprocessed.jpg", img)
return "preprocessed.jpg"这招对扫描件、倾斜照片、低分辨率图片效果尤其明显。
Step 5:LLM后处理
MarkItDown跑完后,再喂给LLM做一次cleanup:
"Fix any OCR errors in this text, standardize formatting, output clean Markdown only"精度预期
| 文档类型 | OCR精度 |
|---|---|
| 清晰打印文本 + 强模型 | 95%+ |
| 复杂表格 / 轻微倾斜 | 80-90% |
| 公式 / 手写 / 低分辨率 | 60-75% |
公式和手写仍是难题,可搭配MathPix或Nougat后处理。
精度还是不够?替代方案
| 工具 | 优势 |
|---|---|
| Docling(IBM) | 结构化更好,表格和公式处理更强 |
| Marker / MinerU | GPU加速,适合批量处理 |
| Azure Document Intelligence | 付费服务,精度高,可与MarkItDown组合 |
| LlamaParse | 付费但精度极佳 |
最佳实践:先用MarkItDown + GPT-4o,不够再用Docling兜底。
📦 GitHub:github.com/microsoft/markitdown
