Skip to content

andyhuo520/ocr_benchmark

Repository files navigation

OCR Benchmark: GLM-OCR vs PaddleOCR-VL-1.5

基于 OmniDocBench 的 OCR 模型基准测试框架,对比评测 GLM-OCRPaddleOCR-VL-1.5 两款 0.9B 参数多模态模型在真实文档场景下的识别能力。

覆盖文本识别、表格解析、公式识别、版面检测、阅读顺序等多维度评测,支持一键运行推理、评测和报告生成。


评测结果(OmniDocBench Demo, 18 页)

评测指标 GLM-OCR (0.9B) PaddleOCR-VL-1.5 (0.9B)
综合得分 94.3 94.5
文本识别(Edit Distance) 96.1 96.5
表格识别(TEDS) 91.8 90.7
公式识别(CDM) 94.9 96.2

两款模型均为 0.9B 参数多模态模型,通过 Cloud API 进行推理。


核心特性

  • 多模型对比 — 在同一数据集上运行并对比不同 OCR 模型的表现
  • 全面评测 — 涵盖文本、公式、表格、版面检测、阅读顺序五大维度
  • 多维度分析 — 按文档类型、语言、版面复杂度分类统计
  • 自动化流水线 — 一条命令完成环境搭建、推理、评测和报告生成
  • 丰富的评测指标 — Edit Distance、TEDS、CDM、BLEU、METEOR、COCODet
  • 可视化报告 — 生成包含原图、识别结果和性能指标的 HTML 报告

系统架构

