@hasantoxr: 我找到了为LLM时代打造的OCR工具。它叫olmOCR。olmOCR可以处理PDF、扫描件、PNG和JPEG,并将其转…

X AI KOLs Timeline 工具

摘要

olmOCR 是来自Ai2的开源OCR工具,能够将PDF、扫描件和图像转换为干净的Markdown格式,旨在通过保留阅读顺序和处理复杂布局,为LLM流水线准备文档。

我找到了为LLM时代打造的OCR工具。 它叫olmOCR。 olmOCR可以处理PDF、扫描件、PNG和JPEG文件,并将其转化为模型能够真正理解的干净Markdown格式。 它可以处理那些通常会破坏文档流水线的各种内容: → 表格 → 公式 → 手写文字 → 多栏布局 → 图形 → 插图 → 老旧扫描件 → 页眉和页脚 → 自然的阅读顺序 因此,与其向你的AI输入杂乱的PDF转储,不如为其提供保留原始阅读意图的结构化Markdown。 这一点很重要,因为世界上仍有大量知识被困在PDF中。 研究论文。 法律文件。 财务报告。 医疗文档。 扫描档案。 政府文件。 公司内部知识。 每个人都在文档之上构建RAG系统。 但如果你的OCR质量差,你的AI在检索开始之前就已经错了。 olmOCR解决了最开始的一公里问题。 这个枯燥的层面。 这个没人提及的层面——直到他们的智能体因为损坏的PDF文本开始产生幻觉。 https://github.com/allenai/olmocr
查看原文
查看缓存全文

缓存时间: 2026/06/29 14:28

我找到了一个专为LLM时代打造的OCR工具。它叫olmOCR。olmOCR能将PDF、扫描件、PNG和JPEG文件转换为模型能够真正理解的干净Markdown格式。它能处理那些通常会导致文档流水线崩溃的内容:→ 表格 → 公式 → 手写体 → 多栏布局 → 图表 → 插图 → 老旧扫描件 → 页眉页脚 → 自然阅读顺序这样的话,你就不用把乱七八糟的PDF dump喂给AI,而是给AI结构化的Markdown,保留了文档本来的阅读方式。这一点很重要,因为世界上还有太多知识被困在PDF里:研究论文、法律文件、财务报告、医疗文档、扫描档案、政府文件、企业内部知识。每个人都在文档之上构建RAG系统。但如果你的OCR不行,你的AI在检索开始之前就已经错了。olmOCR修复了第一英里——这个没人谈论的乏味层,直到你的智能体因为混乱的PDF文本开始产生幻觉为止。https://github.com/allenai/olmocr


allenai/olmocr

来源:https://github.com/allenai/olmocr

一个用于将PDF及其他基于图像的文档格式转换为干净、可读的纯文本格式的工具包。
在线试用演示:https://olmocr.allenai.org/

特性:

  • 将基于PDF、PNG和JPEG的文档转换为干净的Markdown
  • 支持公式、表格、手写体及复杂排版
  • 自动移除页眉和页脚
  • 转换为自然阅读顺序的文本,即使存在图表、多栏布局和插图
  • 高效,每百万页转换成本低于200美元
  • (基于7B参数的VLM,因此需要GPU)

