使用PDF-Craft,在运行时动态注入DeepSeek OCR量化模型,使部署显存占用降低能够在中低端消费级硬件上运行。
Ubuntu/Debian:
sudo apt-get install poppler-utilsmacOS:
brew install popplerWindows:
- 从 poppler releases 下载
- 解压到任意目录(如
C:\poppler) - 将
bin目录添加到系统 PATH 环境变量
推荐使用 uv 管理依赖:
# 安装 uv (如果尚未安装)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 同步依赖
cd dsocr-quant-demo
uv sync或使用 pip:
pip install pdf-craft torch torchvision bitsandbytes accelerate transformers- NVIDIA GPU (CUDA 支持)
- 至少 4GB 显存
- 推荐 8GB+ 显存以获得更好性能
安装后可直接使用 pdf-craftq 命令:
# 激活虚拟环境
source .venv/bin/activate
# PDF 转 Markdown
pdf-craftq input.pdf -o output.md
# PDF 转 EPUB
pdf-craftq input.pdf -o output.epub
# 指定 OCR 模型大小 (tiny/small/base/large/gundam)
pdf-craftq input.pdf -o output.md --ocr-size base
# 详细输出
pdf-craftq input.pdf -o output.md -v更多选项:
pdf-craftq --help# 重要:必须在导入 pdf_craft 之前应用 patch
from quantized_model import apply_quantized_model_patch
apply_quantized_model_patch()
# 然后正常使用 pdf_craft
from pdf_craft import transform_markdown, transform_epub
# 转换为 Markdown
result = transform_markdown(
pdf_path="input.pdf",
markdown_path="output.md",
markdown_assets_path="images", # 图片保存目录
ocr_size="base",
)
print(f"输入 tokens: {result.input_tokens}")
print(f"输出 tokens: {result.output_tokens}")
# 转换为 EPUB
result = transform_epub(
pdf_path="input.pdf",
epub_path="output.epub",
ocr_size="base",
)source .venv/bin/activate
python test_quantized_model.py测试脚本会依次执行:
- 环境检查 (CUDA、依赖版本)
- 模型下载 (自动从 HuggingFace 下载量化模型)
- 模型加载 (验证 4-bit 加载,显示显存占用)
- PDF 转换 (可选,需要
test.pdf)
通过 monkey-patch 方式动态替换 doc_page_extractor 中的原始模型类,使其加载预量化的 4-bit 模型 (Jalea96/DeepSeek-OCR-bnb-4bit-NF4) 而非官方原始模型。
dsocr-quant-demo/
├── cli.py # 命令行工具入口
├── quantized_model.py # 量化模型实现和 monkey-patch
├── test_quantized_model.py # 测试脚本
├── pyproject.toml # 项目配置和依赖
└── README.md
| 选项 | 图像尺寸 | 适用场景 |
|---|---|---|
| tiny | 512x512 | 快速预览,低显存 |
| small | 640x640 | 一般文档 |
| base | 1024x1024 | 推荐,平衡质量和速度 |
| large | 1280x1280 | 高质量需求 |
| gundam | 1024x640 | 特殊裁剪模式 |
确保已安装 NVIDIA 驱动和 CUDA toolkit,并且 PyTorch 是 CUDA 版本:
python -c "import torch; print(torch.cuda.is_available())"尝试使用更小的 OCR 模型:
pdf-craftq input.pdf -o output.md --ocr-size tiny确保 pdftoppm 命令可用:
pdftoppm -v