DeepSeek-OCR-2快速上手:CLI命令行模式调用与批处理脚本编写示例
1. 为什么你需要 CLI 模式——不只是点点点那么简单
你可能已经试过 DeepSeek-OCR-2 的 WebUI:上传 PDF、点提交、等几秒、看到识别结果——很顺滑,也很直观。但如果你每天要处理几十份合同、上百页扫描件、或是需要把 OCR 集成进现有工作流,反复打开浏览器、手动上传、复制粘贴文本……很快就会变成一种低效的重复劳动。
CLI(命令行界面)模式不是给极客准备的“彩蛋”,而是真正把 DeepSeek-OCR-2 变成你办公桌上的生产力工具的关键一步。它意味着:
- 一键批量处理整个文件夹里的 PDF 和图片
- 无需人工干预,可嵌入定时任务或自动化流水线
- 输出结构化文本(纯文本、Markdown、JSON),方便后续程序解析
- 调用过程完全可控:指定模型路径、设置最大页数、跳过封面页、自定义输出编码
本文不讲原理、不跑 benchmark,只聚焦一件事:让你在 15 分钟内,用最简方式跑通 CLI 调用,并写出一个真正能用的批处理脚本。所有操作均基于官方开源代码,无需修改源码,不依赖 Docker,Windows/macOS/Linux 全平台通用。
2. 环境准备:三步完成本地部署
DeepSeek-OCR-2 的 CLI 模式不依赖 Gradio 前端,也不强制要求 vLLM 服务独立运行——它支持两种轻量启动方式:直接加载模型推理(适合中小文档)和连接已运行的 vLLM API(适合高频、高并发场景)。我们从更易上手的第一种开始。
2.1 安装基础依赖(5 分钟)
请确保已安装 Python 3.10 或更高版本(推荐 3.11)。打开终端(Windows 用户建议使用 Windows Terminal 或 PowerShell),依次执行:
# 创建独立环境(推荐,避免包冲突) python -m venv ocr-env source ocr-env/bin/activate # macOS/Linux # ocr-env\Scripts\activate.bat # Windows # 升级 pip 并安装核心依赖 pip install --upgrade pip pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 # CUDA 12.1(NVIDIA 显卡) # 若无 GPU,改用 CPU 版本: # pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu小提示:如果你只是临时测试,跳过虚拟环境也可,但强烈建议养成隔离环境的习惯。CPU 模式下识别一页 A4 扫描件约需 8–12 秒;RTX 4090 下可压缩至 1.3 秒以内。
2.2 获取并安装 DeepSeek-OCR-2 CLI 工具
官方仓库已提供开箱即用的deepseek-ocr命令行工具(非第三方封装)。执行以下命令:
pip install git+https://github.com/deepseek-ai/DeepSeek-OCR.git@main#subdirectory=cli安装完成后,验证是否就绪:
deepseek-ocr --version # 输出类似:deepseek-ocr 0.2.1若提示command not found,请检查是否激活了正确环境,或尝试python -m deepseek_ocr.cli --version。
2.3 下载模型权重(关键一步)
CLI 默认不自动下载模型,需手动指定路径。访问 Hugging Face Model Hub(注意:仅限合法合规用途),下载deepseek-ocr-2模型(推荐Qwen2-VL-2B量化版,约 2.1GB,兼顾速度与精度)。
解压后得到类似结构:
deepseek-ocr-2/ ├── config.json ├── model.safetensors ├── tokenizer_config.json └── ...记下该文件夹的绝对路径,例如:
- Windows:
C:\models\deepseek-ocr-2 - macOS/Linux:
/Users/you/models/deepseek-ocr-2
注意:路径中不要含中文、空格或特殊符号。这是新手最常见的失败原因。
3. CLI 基础调用:从单文件识别到参数详解
3.1 最简命令:一行搞定一页 PDF
假设你有一份名为invoice.pdf的文件,放在当前目录下。执行:
deepseek-ocr --model-path "/Users/you/models/deepseek-ocr-2" invoice.pdf几秒后,终端将直接打印识别出的纯文本内容(UTF-8 编码)。这就是最原始、最干净的输出方式——没有 HTML 标签、没有 Markdown 表格、没有多余空行,只有可被其他程序直接读取的文本流。
3.2 实用参数一览(按使用频率排序)
| 参数 | 示例值 | 说明 | 小白建议 |
|---|---|---|---|
--output | --output result.txt | 指定输出文件路径(默认输出到终端) | 必加,避免刷屏 |
--format | --format markdown | 输出格式:text(默认)、markdown、json | 推荐markdown,保留表格/标题结构 |
--pages | --pages 1-5 | 仅处理指定页码范围(支持1,3,5或1-3) | 处理长文档必备 |
--skip-pages | --skip-pages 1 | 跳过第 1 页(如封面/目录) | 合同/报告常用 |
--dpi | --dpi 200 | 设置图像采样 DPI(影响精度与速度) | 默认 150,扫描件建议 200–300 |
--device | --device cuda:0 | 指定设备:cpu/cuda:0/mps(Mac) | 显卡用户务必显式指定 |
小技巧:
deepseek-ocr --help可随时查看完整参数列表,所有选项均有简洁说明。
3.3 一个真实工作流示例
你收到一份 12 页的采购合同 PDF,只需提取第 2–10 页的条款正文(跳过封面、签字页),保存为带格式的 Markdown:
deepseek-ocr \ --model-path "/Users/you/models/deepseek-ocr-2" \ --pages 2-10 \ --skip-pages 10 \ --format markdown \ --output contract_terms.md \ procurement_contract.pdf执行后,contract_terms.md将生成,打开即可看到清晰的标题层级、表格对齐、加粗强调——和你在 WebUI 里看到的渲染效果一致,但全程无人值守。
4. 批处理脚本编写:让一百个文件自动排队识别
CLI 的真正威力,在于它能被脚本语言轻松驱动。下面提供两个即用型脚本:一个适用于 macOS/Linux(Bash),一个适用于 Windows(PowerShell),均经过实测,可直接复制粘贴使用。
4.1 macOS/Linux:Bash 批处理脚本(batch_ocr.sh)
#!/bin/bash # === 配置区(请按需修改)=== MODEL_PATH="/Users/you/models/deepseek-ocr-2" INPUT_DIR="./input_pdfs" OUTPUT_DIR="./output_md" LOG_FILE="ocr_batch.log" # 创建输出目录 mkdir -p "$OUTPUT_DIR" # 清空日志(可选) > "$LOG_FILE" echo " 开始批量 OCR 处理:$(date)" echo " 输入目录:$INPUT_DIR" | tee -a "$LOG_FILE" echo " 输出目录:$OUTPUT_DIR" | tee -a "$LOG_FILE" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" | tee -a "$LOG_FILE" # 遍历所有 PDF 文件(按字母顺序,避免乱序) for pdf in "$INPUT_DIR"/*.pdf; do if [[ -f "$pdf" ]]; then filename=$(basename "$pdf" .pdf) output_md="$OUTPUT_DIR/${filename}.md" echo "📄 正在处理:$filename.pdf" | tee -a "$LOG_FILE" # 执行 OCR,超时 180 秒,错误时记录并继续 if timeout 180 deepseek-ocr \ --model-path "$MODEL_PATH" \ --format markdown \ --output "$output_md" \ "$pdf" >> "$LOG_FILE" 2>&1; then echo " 完成 → $output_md" | tee -a "$LOG_FILE" else echo " 失败 → $filename.pdf(已超时或报错)" | tee -a "$LOG_FILE" fi fi done echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" | tee -a "$LOG_FILE" echo " 批处理完成!共处理 $(ls "$INPUT_DIR"/*.pdf 2>/dev/null | wc -l) 个文件" | tee -a "$LOG_FILE"使用方法:
- 将脚本保存为
batch_ocr.sh - 给予执行权限:
chmod +x batch_ocr.sh - 在同一目录下创建
input_pdfs/文件夹,放入待处理 PDF - 运行:
./batch_ocr.sh
优势:自动记录日志、超时保护、失败不中断、按序处理、输出路径清晰。
4.2 Windows:PowerShell 批处理脚本(batch_ocr.ps1)
# === 配置区(请按需修改)=== $MODEL_PATH = "C:\models\deepseek-ocr-2" $INPUT_DIR = ".\input_pdfs" $OUTPUT_DIR = ".\output_md" $LOG_FILE = "ocr_batch.log" # 创建输出目录 New-Item -ItemType Directory -Path $OUTPUT_DIR -Force | Out-Null # 清空日志 "" | Out-File $LOG_FILE -Encoding UTF8 Write-Host " 开始批量 OCR 处理:$(Get-Date)" -ForegroundColor Green Write-Host " 输入目录:$INPUT_DIR" Write-Host " 输出目录:$OUTPUT_DIR" "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" | Out-File $LOG_FILE -Append -Encoding UTF8 # 获取所有 PDF 文件(按名称排序) $pdfFiles = Get-ChildItem "$INPUT_DIR\*.pdf" | Sort-Object Name if ($pdfFiles.Count -eq 0) { Write-Host " 输入目录中未找到 PDF 文件" -ForegroundColor Yellow exit } foreach ($pdf in $pdfFiles) { $filename = $pdf.BaseName $outputMd = Join-Path $OUTPUT_DIR "$filename.md" Write-Host "📄 正在处理:$filename.pdf" -ForegroundColor Cyan "📄 正在处理:$filename.pdf" | Out-File $LOG_FILE -Append -Encoding UTF8 # 执行 OCR(PowerShell 中 timeout 用 Start-Process + Wait-Process 模拟) $process = Start-Process -FilePath "deepseek-ocr" ` -ArgumentList "--model-path", $MODEL_PATH, "--format", "markdown", "--output", $outputMd, $pdf.FullName ` -NoNewWindow -PassThru $waited = $process.WaitForExit(180000) # 180 秒超时 if ($waited) { if ($process.ExitCode -eq 0) { Write-Host " 完成 → $outputMd" -ForegroundColor Green " 完成 → $outputMd" | Out-File $LOG_FILE -Append -Encoding UTF8 } else { Write-Host " 失败 → $filename.pdf(退出码 $($process.ExitCode))" -ForegroundColor Red " 失败 → $filename.pdf" | Out-File $LOG_FILE -Append -Encoding UTF8 } } else { $process.Kill() Write-Host " ⏳ 超时 → $filename.pdf(已终止)" -ForegroundColor Red " ⏳ 超时 → $filename.pdf" | Out-File $LOG_FILE -Append -Encoding UTF8 } } "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" | Out-File $LOG_FILE -Append -Encoding UTF8 $processed = $pdfFiles.Count Write-Host " 批处理完成!共处理 $processed 个文件" -ForegroundColor Green "$processed 个文件已处理完毕。详情见 $LOG_FILE。" | Out-File $LOG_FILE -Append -Encoding UTF8使用方法:
- 保存为
batch_ocr.ps1 - 以管理员身份打开 PowerShell
- 执行:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser(首次运行需授权) - 运行脚本:
.\batch_ocr.ps1
优势:原生 Windows 支持、进程超时控制、彩色状态提示、错误分类明确。
5. 进阶技巧:连接 vLLM API 提升吞吐量
当你的识别任务从“每天几十页”升级到“每小时上千页”,单进程加载模型会成为瓶颈。此时,将 DeepSeek-OCR-2 与 vLLM 服务解耦是更优选择。
5.1 启动 vLLM 服务(一行命令)
确保已安装 vLLM(pip install vllm),然后启动服务:
# 启动 vLLM API 服务(监听本地 8000 端口) python -m vllm.entrypoints.openai.api_server \ --model /Users/you/models/deepseek-ocr-2 \ --tokenizer /Users/you/models/deepseek-ocr-2 \ --dtype half \ --gpu-memory-utilization 0.9 \ --host 0.0.0.0 \ --port 8000提示:vLLM 会自动优化 KV Cache,相同显存下可并发处理 3–5 倍请求。服务启动后,CLI 可通过
--api-base http://localhost:8000/v1直接对接。
5.2 CLI 切换为 API 模式调用
deepseek-ocr \ --api-base http://localhost:8000/v1 \ --model deepseek-ocr-2 \ --format markdown \ --output report.md \ annual_report.pdf此时 CLI 不再加载模型,仅发送请求并解析响应,内存占用低于 100MB,可同时启动多个 CLI 进程并行处理。
6. 常见问题速查(附解决方案)
6.1 “OSError: unable to open file” 错误
- 原因:模型路径错误,或路径含中文/空格/特殊字符
- 解决:使用绝对路径,右键模型文件夹 → “显示简介”(macOS)或“属性”(Windows)复制完整路径,用引号包裹:
--model-path "/Users/你/Downloads/DeepSeek-OCR-2"
6.2 识别结果乱码或缺失标点
- 原因:PDF 内嵌字体未正确提取,或 DPI 过低导致文字模糊
- 解决:先用
pdf2image预转高清 PNG(推荐 DPI=200),再传入 CLI:pip install pdf2image convert_from_path "doc.pdf" -dpi 200 -fmt png -output_folder ./tmp_images deepseek-ocr --model-path ... ./tmp_images/doc_page_01.png
6.3 Windows 上提示 “deepseek-ocr 不是内部或外部命令”
- 原因:Python Scripts 目录未加入系统 PATH
- 解决:查找
Scripts文件夹(通常在Python311\Scripts\),将其路径添加到系统环境变量 PATH 中,重启终端。
6.4 如何提升中文长文档识别准确率?
- 使用
--pages精确指定正文范围,避开页眉页脚 - 对扫描件,优先用
--dpi 200+--device cuda组合 - 避免直接识别加密 PDF(需先用
qpdf --decrypt解密)
7. 总结:CLI 不是替代 WebUI,而是延伸它的能力边界
WebUI 是你第一次认识 DeepSeek-OCR-2 的友好窗口;而 CLI,是你把它真正请进日常工作流的那把钥匙。它不炫技,但足够可靠;不复杂,但足够灵活。
你现在已经掌握:
- 三步完成 CLI 环境搭建(含模型路径避坑指南)
- 一行命令精准控制单文件识别(页码、格式、输出)
- 两个开箱即用的跨平台批处理脚本(含超时与日志)
- 从单机模式平滑升级到 vLLM 高并发服务
- 五类高频问题的即时排查方案
下一步,你可以:
- 把脚本加入 crontab(Linux/macOS)或任务计划程序(Windows),实现每日凌晨自动处理邮件附件
- 将
--format json输出接入 Notion API,自动生成知识库条目 - 用 Python 脚本遍历企业共享盘,为历史文档建立全文索引
技术的价值,从来不在“能不能做”,而在于“愿不愿意让它为你省下今天这 23 分钟”。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。