📌 项目地址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=Falsemm_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、云服务)。对扫描件、复杂版面、学术论文尤其省事。但注意它只输出自然语言文本,不保留版面坐标信息。

这篇文章对你有帮助吗?

发表回复