MCPcopy
hub / github.com/opendatalab/OmniDocBench

github.com/opendatalab/OmniDocBench @main sqlite

repository ↗ · DeepWiki ↗
774 symbols 2,830 edges 90 files 123 documented · 16%
README

OmniDocBench

English | 简体中文

[📜 arXiv] | [Dataset (🤗Hugging Face)] | [Dataset (OpenDataLab)]| [Official Site (OpenDataLab)]

OmniDocBench是一个针对真实场景下多样性文档解析评测集,具有以下特点: - 文档类型多样:该评测集涉及1651个PDF页面,涵盖10种文档类型、5种排版类型和5种语言类型。覆盖面广,包含学术文献、财报、报纸、教材、手写笔记等; - 标注信息丰富:包含28个block级别(文本段落、标题、表格等)和4个Span级别(文本行、行内公式、角标等,总量超过80k)的文档元素的定位信息,以及每个元素区域的识别结果(文本Text标注,公式LaTeX标注,表格包含LaTeX和HTML两种类型的标注)。OmniDocBench还提供了各个文档组件的阅读顺序的标注。除此之外,在页面和block级别还包含多种属性标签,标注了5种页面属性标签、3种文本属性标签和6种表格属性标签。 - 标注质量高:经过人工筛选,智能标注,人工标注及全量专家质检和大模型质检,数据质量较高。 - 配套评测代码:设计端到端评测及单模块评测代码,保证评测的公平性及准确性。

可进行以下几个维度的评测: - 端到端评测:包括end2end和md2md两种评测方式 - Layout检测 - 表格识别 - 公式识别 - 文本OCR

目前支持的metric包括: - Normalized Edit Distance - BLEU - METEOR - TEDS - COCODet (mAP, mAR, etc.)

目录

更新

[2026/04/30] 从版本v1.6 更新到 v1.7,新增QianfanOCR的榜单,支持skills方式评测。

[2026/04/09] 重大版本更新:从版本v1.5 更新到 v1.6 - 评测代码:(1) 我们提出 Multi-Granularity Adaptive Matching (MGAM),通过对预测端进行自适应粒度调整来消除匹配偏差。核心设计原则是:保持 ground truth 不变,仅在预测端搜索最优分段粒度。(2) 为优化CDM的部署,将node.js、katex等依赖包用python版本重写并替换,速度优化3倍左右。 - 评测集:(1) 新增 296 页样本, 样本选取旨在覆盖文档解析中更具挑战性的场景类别,包括复杂嵌套表格、密集数学公式排版、非常规版面结构等; (2) 修正了1.5版本表格、公式、OCR部分标注; - 注意:评测代码(本repo)和评测集(HuggingFace和OpenDataLab)的main分支已经更新到版本v1.6,如果仍想使用v1.0版本的代码和评测集,请切换到特定分支。

[2026/03/31] 更新了PaddleOCR-VL-1.5、Youtu-Parsing、FireRed-OCR、Logics-Parsing-v2、Ovis2.6-30B-A3B、MinerU2.5、HunyuanOCR、FD-RL、DeepSeek-OCR-2、MonkeyOCR-pro-3B、OCRVerse、dots.ocr、Dolphin-v2、MonkeyOCR-Pro-3B、POINTS-Reader、Gemini-3 Flash、Gemini-3 Pro、Kimi 2.5、GPT5.2、GPT-4o、InternVL3.5、GLM-OCR、OpenDoc 和 Mathpix 的模型评测结果,新增了上述榜单模型的推理代码。

[2025/11/04] 增加docker运行环境,包含评测环境和CDM环境。

[2025/10/28] 更新PaddleOCR-VL, Qwen3-VL-235B-A22B-Instruct, Deepseek-OCR, Dolphin-1.5模型评测结果。

