news 2026/4/23 19:11:49

DeepSeek-OCR-2快速上手:CLI命令行模式调用与批处理脚本编写示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DeepSeek-OCR-2快速上手:CLI命令行模式调用与批处理脚本编写示例

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(默认)、markdownjson推荐markdown,保留表格/标题结构
--pages--pages 1-5仅处理指定页码范围(支持1,3,51-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"

使用方法

  1. 将脚本保存为batch_ocr.sh
  2. 给予执行权限:chmod +x batch_ocr.sh
  3. 在同一目录下创建input_pdfs/文件夹,放入待处理 PDF
  4. 运行:./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

使用方法

  1. 保存为batch_ocr.ps1
  2. 以管理员身份打开 PowerShell
  3. 执行:Set-ExecutionPolicy RemoteSigned -Scope CurrentUser(首次运行需授权)
  4. 运行脚本:.\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星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:24:58

大数据实战进阶:HBase批量操作性能优化全攻略

1. HBase批量操作的核心价值与适用场景 第一次接触HBase批量操作时,我正面临一个日志分析系统的性能瓶颈。当时单条写入的吞吐量死活上不去,集群CPU使用率却居高不下。直到尝试了批量写入方案,导入速度直接提升了8倍,这个经历让我…

作者头像 李华
网站建设 2026/4/23 12:25:38

零基础教程:用Qwen3-ASR-1.7B实现会议录音秒转文字

零基础教程:用Qwen3-ASR-1.7B实现会议录音秒转文字 1. 你不需要懂语音模型,也能把会议录音变成可编辑文字 你有没有过这样的经历:开完两小时线上会议,录音文件躺在电脑里,却迟迟不敢点开——因为知道,接下…

作者头像 李华
网站建设 2026/4/23 12:13:42

零基础玩转DeepSeek-R1-Distill-Qwen-1.5B:vLLM一键部署指南

零基础玩转DeepSeek-R1-Distill-Qwen-1.5B:vLLM一键部署指南 你是不是也遇到过这些情况:想试试国产新模型,但被复杂的环境配置劝退;下载了模型文件,却卡在启动服务这一步;好不容易跑起来,显存爆…

作者头像 李华
网站建设 2026/4/23 12:25:30

tensorboard可视化训练过程,Qwen2.5-7B loss曲线观察

TensorBoard 可视化训练过程:Qwen2.5-7B LoRA 微调中的 Loss 曲线观察 在大模型轻量微调实践中,“看得见的训练”比“跑得通的命令”更重要。当你执行完 swift sft 命令、显卡风扇开始呼啸、终端滚动出一行行日志时——你真正知道模型正在“学什么”吗&a…

作者头像 李华
网站建设 2026/4/23 12:12:25

PWM移相技术在现代电力电子中的应用与DSP28335实现

PWM移相技术在电力电子中的革新应用与DSP28335实战解析 电力电子领域正经历着从传统硬开关技术向软开关技术的范式转移,而PWM移相控制技术凭借其独特的相位调制能力,正在DC-DC变换器、逆变器等关键设备中展现出革命性的性能优势。本文将深入剖析这项技术…

作者头像 李华