dots.ocr 是一个强大的多语言文档解析工具,基于 1.7B 参数的视觉-语言模型(VLM),能够同时进行布局检测和内容识别。它在 OmniDocBench 等基准测试中展现了最先进的性能,特别是在文本、表格和阅读顺序解析方面表现出色。dots.ocr 支持多种语言,包括低资源语言,适合处理复杂文档如学术论文、财务报告等。相比传统多模型流水线,dots.ocr 使用单一模型架构,通过简单更改输入提示即可切换任务,推理速度快且效率高。用户可以通过 GitHub 上的开源代码和提供的 Docker 镜像快速部署和使用。
功能列表
- 布局检测:识别文档中的元素(如文本、表格、公式、图片等)并提供精确的边界框(bbox)坐标。
- 内容识别:提取文档中的文本、表格(以 HTML 格式输出)、公式(以 LaTeX 格式输出)等内容。
- 多语言支持:支持 100 种语言的文档解析,特别在低资源语言上表现优异。
- 阅读顺序优化:按照人类阅读习惯排序文档元素,确保输出的逻辑性。
- 快速推理:基于 1.7B 参数的紧凑模型,推理速度优于许多大型模型。
- 灵活提示切换:通过不同提示(如
prompt_layout_only_en
、prompt_ocr
)实现特定任务的解析。 - 输出多样化:生成 JSON 格式的结构化布局数据、Markdown 文件以及带边界框的可视化图像。
使用帮助
安装流程
要使用 dots.ocr,首先需要安装必要的环境和模型权重。以下是详细的安装步骤:
- 创建虚拟环境:
conda create -n dots_ocr python=3.12 conda activate dots_ocr
- 克隆代码仓库:
git clone https://github.com/rednote-hilab/dots.ocr.git cd dots.ocr
- 安装 PyTorch 和依赖:
根据你的 CUDA 版本,安装对应版本的 PyTorch。例如:pip install torch==2.7.0 torchvision==0.22.0 torchaudio==2.7.0 --index-url https://download.pytorch.org/whl/cu128 pip install -e .
- 下载模型权重:
使用提供的脚本下载模型权重。注意,模型保存路径的文件夹名不能包含句点,建议使用DotsOCR
:python3 tools/download_model.py
- 使用 Docker 镜像(可选):
如果遇到安装问题,可以使用官方提供的 Docker 镜像:git clone https://github.com/rednote-hilab/dots.ocr.git cd dots.ocr pip install -e .
部署方式
dots.ocr 推荐使用 vLLM 进行部署,以获得最佳推理性能。以下是基于 vLLM 的部署步骤:
- 注册模型到 vLLM:
python3 tools/download_model.py export hf_model_path=./weights/DotsOCR export PYTHONPATH=$(dirname "$hf_model_path"):$PYTHONPATH sed -i '/^from vllm\.entrypoints\.cli\.main import main$/a\ from DotsOCR import modeling_dots_ocr_vllm' `which vllm`
- 启动 vLLM 服务:
CUDA_VISIBLE_DEVICES=0 vllm serve ${hf_model_path} --tensor-parallel-size 1 --gpu-memory-utilization 0.95 --chat-template-content-format string --served-model-name model --trust-remote-code
- 运行 vLLM API 示例:
python3 ./demo/demo_vllm.py --prompt_mode prompt_layout_all_en
或者,使用 HuggingFace 进行推理:
python3 demo/demo_hf.py
文档解析操作
在 vLLM 服务启动后,可以通过以下命令解析图像或 PDF 文件:
- 解析单张图像:
python3 dots_ocr/parser.py demo/demo_image1.jpg
- 解析 PDF 文件:
对于多页 PDF,建议设置较大的线程数:python3 dots_ocr/parser.py demo/demo_pdf1.pdf --num_threads 64
- 仅进行布局检测:
python3 dots_ocr/parser.py demo/demo_image1.jpg --prompt prompt_layout_only_en
- 仅提取文本(排除页眉页脚):
python3 dots_ocr/parser.py demo/demo_image1.jpg --prompt prompt_ocr
- 基于边界框的解析:
python3 dots_ocr/parser.py demo/demo_image1.jpg --prompt prompt_grounding_ocr --bbox 163 241 1536 705
输出结果
解析完成后,dots.ocr 会生成以下文件:
- JSON 文件(如
demo_image1.json
):包含布局元素的边界框、类别和文本内容。 - Markdown 文件(如
demo_image1.md
):将所有检测到的文本内容合并为 Markdown 格式,另有demo_image1_nohf.md
版本排除页眉页脚。 - 可视化图像(如
demo_image1.jpg
):在原始图像上绘制检测到的边界框。
运行演示
可以通过以下命令启动交互式演示界面:
python demo/demo_gradio.py
或运行基于边界框的 OCR 演示:
python demo/demo_gradio_annotion.py
注意事项
- 模型保存路径:确保模型保存路径不包含句点(如
DotsOCR
),否则可能导致模块加载错误。 - 图像分辨率:建议图像分辨率不超过 11289600 像素,PDF 解析时 DPI 设置为 200。
- 特殊字符处理:连续的特殊字符(如
...
或_
)可能导致输出异常,建议使用prompt_layout_only_en
或prompt_ocr
提示。
应用场景
- 学术论文解析
dots.ocr 可以高效解析学术论文中的文本、公式和表格,生成结构化的 JSON 数据和 Markdown 文档,适合研究人员整理文献内容。 - 财务报告处理
对于财务报告,dots.ocr 能准确提取表格和文本内容,生成 HTML 格式的表格,便于数据分析和存档。 - 多语言文档整理
支持 100 种语言的解析,适合处理多语言合同、法律文件等,确保内容和布局准确提取。 - 教育资料整理
解析教科书、试卷等教育材料,提取公式(以 LaTeX 格式)和文本,方便教师和学生整理学习资源。
QA
- dots.ocr 支持哪些语言?
dots.ocr 支持 100 种语言,包括英语、中文、西藏语、俄语等,尤其在低资源语言上表现优异。 - 如何处理大型 PDF 文件?
使用parser.py
脚本并设置--num_threads
参数(如 64),以加速多页 PDF 的解析。 - 解析结果如何输出?
结果包括 JSON 文件(结构化数据)、Markdown 文件(文本内容)和可视化图像(带边界框)。 - 如何解决模型加载错误?
确保模型保存路径不含句点(如使用DotsOCR
),并检查 vLLM 注册脚本是否正确执行。