┌─────────────────────────────────────────────────────┐
│            run_benchmark.sh(主控脚本)               │
└──────────┬──────────────────┬───────────────────────┘
           │                  │
    ┌──────▼──────┐    ┌──────▼──────┐
    │  GLM-OCR    │    │ PaddleOCR   │
    │  Cloud API  │    │  Cloud API  │
    └──────┬──────┘    └──────┬──────┘
           │                  │
           └────────┬─────────┘
                    ▼
        predictions/*.md(Markdown 输出)
                    │
                    ▼
       ┌────────────────────────┐
       │   OmniDocBench 评测    │
       │  (pdf_validation.py)   │
       └────────────┬───────────┘
                    ▼
        results/eval_log.txt(评测指标)
                    │
                    ▼
       ┌────────────────────────┐
       │   generate_report.py   │
       │    (HTML 可视化报告)   │
       └────────────────────────┘

快速开始

1. 克隆仓库

git clone --recurse-submodules https://github.com/andyhuo520/ocr_benchmark.git
cd ocr_benchmark

如果已经克隆但未拉取子模块:

git submodule update --init --recursive

2. 搭建环境

bash run_benchmark.sh setup

此命令会自动创建 Python 虚拟环境并安装所有依赖。

3. 配置 API 密钥

# 复制示例配置文件
cp .env.example .env

# 编辑 .env 填入你的密钥,然后:
export ZHIPU_API_KEY=sk-xxx              # GLM-OCR(免费注册:https://open.bigmodel.cn)
export PADDLEOCR_API_TOKEN=your-token    # PaddleOCR(注册:https://aistudio.baidu.com)

4. 运行评测

# 运行两个模型(若无 GLM-OCR 密钥则自动跳过)
bash run_benchmark.sh both

# 或单独运行
bash run_benchmark.sh paddleocr    # 仅 PaddleOCR
bash run_benchmark.sh glmocr       # 仅 GLM-OCR(需要 ZHIPU_API_KEY)

# 仅重新评测已有的推理结果
bash run_benchmark.sh eval

项目结构

ocr_benchmark/
├── run_benchmark.sh              # 主控脚本:环境搭建、推理、评测、汇总
├── run_glmocr.py                 # GLM-OCR 批量推理(Cloud API)
├── run_paddleocr_api.py          # PaddleOCR-VL-1.5 异步批量推理(Cloud API)
├── run_paddle_model_compare.py   # 4 款 PaddleOCR 模型横向对比
├── generate_report.py            # HTML 可视化报告生成器
├── requirements.txt              # Python 依赖
├── configs_*.yaml                # OmniDocBench 评测配置文件
├── .env.example                  # API 密钥模板
│
├── OmniDocBench/                 # [子模块] 评测框架
│   ├── pdf_validation.py         #   评测入口
│   ├── metrics/                  #   TEDS、CDM、Edit Distance 实现
│   ├── demo_data/                #   18 页测试数据集(6 类文档)
│   │   └── omnidocbench_demo/
│   │       ├── images/           #     测试图片(JPG/PNG)
│   │       ├── mds/              #     真值 Markdown 文件
│   │       └── OmniDocBench_demo.json  # 标注数据
│   └── ...
│
├── predictions/                  # [运行生成] 模型输出的 Markdown 文件
│   ├── glmocr/
│   ├── paddleocr_api/
│   └── model_compare/
│
└── results/                      # [运行生成] 评测结果
    ├── glmocr/eval_log.txt
    ├── paddleocr_api/eval_log.txt
    └── benchmark_summary.json

详细使用指南

单独运行各模型

GLM-OCR

GLM-OCR 是智谱 AI 推出的 0.9B 多模态 OCR 模型。

# 激活虚拟环境
source .venv/bin/activate

# 运行推理
export ZHIPU_API_KEY=sk-xxx
python run_glmocr.py OmniDocBench/demo_data/omnidocbench_demo/images predictions/glmocr

# 也可以通过参数传递密钥
python run_glmocr.py OmniDocBench/demo_data/omnidocbench_demo/images predictions/glmocr --api-key sk-xxx

PaddleOCR-VL-1.5

PaddleOCR-VL-1.5 是百度推出的 0.9B 视觉语言模型,通过异步任务接口调用。

source .venv/bin/activate
export PADDLEOCR_API_TOKEN=your-token
python run_paddleocr_api.py OmniDocBench/demo_data/omnidocbench_demo/images predictions/paddleocr_api

4 款 PaddleOCR 模型横向对比

同时运行 PaddleOCR-VL-1.5、PaddleOCR-VL、PP-OCRv5、PP-StructureV3 四款模型,在 3 张代表性测试图上进行并发对比:

source .venv/bin/activate
export PADDLEOCR_API_TOKEN=your-token
python run_paddle_model_compare.py

对比报告保存至 predictions/model_compare/comparison_report.md

仅运行评测(不重新推理)

如果已有推理结果,可以跳过推理步骤直接评测:

bash run_benchmark.sh eval

或手动执行:

cd OmniDocBench
python pdf_validation.py --config ../configs_glmocr.yaml
python pdf_validation.py --config ../configs_paddleocr_api.yaml

生成 HTML 可视化报告

python generate_report.py > report.html
open report.html  # macOS

报告包含:

  • 两模型逐页对比结果
  • 按文档类型的性能分布
  • 嵌入原始测试图片与 OCR 输出
  • API 响应耗时分析

评测指标说明

指标 说明 适用场景
Edit Distance 归一化字符级编辑距离 文本识别、阅读顺序
TEDS 树编辑距离相似度 — 对比 HTML 表格的结构一致性 表格识别
CDM 字符扭曲度量 — 对比 LaTeX 公式的渲染相似度 公式识别
BLEU / METEOR 基于 N-gram 的文本相似度指标 文本质量
COCODet COCO 风格检测指标(mAP) 版面检测

测试数据集构成

OmniDocBench Demo 数据集包含 18 页文档,覆盖 6 种文档类型:

文档类型 页数 语言 主要挑战
中文电子书 4 中文 密集文本、复杂排版
学术论文 2 英文 数学公式、多栏排版
教材 4 英文/中英混排 公式、图表
报纸 2 中文 多栏排版、小字体
手写笔记 2 中文 手写体识别
PPT / 研报 4 中文/混排 表格、图表、混合排版

评测配置

评测通过 YAML 文件配置。示例(configs_paddleocr_api.yaml):

end2end_eval:
  metrics:
    text_block:
      metric:
        - Edit_dist
    display_formula:
      metric:
        - Edit_dist
        - CDM_plain
    table:
      metric:
        - TEDS
        - Edit_dist
    reading_order:
      metric:
        - Edit_dist
  dataset:
    dataset_name: md2md_dataset
    ground_truth:
      data_path: 真值Markdown目录路径
      page_info: OmniDocBench_demo.json路径
    prediction:
      data_path: 模型预测输出目录路径
    match_method: quick_match

如何添加新模型

想要评测一个新的 OCR 模型?只需三步:

第一步:编写推理脚本

创建推理脚本(如 run_your_model.py),要求:

  • 从指定目录读取图片
  • 每张图片输出一个 .md 文件到预测目录
  • Markdown 中应保留文档结构(标题层级、HTML 表格、LaTeX 公式)

第二步:创建评测配置

新建 configs_your_model.yaml

end2end_eval:
  metrics:
    text_block:
      metric: [Edit_dist]
    display_formula:
      metric: [Edit_dist, CDM_plain]
    table:
      metric: [TEDS, Edit_dist]
  dataset:
    dataset_name: md2md_dataset
    ground_truth:
      data_path: OmniDocBench/demo_data/omnidocbench_demo/mds
      page_info: OmniDocBench/demo_data/omnidocbench_demo/OmniDocBench_demo.json
    prediction:
      data_path: predictions/your_model
    match_method: quick_match

第三步:运行评测

cd OmniDocBench
python pdf_validation.py --config ../configs_your_model.yaml

API 密钥获取指南

GLM-OCR(智谱 AI)

  1. 访问 open.bigmodel.cn
  2. 免费注册账号
  3. 进入「API 密钥」页面
  4. 创建新密钥(格式:sk-xxx
  5. 配置环境变量:export ZHIPU_API_KEY=sk-xxx

PaddleOCR(百度 AIStudio)

  1. 访问 aistudio.baidu.com
  2. 注册账号
  3. 开通 PaddleOCR API 服务
  4. 获取 API Token
  5. 配置环境变量:export PADDLEOCR_API_TOKEN=your-token

环境依赖

核心依赖(完整列表见 requirements.txt):

  • Python >= 3.10
  • glmocr — GLM-OCR 客户端库
  • requests — PaddleOCR API HTTP 客户端
  • numpyscipysympy — 数值计算
  • opencv-pythonPillowscikit-image — 图像处理
  • Levenshtein — 编辑距离计算
  • beautifulsoup4lxml — HTML/XML 解析(表格指标计算)
  • PyYAML — 配置文件解析
  • pandastabulaterich — 结果格式化输出

已知限制

  • 两款模型均使用 Cloud API — 结果受网络延迟和 API 可用性影响
  • Demo 数据集仅 18 页;完整评测建议使用 OmniDocBench 全集(1355 页)
  • 报纸等多栏排版文档对两款模型仍具挑战性(错误率约 50%)
  • PaddleOCR API 存在请求频率限制,脚本通过轮询间隔自动处理

参考资料


许可证

本项目仅用于研究与学习目的。OmniDocBench 子模块有独立的许可证,详见 OmniDocBench/LICENSE

About

OCR Benchmark: GLM-OCR vs PaddleOCR-VL-1.5 on OmniDocBench — comprehensive evaluation across text, tables, formulas, and handwriting

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages