olmOCR 是由 Allen Institute for Artificial Intelligence (AI2) 的 AllenNLP 团队开发的一款开源工具,旨在将PDF文件和其他文档高效地转换为纯文本,同时保留自然的阅读顺序。它支持表格、公式、手写内容等。
olmOCR 经过学术论文、技术文档和其他文档内容的训练,并采用提示词工程技术来提高准确性并减少幻觉(错误生成的内容)。
试用链接:olmOCR – Open-Source OCR for Accurate Document Conversion (allenai.org)
包含功能
- 使用 ChatGPT 4o 获取高质量自然文本解析的提示策略 - buildsilver.py
- 用于比较不同管道版本的并排评估工具 - runeval.py
- 基于语言的基本过滤和 SEO 垃圾信息移除 - filter.py
- Qwen2-VL 和 Molmo-O 的微调代码 - train.py
- 使用 Sglang 处理数百万 PDF 的微调模型 - pipeline.py
- 查看从 PDF 创建的 Dolma 文档 - dolmaviewer.py
安装方式
要求:
- 最新的 NVIDIA GPU(已在 RTX 4090、L40S、A100、H100 上测试)
- 30GB 磁盘空间
需安装 poppler-utils 和额外的字体以渲染 PDF 图像。
在 Ubuntu/Debian 上安装依赖项:
sudo apt-get update
sudo apt-get install poppler-utils ttf-mscorefonts-installer msttcorefonts fonts-crosextra-caladea fonts-crosextra-carlito gsfonts lcdf-typetools
设置 conda 环境并安装 olmocr:
conda create -n olmocr python=3.11
conda activate olmocrgit clone https://github.com/allenai/olmocr.git
cd olmocr
pip install -e .
如果要在 GPU 上运行推理,请使用 flashinfer 安装 sglang:
pip install sgl-kernel==0.0.3.post1 --force-reinstall --no-deps
pip install "sglang[all]==0.4.2" --find-links https://flashinfer.ai/whl/cu124/torch2.4/flashinfer/
本地使用示例
快速测试可以使用 Web 演示。本地运行需要 GPU,并且利用 sglang 实现推理。
转换单个 PDF:
python -m olmocr.pipeline ./localworkspace --pdfs tests/gnarly_pdfs/horribleocr.pdf
转换多个 PDF:
python -m olmocr.pipeline ./localworkspace --pdfs tests/gnarly_pdfs/*.pdf
结果将存储在 ./localworkspace
中的 JSON 文件中。
查看结果
提取的文本以 Dolma 格式的 JSONL 存储在 ./localworkspace/results
目录中。
cat localworkspace/results/output_*.jsonl
使用 dolmaviewer
命令,查看原始 PDF与提取结果:
python -m olmocr.viewer.dolmaviewer localworkspace/results/output_*.jsonl
然后在浏览器中打开 ./dolma_previews/tests_gnarly_pdfs_horribleocr_pdf.html
。
多节点/集群使用
如果想使用多节点/集群并行处理数百万 PDF,olmOCR 支持从 AWS S3 读取 PDF及处理。
例如,可以在第一个节点上运行以下命令,将在 AWS bucket中设置一个简单的任务队列并开始转换 PDF。
python -m olmocr.pipeline s3://my_s3_bucket/pdfworkspaces/exampleworkspace --pdfs s3://my_s3_bucket/jakep/gnarly_pdfs/*.pdf
在后续节点上,只需运行以下命令,它们将从同一个工作空间队列中抓取任务。
python -m olmocr.pipeline s3://my_s3_bucket/pdfworkspaces/exampleworkspace
如果希望在AI2上使用 beaker 高效地线性化数百万 PDF,只需添加 --beaker
标志。这将在本地机器上准备工作空间,然后在集群中启动 N 个 GPU 工作,开始并行处理PDF。
例如:
python -m olmocr.pipeline s3://my_s3_bucket/pdfworkspaces/exampleworkspace --pdfs s3://my_s3_bucket/jakep/gnarly_pdfs/*.pdf --beaker --beaker_gpus 4
实际试用
显示不太统一
有时候按照md格式输出公式,有时却不按照md格式。
原pdf | 解析文字 |
---|---|
![]() | ![]() |
![]() | ![]() |
中文能力
尽管olmOCR的模型仅在英文文档上做过微调,但对中文pdf解析结果也还不错,如下:
原pdf | 解析文字 |
---|---|
![]() | ![]() |