📌 项目地址:deepseek-ai/DeepSeek-OCR | ⭐ 23,196 颗星 | 🔧 Python | 📜 MIT
项目在做什么
DeepSeek-OCR 是一个视觉-文本压缩模型,输入图像,输出文字。它不依赖传统 OCR 的字符位置识别,而是把整页图像压缩成 LLM 内部的上下文表示,再解码成自然语言。官方把这套方法称为“光学压缩”(Optical Compression)。
模型接受的 prompt 是 nFree OCR.(换行 + 英文句点)。代码里写成 "nFree OCR."。
项目 2025/10/20 发布初代,2025/10/23 被 vLLM 上游官方支持,2026/01/27 已经出了 DeepSeek-OCR2。迭代很快。
安装:两条路
环境要求 CUDA 11.8 + torch 2.6.0。两种安装方式,选一种就行。
手动装 vLLM 0.8.5 whl
git clone https://github.com/deepseek-ai/DeepSeek-OCR.git
conda create -n deepseek-ocr python=3.12.9 -y
conda activate deepseek-ocr
pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 --index-url https://download.pytorch.org/whl/cu118
# 先下载 vllm-0.8.5+cu118-cp38-abi3-manylinux1_x86_64.whl
pip install vllm-0.8.5+cu118-cp38-abi3-manylinux1_x86_64.whl
pip install -r requirements.txt
pip install flash-attn==2.7.3 --no-build-isolation
注意:如果同一环境还要用 transformers,需要版本 >=4.51.1,但仅跑 vLLM 脚本时这个报错可以忽略。
上游 vLLM(推荐,更方便)
2025/10/23 起,vLLM nightly 版已内置 DeepSeek-OCR。一行命令装:
uv venv
source .venv/bin/activate
uv pip install -U vllm --pre --extra-index-url https://wheels.vllm.ai/nightly
不需要手动装 flash-attn。后续直接用 vLLM API 调用。
使用:脚本和上游 API
官方脚本
脚本在 DeepSeek-OCR-master/DeepSeek-OCR-vllm/ 下。先改 config.py 里的输入输出路径。
cd DeepSeek-OCR-master/DeepSeek-OCR-vllm
python run_dpsk_ocr_image.py # 单张图片,流式输出
python run_dpsk_ocr_pdf.py # PDF,吞吐约 2500 tokens/s(A100-40G)
python run_dpsk_ocr_eval_batch.py # 批量跑标准评测
上游 vLLM 调用
用 vLLM 官方 API,不需要项目里的脚本。代码示例(来自 README):
from vllm import LLM, SamplingParams
from vllm.model_executor.models.deepseek_ocr import NGramPerReqLogitsProcessor
from PIL import Image
llm = LLM(
model="deepseek-ai/DeepSeek-OCR",
enable_prefix_caching=False,
mm_processor_cache_gb=0,
logits_processors=[NGramPerReqLogitsProcessor]
)
image_1 = Image.open("path/to/your/image_1.png").convert("RGB")
image_2 = Image.open("path/to/your/image_2.png").convert("RGB")
prompt = "nFree OCR."
model_input = [
# 根据 vLLM 多模态文档构造,每个元素为 {"image": image, "prompt": prompt}
]
注意:READEME 只给出了创建 model_input 的框架,具体格式需参考 vLLM 多模态输入文档。一般用法是 [{"image": image_1, "prompt": prompt}, {"image": image_2, "prompt": prompt}]。
几个关键点
- 图片用
PIL.Image.open()读取后转 RGB,不要留 Alpha 通道。 enable_prefix_caching=False和mm_processor_cache_gb=0是官方建议,避免缓存导致的行为不一致。- vLLM 0.8.5 whl 只支持 Linux x86_64。Mac 和 Windows 用户必须用上游 vLLM nightly。
- 如果遇到
vllm 0.8.5+cu118 requires transformers>=4.51.1报错,忽略即可(只要你不混用 transformers 跑其他任务)。 - prompt 里的
n是换行符,不能省略;Free OCR.是固定指令,不能自创 prompt。
谁适合用
如果你已经在用 vLLM 做文档理解或多模态推理,DeepSeek-OCR 可以替换之前的 OCR 管线(Tesseract、云服务)。对扫描件、复杂版面、学术论文尤其省事。但注意它只输出自然语言文本,不保留版面坐标信息。