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 | 解析文字 |
---|---|
![]() | ![]() |