[2025/09/25] 重大版本更新:从版本v1.0 更新到 v1.5 - 评测代码:(1)更新了混合匹配方案,使公式和文本之间也可以进行匹配,从而缓解了模型将公式写成unicode后造成的分数误差;(2)将CDM的计算直接写入metric部分,用户如果有CDM环境可以直接通过在config文件中配置CDM计算出指标,另外,仍保留了之前输出公式匹配对JSON文件的接口,命名为CDM_plain; - 评测集:(1)报纸和笔记类型的图片从72DPI提升到200DPI;(2)新增374个页面,平衡了中英文页面的数量,并提升了包含公式页面的占比;(3)公式新增语种属性;(4)修复部分文本和表格的标注错别字; - 榜单:(1)去除了中英文的分组,直接计算的是所有页面的平均分;(2)Overall指标的计算方式改为 ((1-文本编辑距离)100 + 表格TEDS + 公式CDM)/3; - 注意:评测代码(本repo)和评测集(HuggingFace和OpenDataLab)的main分支已经更新到版本v1.5*,如果仍想使用v1.0版本的代码和评测集,请切换分支到v1_0.

[2025/09/09] 使用最新Dolphin推理脚本和模型权重,更新Dolphin的评测结果,新增了Dolphin infer脚本。

[2025/08/20] 更新PP-StructureV3、MonkeyOCR-pro-1.2B模型评测结果,新增了Mistral OCR、Pix2text、phocr、Nanonets-OCR-s infer脚本。

[2025/07/31] 新增了MinerU2.0-vlm、Marker-1.7.1、PP-StructureV3、MonkeyOCR-pro-1.2B、Dolphin、Nanonets-OCR-s、OCRFlux-3B、Qwen2.5-VL-7B、InternVL3-78B模型的评测;更新了MinerU版本。

[2025/03/27] 新增了Pix2Text、Unstructured、OpenParse、Gemini-2.0 Flash、Gemini-2.5 Pro、Mistral OCR、OLMOCR、Qwen2.5-VL-72B模型的评测;

[2025/03/10] OmniDocBench被CVPR 2025接收啦!

[2025/01/16] 更新Marker、Tesseract OCR、StructEqTable版本;新增Docling、OpenOCR、EasyOCR评测;Table部分的Edit Distance计算改成用norm后的字段;新增评测模型版本信息。

评测集介绍

该评测集涉及1651个PDF页面,涵盖10种文档类型、5种排版类型和5种语言类型。OmniDocBench具有丰富的标注,包含28个block级别的标注(文本段落、标题、表格等)和4个Span级别的标注(文本行、行内公式、角标等)。所有文本相关的标注框上都包含文本识别的标注,公式包含LaTeX标注,表格包含LaTeX和HTML两种类型的标注。OmniDocBench还提供了各个文档组件的阅读顺序的标注。除此之外,在页面和block级别还包含多种属性标签,标注了5种页面属性标签、3种文本属性标签和6种表格属性标签。

【评测集的数据格式】

评测集的数据格式为JSON,其结构和各个字段的解释如下:

