RapidDoc 是一个轻量级、专注于文档解析的开源框架,支持 OCR、版面分析、公式识别、表格识别和阅读顺序恢复 等多种功能,支持将复杂 PDF 文档转换为 Markdown、JSON、WORD、HTML 格式。
支持docx/doc、pptx/ppt、xlsx/xls的原生解析(不使用模型)。
框架基于 Mineru 二次开发,移除 VLM,专注于 Pipeline 产线下的高效文档解析,在 CPU 上也能保持不错的解析速度。
本项目所使用的默认模型主要来源于 PaddleOCR 的 PP-StructureV3 系列(OCR、版面分析、公式识别、阅读顺序恢复,以及部分表格识别模型),并已全部转换为 ONNX 格式,支持在 CPU/GPU 上高效推理。
同时支持自定义OCR、公式、表格模型,需实现 CustomBaseModel 的 batch_predict 方法,目前内置 PaddleOCRVL 系列模型的集成。
KittyDoc 已经成为 RapidAI 开源家族成员
✨如果该项目对您有帮助,您的star是我不断优化的动力!!!
-
OCR 识别
- 使用 RapidOCR 支持多种推理引擎
- CPU 下默认使用 OpenVINO(速度快,内存占用较高),GPU 下默认使用 torch
-
版面识别
- 模型使用
PP-DocLayout系列 ONNX 模型(v2、plus-L、L、M、S)- PP-DocLayoutV3:自带阅读顺序,支持异形框,默认使用
- PP-DocLayoutV2:自带阅读顺序
- PP-DocLayout_plus-L:效果好运行稳定
- PP-DocLayout-L:速度快,效果也不错
- PP-DocLayout-S:速度极快,存在部分漏检
- 模型使用
-
公式识别
- 使用
PP-FormulaNet_plus系列 ONNX 模型(L、M、S)- PP-FormulaNet_plus-L:速度慢,支持onnx
- PP-FormulaNet_plus-M:默认使用,支持onnx和torch
- PP-FormulaNet_plus-S:速度最快,支持onnx,复杂公式精度不够
- 支持配置只识别行间公式
- cuda环境,默认使用torch推理,公式模型onnx gpu推理会报错,暂时无人解决 PaddleOCR/issues/15125, PaddleX/issues/4238, Paddle2ONNX/issues/1593
- 使用
-
表格识别
- 基于 rapid_table_self 增强,在原有基础上增强为多模型串联方案:
- 表格分类(区分有线/无线表格)
- 有线表格识别UNET + SLANET_plus/UNITABLE(作为无线表格识别)
- 基于 rapid_table_self 增强,在原有基础上增强为多模型串联方案:
-
阅读顺序恢复
- PP-DocLayoutV2和PP-DocLayoutV3使用版面模型自带的阅读顺序
- 其余版面模型,使用 PP-StructureV3 阅读顺序恢复算法,基于xycut算法和版面的结果
-
推理方式
- 所有模型通过 ONNXRuntime 推理,OCR可配置其他推理引擎
- 除了 OCR 和 PP-DocLayout-M/S 模型,OpenVINO推理会报错,暂时难以解决。PaddleOCR/issues/16277
以下是RapidDoc在 OmniDocBench v1.6 上的评估结果。
Pipeline 模型使用 PP-DocLayoutV3、PP-OCRv6-small、PP-FormulaNet_plus-M、UNET_SLANET_PLUS。
| Model Type | Methods | Size | Overall↑ | TextEdit↓ | FormulaCDM↑ | TableTEDS↑ | TableTEDS-S↑ | Read OrderEdit↓ |
|---|---|---|---|---|---|---|---|---|
| MinerU2.5-Pro | Specialized VLMs | 1.2B | 95.75 | 0.036 | 97.45 | 93.42 | 95.92 | 0.120 |
| GLM-OCR | Specialized VLMs | 0.9B | 95.22 | 0.044 | 97.18 | 92.83 | 95.39 | 0.133 |
| PaddleOCR-VL-1.5 | Specialized VLMs | 0.9B | 94.93 | 0.038 | 96.89 | 91.67 | 94.37 | 0.130 |
| PaddleOCR-VL | Specialized VLMs | 0.9B | 94.18 | 0.040 | 95.91 | 90.65 | 93.74 | 0.135 |
| Youtu-Parsing | Specialized VLMs | 2.5B | 93.74 | 0.044 | 93.63 | 92.02 | 95.00 | 0.116 |
| Qianfan-OCR | Specialized VLMs | 4B | 93.90 | 0.04 | 95.08 | 90.53 | 93.31 | 0.13 |
| Ovis2.6-30B-A3B | General VLMs | 30B | 93.70 | 0.035 | 95.17 | 89.44 | 92.40 | 0.135 |
| Logics-Parsing-v2 | Specialized VLMs | 4B | 93.33 | 0.041 | 95.65 | 88.42 | 91.98 | 0.137 |
| ABot-OCR | Specialized VLMs | 2B | 93.30 | 0.037 | 94.86 | 88.69 | 91.87 | 0.137 |
| FireRed-OCR | Specialized VLMs | 2B | 93.26 | 0.037 | 95.44 | 88.04 | 91.06 | 0.131 |
| MinerU-2.5 | Specialized VLMs | 1.2B | 93.04 | 0.045 | 95.77 | 87.88 | 91.47 | 0.130 |
| Gemini 3 Pro | General VLMs | - | 92.91 | 0.064 | 95.99 | 89.15 | 92.96 | 0.165 |
| Gemini 3 Flash | General VLMs | - | 92.62 | 0.066 | 95.16 | 89.29 | 93.51 | 0.172 |
| dots.ocr | Specialized VLMs | 3B | 90.77 | 0.048 | 89.95 | 87.18 | 90.58 | 0.138 |
| OpenDoc-0.1B | Specialized VLMs | 0.1B | 90.67 | 0.049 | 93.02 | 83.88 | 87.45 | 0.140 |
| DeepSeek-OCR 2 | Specialized VLMs | 3B | 90.25 | 0.050 | 91.84 | 83.89 | 87.75 | 0.144 |
| RapidDoc | Pipeline Tools | - | 90.157 | 0.047 | 93.777 | 81.394 | 88.402 | 0.136 |
| HunyuanOCR | Specialized VLMs | 1B | 89.95 | 0.088 | 87.68 | 91.01 | 93.23 | 0.171 |
| Qwen3-VL-235B | General VLMs | 235B | 89.78 | 0.063 | 92.55 | 83.07 | 86.75 | 0.166 |
| Dolphin-v2 | Specialized VLMs | 3B | 89.50 | 0.069 | 91.01 | 84.40 | 87.44 | 0.150 |
| OCRVerse | Specialized VLMs | 4B | 88.60 | 0.063 | 89.61 | 82.44 | 86.27 | 0.163 |
| MonkeyOCR-pro-3B | Specialized VLMs | 3B | 88.57 | 0.074 | 88.74 | 84.35 | 88.62 | 0.189 |
| GPT-5.2 | General VLMs | - | 86.59 | 0.114 | 88.21 | 82.95 | 87.93 | 0.193 |
| Dolphin-1.5 | Specialized VLMs | 0.3B | 86.52 | 0.094 | 87.49 | 81.43 | 84.82 | 0.167 |
| MinerU-Pipeline | Pipeline Tools | - | 86.47 | 0.055 | 83.07 | 81.88 | 88.68 | 0.153 |
| olmOCR | Specialized VLMs | 7B | 85.74 | 0.139 | 88.10 | 83.00 | 87.17 | 0.216 |
| Mistral OCR | Specialized VLMs | - | 85.66 | 0.097 | 89.91 | 76.78 | 80.93 | 0.171 |
| Kimi K2.5 | General VLMs | 1T | 84.53 | 0.107 | 83.50 | 80.76 | 84.00 | 0.211 |
| InternVL3.5-241B | General VLMs | 241B | 83.76 | 0.130 | 89.95 | 74.35 | 79.78 | 0.215 |
| Nanonets-OCR-s | Specialized VLMs | 3B | 83.61 | 0.108 | 81.46 | 80.18 | 84.51 | 0.213 |
| POINTS-Reader | Specialized VLMs | 3B | 83.37 | 0.096 | 85.72 | 73.98 | 77.40 | 0.198 |
| Marker | Pipeline Tools | - | 78.44 | 0.157 | 85.24 | 65.77 | 73.24 | 0.243 |
pip install rapid-doc[cpu] -i https://mirrors.aliyun.com/pypi/simple
或
pip install rapid-doc[gpu] -i https://mirrors.aliyun.com/pypi/simple# 克隆仓库
git clone https://github.com/RapidAI/RapidDoc.git
cd RapidDoc
# 安装依赖
pip install -e .[cpu] -i https://mirrors.aliyun.com/pypi/simple
或
pip install -e .[gpu] -i https://mirrors.aliyun.com/pypi/simple# rapid-doc[gpu] 默认安装 onnxruntime-gpu 最新版
# 需要确定onnxruntime-gpu与GPU对应,参考 https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#requirements
# 在 Python 中指定 GPU(必须在导入 rapid_doc 之前设置)
import os
# 使用默认 GPU(cuda:0)
os.environ['MINERU_DEVICE_MODE'] = "cuda"
# 或指定 GPU 编号,例如使用第二块 GPU(cuda:1)
os.environ['MINERU_DEVICE_MODE'] = "cuda:1"vl模型的部署,参考官方文档
import os
os.environ['PADDLEOCRVL_VERSION'] = "v1.6"
os.environ['PADDLEOCRVL_VL_REC_BACKEND'] = "vllm-server"
os.environ['PADDLEOCRVL_VL_VL_REC_SERVER_URL'] = "http://localhost:8118/v1"
from rapid_doc.model.layout.rapid_layout_self import ModelType as LayoutModelType
from rapid_doc.model.custom.paddleocr_vl.paddleocr_vl import PaddleOCRVLTableModel, PaddleOCRVLOCRModel, PaddleOCRVLFormulaModel
layout_config = {
"model_type": LayoutModelType.PP_DOCLAYOUTV3,
}
ocr_config = {
"custom_model": PaddleOCRVLOCRModel()
}
formula_config = {
"custom_model": PaddleOCRVLFormulaModel()
}
table_config = {
"custom_model": PaddleOCRVLTableModel()
}RapidDoc提供了便捷的docker部署方式,这有助于快速搭建环境并解决一些棘手的环境兼容问题。
您可以在文档中获取 Docker部署说明,镜像已推送至 Docker Hub。
import os
from pathlib import Path
from rapid_doc import RapidDoc
__dir__ = Path(__file__).resolve().parent.parent
output_dir = os.path.join(__dir__, "output")
doc_path_list = [
__dir__ / "demo/pdfs/示例1-论文模板.pdf",
__dir__ / "demo/docx/test.docx",
]
engine = RapidDoc()
outputs = engine(doc_path_list, output_dir=output_dir)
for output in outputs:
print(output.markdown)基于gradio开发的webui,界面简洁,仅包含核心解析功能,免登录
不指定模型路径,初次运行时,会自动下载
- 跨页表格合并
- 复选框识别,使用opencv(默认关闭、opencv识别存在误检)
- 提供 fastapi,支持cpu和gpu版本的docker镜像构建
- 文本型pdf,表格非OCR文本提取
- 文本型pdf,使用pypdfium2提取文本框bbox
- 文本型pdf,支持0/90/270度三个方向的表格解析
- 文本型pdf,使用pypdfium2提取原始图片(默认截图会导致清晰度降低和图片边界可能丢失部分)
- 表格内公式提取,表格内图片提取
- 优化阅读顺序,支持多栏、竖排等复杂版面恢复
- 公式支持torch推理,可用GPU加速
- 版面、表格模型支持openvino
- markdown转docx、html
- 支持 PP-DocLayoutV2 版面识别+阅读顺序
- OmniDocBench评测
- 支持自定义的ocr、table、公式。支持PaddleOCR-VL系列
- 支持docx/doc、pptx/ppt、xlsx/xls的原生解析(不使用模型)
- 支持印章文本检测
- 文档方向90°、270°矫正(默认关闭),表格方向90°、270°矫正(默认开启)
基于 MinerU 改造而来,已移除原项目中的 YOLO 模型,并替换为 PP-StructureV3 系列 ONNX 模型。
由于已移除 AGPL 授权的 YOLO 模型部分,本项目整体不再受 AGPL 约束。
该项目采用 Apache 2.0 license 开源许可证。