新闻

  • 2025年10月21日 - v0.4.0 - 新模型发布(https://huggingface.co/allenai/olmOCR-2-7B-1025-FP8),通过合成数据将olmOCR-bench分数提升约4分,并引入RL训练。
  • 2025年8月13日 - v0.3.0 - 新模型发布(https://huggingface.co/allenai/olmOCR-7B-0825-FP8),修复了自动旋转检测以及在空白文档上的幻觉问题。
  • 2025年7月24日 - v0.2.1 - 新模型发布(https://huggingface.co/allenai/olmOCR-7B-0725-FP8),在olmOCR-Bench(https://github.com/allenai/olmocr/tree/main/olmocr/bench)上得分高出3分,同时由于默认使用FP8,运行速度显著加快,且每个文档所需的重试次数大大减少。
  • 2025年7月23日 - v0.2.0 - 新的清洁后的训练器代码(https://github.com/allenai/olmocr/tree/main/olmocr/train),使自我训练olmOCR模型变得更加简单。
  • 2025年6月17日 - v0.1.75 - 从sglang切换到vllm推理管道,更新Docker镜像到CUDA 12.8。
  • 2025年5月23日 - v0.1.70 - 现在支持官方Docker并提供了镜像!参见Docker用法
  • 2025年5月19日 - v0.1.68 - olmOCR-Bench(https://github.com/allenai/olmocr/tree/main/olmocr/bench)发布,得分77.4。由于修复了提示词相关的bug,olmOCR管道性能提升2分。
  • 2025年3月17日 - v0.1.60 - 由于在采样时选择了更好的温度,性能得到改进。
  • 2025年2月25日 - v0.1.58 - 初始公开发布和演示。

基准测试

olmOCR-Bench(https://github.com/allenai/olmocr/tree/main/olmocr/bench):我们还附带了一个全面的基准测试套件,涵盖超过1400份文档中的7000多个测试案例,用于衡量OCR系统的性能。

评测项目ArXiv旧扫描件、数学公式表格旧扫描件页眉页脚多栏长小文本基础总体
Mistral OCR API77.267.560.629.393.671.377.199.472.0±1.1
Marker 1.10.183.866.872.933.586.680.085.799.376.1±1.1
MinerU 2.5.4*76.654.684.933.796.678.283.593.775.2±1.1
DeepSeek-OCR77.273.680.233.396.166.479.499.875.7±1.0
Nanonets-OCR2-3B75.446.186.840.932.181.993.099.669.5±1.1
PaddleOCR-VL*85.771.084.137.897.079.985.798.580.0±1.0
Infinity-Parser 7B*84.483.885.047.988.784.286.499.882.5±?
Chandra OCR 0.1.0*82.280.388.050.490.881.292.399.983.1±0.9
olmOCR v0.4.083.082.384.947.796.183.781.999.782.4±1.1

安装

系统依赖

你需要安装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

Python安装

设置conda环境并安装olmocr。运行olmOCR所需的依赖项很难在已有的Python环境中安装,因此请务必创建一个干净的Python环境进行安装。

conda create -n olmocr python=3.11
conda activate olmocr

选择符合你使用场景的安装选项:

选项1:远程推理(轻量级)
如果你计划使用 --server 标志连接远程 vLLM 服务器,则安装基础包:

pip install olmocr

这可以避免安装如 PyTorch(约2GB+)等重量级GPU依赖。

选项2:本地GPU推理
要求:

  • 较新的NVIDIA GPU(已在RTX 4090、L40S、A100、H100上测试)至少12GB显存
  • 30GB空闲磁盘空间
    用于在自己GPU上运行推理:
pip install olmocr[gpu] --extra-index-url https://download.pytorch.org/whl/cu128
# 推荐:安装flash infer以加快GPU推理速度
pip install https://download.pytorch.org/whl/cu128/flashinfer/flashinfer_python-0.2.5%2Bcu128torch2.7-cp38-abi3-linux_x86_64.whl

选项3:Beaker集群执行
用于通过 --beaker 标志将任务提交到Beaker集群:

pip install olmocr[beaker]

选项4:基准测试套件
用于运行olmOCR基准测试套件:

pip install olmocr[bench]

组合安装
你可以组合多个选项:

# GPU + Beaker 支持
pip install olmocr[gpu,beaker] --extra-index-url https://download.pytorch.org/whl/cu128
# GPU + 基准测试 支持
pip install olmocr[gpu,bench] --extra-index-url https://download.pytorch.org/whl/cu128

故障排除
如果遇到 too many open files 错误,请更新你的 ulimit:

ulimit -n 65536

使用示例

快速测试可尝试网页演示(https://olmocr.allen.ai/)。

转换单个PDF(本地GPU):

# 下载示例PDF
curl -o olmocr-sample.pdf https://olmocr.allenai.org/papers/olmocr_3pg_sample.pdf
# 转换为markdown
olmocr ./localworkspace --markdown --pdfs olmocr-sample.pdf

转换图像文件:

olmocr ./localworkspace --markdown --pdfs random_page.png

转换多个PDF:

olmocr ./localworkspace --markdown --pdfs tests/gnarly_pdfs/*.pdf

使用远程推理服务器:

olmocr ./localworkspace --server http://remote-server:8000/v1 --model allenai/olmOCR-2-7B-1025-FP8 --markdown --pdfs *.pdf

使用 --markdown 标志后,结果将以markdown文件形式存储在 ./localworkspace/markdown/ 中。

注意: 你也可以使用 python -m olmocr.pipeline 来替代 olmocr 命令。

查看结果

工作区文件夹 ./localworkspace/ 将包含 Dolma(https://github.com/allenai/dolma)文件和markdown文件(如果使用了 --markdown)。

cat localworkspace/markdown/olmocr-sample.md

输出类似:

olmOCR: Unlocking Trillions of Tokens in PDFs with Vision Language Models ...

使用推理提供商或外部服务器

如果你已经有一个正在运行的 vLLM 服务器(或者其他实现了 OpenAI API 的推理平台),可以让 olmOCR 使用它而不是启动本地实例。

远程推理的安装:

# 轻量级安装 - 不需要GPU依赖
pip install olmocr

使用外部服务器:

# 使用外部vLLM服务器代替本地
olmocr ./localworkspace --server http://remote-server:8000/v1 --model allenai/olmOCR-2-7B-1025-FP8 --markdown --pdfs tests/gnarly_pdfs/*.pdf

在 vLLM 中提供的模型名称需要与 --model 中指定的值一致。

示例vLLM服务器启动:

vllm serve allenai/olmOCR-2-7B-1025-FP8 --max-model-len 16384

已验证的外部提供商

我们已经在以下外部模型提供商上测试了olmOCR-2-7B-1025-FP8,并确认它们可以工作。

提供商每100万输入token成本每100万输出token成本示例命令
Cirrascale (https://ai2endpoints.cirrascale.ai/models/overview)$0.07$0.15olmocr ./workspace --server https://ai2endpoints.cirrascale.ai/api --api_key sk-XXXXXXX --workers 1 --max_concurrent_requests 20 --model olmOCR-2-7B-1025 --pdfs tests/gnarly_pdfs/*.pdf
DeepInfra (https://deepinfra.com/)$0.09$0.19olmocr ./workspace --server https://api.deepinfra.com/v1/openai --api_key DfXXXXXXX --workers 1 --max_concurrent_requests 20 --model allenai/olmOCR-2-7B-1025 --pdfs tests/gnarly_pdfs/*.pdf
Parasail (https://www.saas.parasail.io/serverless?name=olmocr-7b-1025-fp8)$0.10$0.20olmocr ./workspace --server https://api.parasail.io/v1 --api_key psk-XXXXX --workers 1 --max_concurrent_requests 20 --model allenai/olmOCR-2-7B-1025 --pdfs tests/gnarly_pdfs/*.pdf

关于参数说明:

  • --server:定义与OpenAI兼容的端点,例如 https://api.deepinfra.com/v1/openai
  • --api_key:你的API密钥,通过Authorization Bearer HTTP标头传递
  • --max_concurrent_requests:同时向推理提供商发起的最大并发请求数
  • --workers:同时处理的页面组最大数量。你可能想将其设置为 1,以便先完成一组内容再继续。
  • --pages_per_group:你可能希望每组页面数较少,因为许多外部提供商有较低的并发请求限制。
  • --model:模型标识符,例如 allenai/olmOCR-2-7B-1025,不同提供商名称不同,如果本地运行,可以使用 olmocr
  • 其他参数与本地推理相同。

多节点/集群使用

如果你想使用多个节点并行转换数百万份PDF,olmOCR支持从AWS S3读取PDF并使用AWS S3输出桶协调工作。

启动第一个工作节点:

olmocr s3://my_s3_bucket/pdfworkspaces/exampleworkspace --pdfs s3://my_s3_bucket/jakep/gnarly_pdfs/*.pdf

这会在你的AWS桶中设置一个简单的工作队列,并开始转换PDF。

在后续工作节点上:

olmocr s3://my_s3_bucket/pdfworkspaces/exampleworkspace

它们会自动开始从同一个工作区队列中获取任务。

使用Beaker进行集群执行

如果你在Ai2并希望使用Beaker(https://www.beaker.org)高效地线性化数百万份PDF,请安装Beaker支持:

pip install olmocr[gpu,beaker] --extra-index-url https://download.pytorch.org/whl/cu128

然后使用 --beaker 标志在本地准备工作区并在集群中启动N个GPU工作节点:

olmocr s3://my_s3_bucket/pdfworkspaces/exampleworkspace --pdfs s3://my_s3_bucket/jakep/gnarly_pdfs/*.pdf --beaker --beaker_gpus 4

使用Docker

拉取Docker镜像(很大,包含模型,约30GB):

docker pull alleninstituteforai/olmocr:latest-with-model

对于希望自行管理模型下载的高级用户,我们还提供了一个不含模型的基础镜像:

docker pull alleninstituteforai/olmocr:latest

快速入门 - 处理PDF

处理当前目录中的单个PDF:

docker run --gpus all \
  -v $(pwd):/workspace \
  alleninstituteforai/olmocr:latest-with-model \
  -c "olmocr /workspace/output --markdown --pdfs /workspace/sample.pdf"

处理多个PDF:

docker run --gpus all \
  -v /path/to/pdfs:/input \
  -v /path/to/output:/output \
  alleninstituteforai/olmocr:latest-with-model \
  -c "olmocr /output --markdown --pdfs /input/*.pdf"

交互模式

以交互模式运行容器以便探索和调试:

docker run -it --gpus all alleninstituteforai/olmocr:latest-with-model

更多信息请访问我们在Docker Hub上的仓库(https://hub.docker.com/r/alleninstituteforai/olmocr)。

完整文档

查看所有可用选项:

olmocr --help

输出(翻译摘要):

用法:pipeline.py [-h] [–pdfs [PDFS …]] [–model MODEL] [–workspace_profile WORKSPACE_PROFILE] [–pdf_profile PDF_PROFILE] [–pages_per_group PAGES_PER_GROUP] [–max_page_retries MAX_PAGE_RETRIES] [–max_page_error_rate MAX_PAGE_ERROR_RATE] [–workers WORKERS] [–apply_filter] [–stats] [–markdown] [–target_longest_image_dim TARGET_LONGEST_IMAGE_DIM] [–target_anchor_text_len TARGET_ANCHOR_TEXT_LEN] [–guided_decoding] [–gpu-memory-utilization GPU_MEMORY_UTILIZATION] [–max_model_len MAX_MODEL_LEN] [–tensor-parallel-size TENSOR_PARALLEL_SIZE] [–data-parallel-size DATA_PARALLEL_SIZE] [–port PORT] [–server SERVER] [–beaker] [–beaker_workspace BEAKER_WORKSPACE] [–beaker_cluster BEAKER_CLUSTER] [–beaker_gpus BEAKER_GPUS] [–beaker_priority BEAKER_PRIORITY] workspace

通过批处理推理管道运行数百万份PDF的管理器

位置参数: workspace 工作存储的文件系统路径,可以是本地文件夹,如果使用多个工作节点协调工作,也可以是s3路径,例如 s3://bucket/prefix/

选项: -h, –help 显示此帮助消息并退出 –pdfs [PDFS …] 将存储在S3中的PDF路径添加到工作区,可以是通配符路径 s3://bucket/prefix/*.pdf 或包含PDF路径列表的文件路径 –model MODEL 模型所在路径,默认为 allenai/olmOCR-7B-0725-FP8,可以是本地、S3或Hugging Face路径。 –workspace_profile WORKSPACE_PROFILE 用于访问工作区的S3配置配置文件 –pdf_profile PDF_PROFILE 用于访问原始PDF文档的S3配置配置文件 –pages_per_group PAGES_PER_GROUP 每个工作项组期望的PDF页数 –max_page_retries MAX_PAGE_RETRIES 重试渲染页面最大次数 –max_page_error_rate MAX_PAGE_ERROR_RATE 文档中允许的失败页面比率,默认为1/250 –workers WORKERS 同时运行的工作节点数量 –apply_filter 对非表单、非SEO垃圾信息的英文PDF应用基本过滤 –stats 不运行任何作业,而是报告当前工作区的统计信息 –markdown 同时将自然文本写入markdown文件,保留输入PDF的文件夹结构 –target_longest_image_dim TARGET_LONGEST_IMAGE_DIM 渲染PDF页面时最长边的尺寸 –target_anchor_text_len TARGET_ANCHOR_TEXT_LEN 要使用的锚文本最大字符数(不用于新模型) –guided_decoding 启用用于模型YAML类型输出的引导解码

VLLM参数: –gpu-memory-utilization GPU_MEMORY_UTILIZATION vLLM可以为KV缓存预分配的显存比例(传递给vllm serve)。 –max_model_len MAX_MODEL_LEN vLLM为KV缓存分配的上限(token数),如果VLLM无法启动则降低此值 –tensor-parallel-size / -tp TENSOR_PARALLEL_SIZE vLLM的张量并行大小 –data-parallel-size / -dp DATA_PARALLEL_SIZE vLLM的数据并行大小 –port PORT 用于VLLM服务器的端口 –server SERVER 外部vLLM(或其他兼容提供商)服务器的URL(例如 http://hostname:port)。如果提供,则跳过启动本地vLLM实例

Beaker/集群执行: –beaker 将此作业提交给Beaker而不是本地运行 –beaker_workspace BEAKER_WORKSPACE 要提交到的Beaker工作区 –beaker_cluster BEAKER_CLUSTER 你想运行的Beaker集群 –beaker_gpus BEAKER_GPUS 要运行的GPU副本数量 –beaker_priority BEAKER_PRIORITY 作业的Beaker优先级级别

代码概述

有一些很好的可重用代码片段可能对你的项目有用:

  • 一个提示生成系统

相似文章

PaddlePaddle/PaddleOCR

GitHub Trending (daily)

PaddleOCR是一个功能强大、轻量级的OCR工具包,可将PDF和图像转换为结构化数据,适用于AI应用,支持100多种语言,旨在连接文档与大语言模型。