[{
    "layout_dets": [    // 页面元素列表
        {
            "category_type": "text_block",  // 类别名称
            "poly": [
                136.0, // 位置信息,分别是左上角、右上角、右下角、左下角的x,y坐标
                781.0,
                340.0,
                781.0,
                340.0,
                806.0,
                136.0,
                806.0
            ],
            "ignore": false,        // 是否在评测的时候不考虑
            "order": 0,             // 阅读顺序
            "anno_id": 0,           // 特殊的标注ID,每个layout框唯一
            "text": "xxx",          // 可选字段,OCR结果会写在这里
            "latex": "$xxx$",       // 可选字段,formula和table的LaTeX会写在这里
            "html": "xxx",          // 可选字段,table的HTML会写在这里
            "attribute" {"xxx": "xxx"},         // layout的分类属性,后文会详细展示
            "line_with_spans:": [   // span level的标注框
                {
                    "category_type": "text_span",
                    "poly": [...],
                    "ignore": false,
                    "text": "xxx",   
                    "latex": "$xxx$",
                 },
                 ...
            ],
            "merge_list": [    // 只有包含merge关系的标注框内有这个字段,是否包含merge逻辑取决于是否包含单换行分割小段落,比如列表类型
                {
                    "category_type": "text_block", 
                    "poly": [...],
                    ...   // 跟block级别标注的字段一致
                    "line_with_spans": [...]
                    ...
                 },
                 ...
            ]
        ...
    ],
    "page_info": {         
        "page_no": 0,            // 页码
        "height": 1684,          // 页面的宽
        "width": 1200,           // 页面的高
        "image_path": "xx/xx/",  // 标注的页面文件名称
        "page_attribute": {"xxx": "xxx"}     // 页面的属性标签
    },
    "extra": {
        "relation": [ // 具有相关关系的标注
            {  
                "source_anno_id": 1,
                "target_anno_id": 2, 
                "relation": "parent_son"  // figure/table与其对应的caption/footnote类别的关系标签
            },
            {  
                "source_anno_id": 5,
                "target_anno_id": 6,
                "relation_type": "truncated"  // 段落因为排版原因被截断,会标注一个截断关系标签,后续评测的时候会拼接后再作为一整个段落进行评测
            },
        ]
    }
},
...
]

【验证集类别】

验证集类别包括:

# Block级别标注框
'title'               # 标题
'text_block'          # 段落级别纯文本
'figure',             # 图片类
'figure_caption',     # 图片说明、标题
'figure_footnote',    # 图片注释
'table',              # 表格主体
'table_caption',      # 表格说明和标题
'table_footnote',     # 表格的注释
'equation_isolated',  # 行间公式
'equation_caption',   # 公式序号
'header'              # 页眉
'footer'              # 页脚  
'page_number'         # 页码
'page_footnote'       # 页面注释
'abandon',            # 其他的舍弃类(比如页面中间的一些无关信息)
'code_txt',           # 代码块
'code_txt_caption',   # 代码块说明
'reference',          # 参考文献类

# Span级别标注框
'text_span'           # span级别的纯文本
'equation_ignore',    # 需要忽略的公式类
'equation_inline',    # 行内公式类
'footnote_mark',      #文章的上下角标

【验证集属性标签】

页面分类属性包括:

'data_source': #PDF类型分类
    academic_literature  # 学术文献
    PPT2PDF # PPT转PDF
    book # 黑白的图书和教材
    colorful_textbook # 彩色图文教材
    exam_paper # 试卷
    note # 手写笔记
    magazine # 杂志
    research_report # 研报、财报
    newspaper # 报纸

'language':#语种
    en # 英文
    simplified_chinese # 简体中文
    en_ch_mixed # 中英混合

'layout': #页面布局类型
    single_column # 单栏
    double_column # 双栏
    three_column # 三栏
    1andmore_column # 一混多,常见于文献
    other_layout # 其他

'watermark': # 是否包含水印
    true  
    false

'fuzzy_scan': # 是否模糊扫描
    true  
    false

'colorful_backgroud': # 是否包含彩色背景,需要参与识别的内容的底色包含两个以上
    true  
    false

标注框级别属性-表格相关属性:

'table_layout': # 表格的方向
    vertical #竖版表格
    horizontal #横版表格

'with_span': # 合并单元格
    False
    True

'line':# 表格的线框
    full_line # 全线框
    less_line # 漏线框
    fewer_line # 三线框 
    wireless_line # 无线框

'language': #表格的语种
    table_en  # 英文表格
    table_simplified_chinese  #中文简体表格
    table_en_ch_mixed  #中英混合表格

'include_equation': # 表格是否包含公式
    False
    True

'include_backgroud': # 表格是否包含底色
    False
    True

'table_vertical' # 表格是否旋转90度或270度
    False
    True

标注框级别属性-文本段落相关属性:

'text_language': # 文本的段落内语种
    text_en  # 英文
    text_simplified_chinese #简体中文
    text_en_ch_mixed  #中英混合

'text_background':  #文本的背景色
    white # 默认值,白色背景
    single_colored # 除白色外的单背景色
    multi_colored  # 混合背景色

'text_rotate': # 文本的段落内文字旋转分类
    normal # 默认值,横向文本,没有旋转
    rotate90  # 旋转角度,顺时针旋转90度
    rotate180 # 顺时针旋转180度
    rotate270 # 顺时针旋转270度
    horizontal # 文字是正常的,排版是竖型文本

标注框级别属性-公式相关属性:

'formula_type': #公式类型
    print  # 打印体
    handwriting # 手写体

评测

OmniDocBench开发了一套基于文档组件拆分和匹配的评测方法,对文本、表格、公式、阅读顺序这四大模块分别提供了对应的指标计算,评测结果除了整体的精度结果以外,还提供了分页面以及分属性的精细化评测结果,精准定位模型文档解析的痛点问题。

环境配置和运行

评测流水线需要 Python 3.10 以及若干系统依赖(TeX Live、ImageMagick、Ghostscript)以支持 CDM 公式指标。提供两种部署方式,推荐使用Docker方式:

方式 A:Docker(推荐)

预构建 Docker 镜像打包了经过验证的完整运行时(Python 3.10 conda 环境 + TeX Live 2025 + ImageMagick 7.1.1-47 + Ghostscript 9.55.0)。

拉取镜像

docker pull ghcr.io/zeng-weijun/omnidocbench-eval:repro-ubuntu2204

使用自己的数据运行

docker run --rm \
  --entrypoint bash \
  -v /path/to/your_gt.json:/workspace/gt/your_gt.json:ro \
  -v /path/to/your_predictions:/workspace/data_md/predictions:ro \
  -v /path/to/output:/workspace/result \
  ghcr.io/zeng-weijun/omnidocbench-eval:repro-ubuntu2204 \
  -c 'cat > configs/custom.yaml << "EOF"
end2end_eval:
  metrics:
    text_block:
      metric: [Edit_dist]
    display_formula:
      metric: [Edit_dist, CDM]
    table:
      metric: [TEDS, Edit_dist]
    reading_order:
      metric: [Edit_dist]
  dataset:
    dataset_name: end2end_dataset
    ground_truth:
      data_path: ./gt/your_gt.json
    prediction:
      data_path: ./data_md/predictions
    match_method: quick_match
    match_workers: 4
    quick_match_truncated_timeout_sec: 300
    timeout_fallback_max_chunk_span: 10
    timeout_fallback_order_penalty: 0.10
EOF
python pdf_validation.py --config configs/custom.yaml'

验证镜像内运行时

docker run --rm --entrypoint bash \
  ghcr.io/zeng-weijun/omnidocbench-eval:repro-ubuntu2204 \
  -lc 'bash script/verify_repro_runtime.sh'

从源码构建(可选)

bash script/build_repro_docker_image.sh

方式 B:Conda

需要 Ubuntu 22.04 / 20.04,至少 8 GB 磁盘空间和 8 GB 内存,root 权限。

第 1 步 — 创建环境并安装 Python 依赖

conda create -n omnidocbench python=3.10 -y
conda activate omnidocbench
git clone <repo_url> && cd Omnidocbench
pip install -e .
python -c "from src.core.pipeline import run_config_file; print('OK')"

第 2 步 — 安装 Ghostscript

CDM 指标需要 Ghostscript 通过 ImageMagick 完成 PDF 到 PNG 的转换。

sudo apt-get update && sudo apt-get install -y ghostscript
gs --version   # 预期: 9.55.0 (Ubuntu 22.04)

第 3 步 — 安装 TeX Live 2025

CDM 指标需要 pdflatex 并支持 CJK 中文字体。

cd ~ && wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
tar -xzf install-tl-unx.tar.gz && cd install-tl-*/
sudo ./install-tl   # 交互式安装,全量约 7 GB

echo 'export PATH=/usr/local/texlive/2025/bin/x86_64-linux:$PATH' >> ~/.bashrc
source ~/.bashrc
pdflatex --version | head -2   # 预期: pdfTeX ... (TeX Live 2025)

# 验证 CJK 支持
kpsewhich CJK.sty && kpsewhich c70gkai.fd
# 如果没有输出: sudo tlmgr install cjk cjkutils arphic gkai

第 4 步 — 安装 ImageMagick 7.x(从源码编译)

Ubuntu 22.04 apt 默认是 ImageMagick 6.x,CDM 需要 7.x。

sudo apt-get install -y build-essential pkg-config \
  libjpeg-dev libpng-dev libtiff-dev libwebp-dev \
  libfreetype6-dev libfontconfig1-dev

cd /tmp
wget https://github.com/ImageMagick/ImageMagick/archive/refs/tags/7.1.1-47.tar.gz
tar xzf 7.1.1-47.tar.gz && cd ImageMagick-7.1.1-47
./configure --with-modules --enable-shared --with-gslib \
  --with-gs-font-dir=/usr/share/fonts/type1/gsfonts --prefix=/usr/local
make -j$(nproc) && sudo make install && sudo ldconfig
magick --version | head -2   # 预期: ImageMagick 7.1.1-47

# 允许 PDF 读写
POLICY_FILE=$(find /usr/local/etc/ImageMagick-7 -name policy.xml 2>/dev/null | head -1)
[ -n "$POLICY_FILE" ] && sudo sed -i \
  's|<policy domain="coder" rights="none" pattern="PDF" />|<policy domain="coder" rights="read\|write" pattern="PDF" />|' \
  "$POLICY_FILE"

第 5 步 — 验证并运行

python -m pytest tools/test_environment_and_smoke.py::TestEnvironmentVersions -v -s
python pdf_validation.py --config configs/end2end.yaml

验证版本

组件 版本
Python 3.10.x
TeX Live 2025
pdflatex 3.141592653-2.6-1.40.28
ImageMagick 7.1.1-47
Ghostscript 9.55.0

Worker 并发配置

评测流水线有三个并行阶段,建议每个阶段的 worker 数设为机器空闲线程数的 1/3 ~ 1/2,避免死锁或 OOM:

阶段 配置项 说明
页面匹配 match_workers 文本对齐
CDM 渲染 cdm_workers 每个 worker 约 1 GB 内存
TEDS 表格 teds_workers 表格结构相似度

运行评测

所有评测输入通过 configs/end2end.yaml 配置。修改 ground_truth.data_pathprediction.data_path 指向你的数据,然后运行:

python pdf_validation.py --config <config_path>

方式C:skills

 我需要用omnidocbench做xx模型的评测,用docker部署,GT路径是/path/OmniDocBench.json,预测结果路径是/path/predfolder,需要CDM,请帮我跑分

端到端评测

端到端评测是对模型在PDF页面内容解析上的精度作出的评测。以模型输出的对整个PDF页面解析结果的Markdown作为Prediction。Overall指标的计算方式为:

$$\text{Overall} = \frac{(1-\textit{Text Edit Distance}) \times 100 + \textit{Table TEDS} +\textit{Formula CDM}}{3}$$

Comprehensive evaluation of document parsing on OmniDocBench (v1.6_full)
Model Type Met

Core symbols most depended-on inside this repo

get
called by 537
src/core/registry.py
_emit
called by 68
src/metrics/cdm/modules/tokenize_latex/katex_renderer.py
extend
called by 47
src/metrics/cdm/modules/tokenize_latex/options.py
find_matching_brace
called by 30
src/metrics/cdm/modules/latex_processor.py
_safe_remove
called by 19
src/metrics/cdm/modules/latex2bbox_color.py
_build_group
called by 19
src/metrics/cdm/modules/tokenize_latex/katex_renderer.py
_macro_args
called by 16
src/metrics/cdm/modules/tokenize_latex/pylatexenc_to_katex.py
normalized_text
called by 15
src/core/preprocess/data_preprocess.py

Shape

Function 496
Method 229
Class 49

Languages

Python100%

Modules by API surface

src/dataset/end2end_dataset.py99 symbols
src/core/matching/match_quick.py49 symbols
src/metrics/cdm/modules/tokenize_latex/katex_renderer.py37 symbols
src/metrics/cal_metric.py32 symbols
src/core/preprocess/data_preprocess.py32 symbols
src/core/preprocess/extract.py29 symbols
src/core/matching/match.py27 symbols
src/metrics/cdm/modules/tokenize_latex/pylatexenc_to_katex.py25 symbols
src/core/preprocess/text_postprocess.py24 symbols
src/runtime/eval_report.py23 symbols
src/metrics/cdm/modules/texlive_env.py23 symbols
src/metrics/cdm/modules/latex2bbox_color.py22 symbols

Dependencies from manifests, versioned

Levenshtein0.25.1 · 1×
Pillow10.4.0 · 1×
PyYAML6.0.2 · 1×
apted1.0.3 · 1×
beautifulsoup44.11.1 · 1×
evaluate0.4.3 · 1×
func-timeout4.3.5 · 1×
loguru0.7.2 · 1×
lxml4.9.1 · 1×
matplotlib3.7.5 · 1×
nltk3.9.1 · 1×
numpy1.24.4 · 1×

For agents

$ claude mcp add OmniDocBench \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact