基于 OmniDocBench 的 OCR 模型基准测试框架,对比评测 GLM-OCR 和 PaddleOCR-VL-1.5 两款 0.9B 参数多模态模型在真实文档场景下的识别能力。
覆盖文本识别、表格解析、公式识别、版面检测、阅读顺序等多维度评测,支持一键运行推理、评测和报告生成。
| 评测指标 | 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 可视化报告) │
└────────────────────────┘
git clone --recurse-submodules https://github.com/andyhuo520/ocr_benchmark.git
cd ocr_benchmark如果已经克隆但未拉取子模块:
git submodule update --init --recursivebash run_benchmark.sh setup此命令会自动创建 Python 虚拟环境并安装所有依赖。
# 复制示例配置文件
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)# 运行两个模型(若无 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 evalocr_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 是智谱 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-xxxPaddleOCR-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同时运行 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.yamlpython 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_matchcd OmniDocBench
python pdf_validation.py --config ../configs_your_model.yaml- 访问 open.bigmodel.cn
- 免费注册账号
- 进入「API 密钥」页面
- 创建新密钥(格式:
sk-xxx) - 配置环境变量:
export ZHIPU_API_KEY=sk-xxx
- 访问 aistudio.baidu.com
- 注册账号
- 开通 PaddleOCR API 服务
- 获取 API Token
- 配置环境变量:
export PADDLEOCR_API_TOKEN=your-token
核心依赖(完整列表见 requirements.txt):
- Python >= 3.10
- glmocr — GLM-OCR 客户端库
- requests — PaddleOCR API HTTP 客户端
- numpy、scipy、sympy — 数值计算
- opencv-python、Pillow、scikit-image — 图像处理
- Levenshtein — 编辑距离计算
- beautifulsoup4、lxml — HTML/XML 解析(表格指标计算)
- PyYAML — 配置文件解析
- pandas、tabulate、rich — 结果格式化输出
- 两款模型均使用 Cloud API — 结果受网络延迟和 API 可用性影响
- Demo 数据集仅 18 页;完整评测建议使用 OmniDocBench 全集(1355 页)
- 报纸等多栏排版文档对两款模型仍具挑战性(错误率约 50%)
- PaddleOCR API 存在请求频率限制,脚本通过轮询间隔自动处理
- OmniDocBench — 文档解析评测基准
- GLM-OCR — 智谱 AI 多模态 OCR 模型
- PaddleOCR — 百度 OCR 工具集
- TEDS 指标 — 表格评测的树编辑距离算法
- CDM 指标 — 公式评测的字符扭曲度量
本项目仅用于研究与学习目的。OmniDocBench 子模块有独立的许可证,详见 OmniDocBench/LICENSE。