PaddleOCR 与 MinerU:一个认字,一个还原整份文档
一句话总结:这两个工具根本不在同一层。PaddleOCR 是"眼睛"——检测文字框 + 识别字符,输出「文字 + 坐标」;MinerU 是"整条流水线"——版面分析、表格还原、公式转 LaTeX、阅读顺序重排,直接输出 Markdown/JSON。最能说明问题的一个事实是:MinerU 的 pipeline 后端,底层用的就是 PaddleOCR 的 PP-OCR 模型。 它不是竞品,是上下游。要"读出字"选 PaddleOCR,要"读懂整页"选 MinerU。
📋 目录
一、先纠一个常见误解:它们不是竞品
很多人把这两个放在一起问"哪个更好",但它们解决的问题根本不同:
| PaddleOCR | 图片里有哪些字、在哪 | 打字员:把纸上每个字敲出来 |
| MinerU | 这一页是什么结构、按什么顺序读 | 编辑:先框出标题/正文/表格,再决定怎么排 |
为什么这个区分重要?
因为**"识别准确"和"结构正确"是两件事**:
PDF 原文(双栏论文):
┌─────────────┬─────────────┐
│ 左栏正文 A │ 右栏正文 B │
│ [表 1] │ 公式 (3) │
└─────────────┴─────────────┘
纯 OCR 的输出(按行扫):
A 的第一行 + B 的第一行 + A 的第二行 + B 的第二行 … ❌ 全乱了
结构化解析的输出:
## 标题
A 的完整段落…
B 的完整段落…
| 表格内容 |
$$ 公式 $$
✅ 顺序正确
PaddleOCR 给你的是"字",MinerU 给你的是"读得懂的文档"。
二、PaddleOCR:解决"字长什么样"
2.1 它是什么
百度飞桨团队的通用 OCR 工具库,Apache 2.0 协议,是中文 OCR 事实上的开源标杆。
核心流程四步:图像预处理 → 文本检测(找出文字框)→ 方向分类(判断横竖/旋转)→ 文本识别(转成 Unicode)。
2.2 现在的 3.x 有三条产品线
注意:3.x 与 2.x 不向后兼容,老代码会直接报错。
| PP-OCRv6 | 纯文字识别 | 文字 + 坐标 + 置信度 |
| PP-StructureV3 | 版面 + 表格 + 公式 | Markdown / JSON(含精细坐标) |
| PaddleOCR-VL | 0.9B 视觉语言模型 | 结构化 Markdown / JSON |
PP-OCRv6(2026-06 随 PaddleOCR 3.7 发布)的几个关键数字:
- 三个档位:tiny 1.5M / small 7.7M / medium 34.5M 参数
- 一个识别模型覆盖 50 种语言(中、英、日 + 46 种拉丁语系)
- 相比 PP-OCRv5_server:检测精度 +4.6%,识别精度 +5.1%
- CPU 推理提速 5.2 倍
💡 这就是它最不可替代的地方:小、快、CPU 就能跑、中文强。
2.3 怎么用
pip install paddlepaddle paddleocr
from paddleocr import PaddleOCR
ocr = PaddleOCR(lang="ch", ocr_version="PP-OCRv6")
result = ocr.predict("invoice.png") # 返回文字 + 坐标 + 置信度
命令行也行:
paddleocr ocr -i invoice.png –save_path ./output
2.4 强在哪、弱在哪
| 轻量:mobile 档位几 MB,边缘设备能跑 | 不管结构:输出的是一堆文本框,不是段落 |
| 快:实时视频流、批量票据都扛得住 | 公式不认:需要另外集成方案 |
| 中文识别强:印刷体 + 常见手写体 | 表格弱:跨页、合并单元格会退化成拼接文本 |
| 多语言:100+ 语言 | 无阅读顺序:双栏排版会乱 |
三、MinerU:解决"文档长什么样"
3.1 它是什么
上海人工智能实验室 OpenDataLab 出品的一站式文档解析引擎,2024 年 7 月开源,GitHub 已 8 万+ star。
目标很明确:把 PDF、图片、Word、PPT、Excel 转成干净、LLM-Ready 的 Markdown / JSON。
3.2 五步流程
#mermaid-svg-CjzMlnGD1w3wocw5{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-CjzMlnGD1w3wocw5 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-CjzMlnGD1w3wocw5 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-CjzMlnGD1w3wocw5 .error-icon{fill:#552222;}#mermaid-svg-CjzMlnGD1w3wocw5 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-CjzMlnGD1w3wocw5 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-CjzMlnGD1w3wocw5 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-CjzMlnGD1w3wocw5 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-CjzMlnGD1w3wocw5 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-CjzMlnGD1w3wocw5 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-CjzMlnGD1w3wocw5 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-CjzMlnGD1w3wocw5 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-CjzMlnGD1w3wocw5 .marker.cross{stroke:#333333;}#mermaid-svg-CjzMlnGD1w3wocw5 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-CjzMlnGD1w3wocw5 p{margin:0;}#mermaid-svg-CjzMlnGD1w3wocw5 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-CjzMlnGD1w3wocw5 .cluster-label text{fill:#333;}#mermaid-svg-CjzMlnGD1w3wocw5 .cluster-label span{color:#333;}#mermaid-svg-CjzMlnGD1w3wocw5 .cluster-label span p{background-color:transparent;}#mermaid-svg-CjzMlnGD1w3wocw5 .label text,#mermaid-svg-CjzMlnGD1w3wocw5 span{fill:#333;color:#333;}#mermaid-svg-CjzMlnGD1w3wocw5 .node rect,#mermaid-svg-CjzMlnGD1w3wocw5 .node circle,#mermaid-svg-CjzMlnGD1w3wocw5 .node ellipse,#mermaid-svg-CjzMlnGD1w3wocw5 .node polygon,#mermaid-svg-CjzMlnGD1w3wocw5 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-CjzMlnGD1w3wocw5 .rough-node .label text,#mermaid-svg-CjzMlnGD1w3wocw5 .node .label text,#mermaid-svg-CjzMlnGD1w3wocw5 .image-shape .label,#mermaid-svg-CjzMlnGD1w3wocw5 .icon-shape .label{text-anchor:middle;}#mermaid-svg-CjzMlnGD1w3wocw5 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-CjzMlnGD1w3wocw5 .rough-node .label,#mermaid-svg-CjzMlnGD1w3wocw5 .node .label,#mermaid-svg-CjzMlnGD1w3wocw5 .image-shape .label,#mermaid-svg-CjzMlnGD1w3wocw5 .icon-shape .label{text-align:center;}#mermaid-svg-CjzMlnGD1w3wocw5 .node.clickable{cursor:pointer;}#mermaid-svg-CjzMlnGD1w3wocw5 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-CjzMlnGD1w3wocw5 .arrowheadPath{fill:#333333;}#mermaid-svg-CjzMlnGD1w3wocw5 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-CjzMlnGD1w3wocw5 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-CjzMlnGD1w3wocw5 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-CjzMlnGD1w3wocw5 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-CjzMlnGD1w3wocw5 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-CjzMlnGD1w3wocw5 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-CjzMlnGD1w3wocw5 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-CjzMlnGD1w3wocw5 .cluster text{fill:#333;}#mermaid-svg-CjzMlnGD1w3wocw5 .cluster span{color:#333;}#mermaid-svg-CjzMlnGD1w3wocw5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-CjzMlnGD1w3wocw5 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-CjzMlnGD1w3wocw5 rect.text{fill:none;stroke-width:0;}#mermaid-svg-CjzMlnGD1w3wocw5 .icon-shape,#mermaid-svg-CjzMlnGD1w3wocw5 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-CjzMlnGD1w3wocw5 .icon-shape p,#mermaid-svg-CjzMlnGD1w3wocw5 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-CjzMlnGD1w3wocw5 .icon-shape .label rect,#mermaid-svg-CjzMlnGD1w3wocw5 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-CjzMlnGD1w3wocw5 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-CjzMlnGD1w3wocw5 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-CjzMlnGD1w3wocw5 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
① 输入预处理区分原生文本/扫描件
② 版面分析框出标题/正文/表格/公式
③ 内容识别OCR/表格/公式/VLM 各司其职
④ 结构化还原拼接 + 阅读顺序 + 跨页合并
⑤ 格式输出Markdown / JSON / HTML
它真正解决的是第 ②④ 步——这两步恰恰是纯 OCR 完全做不了的。
3.3 三种推理后端(这是它最实用的设计)
| pipeline | 小模型级联,无幻觉,CPU 可跑 | 常规文档、纯文本、批量处理 |
| vlm | 视觉大模型,精度最高 | 复杂排版、低质量扫描件 |
| hybrid | 原生文本提取 + VLM 增强 | 兼顾精度与低幻觉 |
💡 选后端的经验:先跑 pipeline,不够再上 vlm。 pipeline 的"无幻觉"在小模型里非常难得——它不会给你编造不存在的表格内容。
3.4 怎么用
pip install -U "mineru[all]"
# 最简:pipeline 后端,CPU 也能跑
mineru -p input.pdf -o ./output -b pipeline
Python 3.10–3.13。
3.5 强在哪、弱在哪
| 复杂版面:双栏/多栏、跨页表格、页眉页脚自动过滤 | 重:多模型,磁盘占用 GB 级 |
| 公式转 LaTeX、表格转 HTML | 慢:CPU 上一页十几秒,GPU 也要 2–5 秒 |
| 原生解析 DOCX/PPTX/XLSX(3.x 新增,不用先转 PDF) | 手写较弱:底层 OCR 词表有限,生僻字易失败 |
| 109 种语言、竖排文本、印章识别 | 古籍识别差(第三方评价),历史文献要先试样 |
| 全私有化部署,适配 10+ 国产芯片 | API 还在演进,跨版本升级需注意 |
四、一张表对比
| 定位 | 通用 OCR 工具库 | 一站式文档解析引擎 |
| 核心能力 | 检测 + 识别 + 方向分类 | 版面 + OCR + 表格 + 公式 + 排版还原 |
| 输出 | 文字 + 坐标 + 置信度 | Markdown / JSON(含完整结构) |
| 复杂排版 | ❌ 弱,需二次开发 | ✅ 强,原生支持多栏/跨页 |
| 公式 | ❌ 无 | ✅ 内置,直出 LaTeX |
| 表格 | ⚠️ 基础 | ✅ 跨页合并、单元格还原 |
| 资源 | 极轻,纯 CPU 流畅 | pipeline 约 4G 显存,VLM 约 8G |
| 速度 | 毫秒~百毫秒级 | 秒/页级 |
| 典型场景 | 票据、证件、车牌、实时检测 | 论文、财报、技术手册、RAG 预处理 |
| 协议 | Apache 2.0 | MinerU 许可证(基于 Apache 2.0 + 附加条款) |
五、一个决定性事实:MinerU 内部就在用 PaddleOCR
这是理解两者关系的关键。
MinerU 的 pipeline 后端,底层 OCR 用的就是 PaddleOCR 的 PP-OCRv5 / PP-OCRv6 模型。3.4 版本升级到 PP-OCRv6 后,官方口径是 OCR 精度提升约 11%,速度翻倍。
所以真实的分工是:
#mermaid-svg-QJ28RDTTgf3JETZA{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-QJ28RDTTgf3JETZA .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-QJ28RDTTgf3JETZA .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-QJ28RDTTgf3JETZA .error-icon{fill:#552222;}#mermaid-svg-QJ28RDTTgf3JETZA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QJ28RDTTgf3JETZA .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-QJ28RDTTgf3JETZA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QJ28RDTTgf3JETZA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QJ28RDTTgf3JETZA .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-QJ28RDTTgf3JETZA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QJ28RDTTgf3JETZA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QJ28RDTTgf3JETZA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QJ28RDTTgf3JETZA .marker.cross{stroke:#333333;}#mermaid-svg-QJ28RDTTgf3JETZA svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QJ28RDTTgf3JETZA p{margin:0;}#mermaid-svg-QJ28RDTTgf3JETZA .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-QJ28RDTTgf3JETZA .cluster-label text{fill:#333;}#mermaid-svg-QJ28RDTTgf3JETZA .cluster-label span{color:#333;}#mermaid-svg-QJ28RDTTgf3JETZA .cluster-label span p{background-color:transparent;}#mermaid-svg-QJ28RDTTgf3JETZA .label text,#mermaid-svg-QJ28RDTTgf3JETZA span{fill:#333;color:#333;}#mermaid-svg-QJ28RDTTgf3JETZA .node rect,#mermaid-svg-QJ28RDTTgf3JETZA .node circle,#mermaid-svg-QJ28RDTTgf3JETZA .node ellipse,#mermaid-svg-QJ28RDTTgf3JETZA .node polygon,#mermaid-svg-QJ28RDTTgf3JETZA .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-QJ28RDTTgf3JETZA .rough-node .label text,#mermaid-svg-QJ28RDTTgf3JETZA .node .label text,#mermaid-svg-QJ28RDTTgf3JETZA .image-shape .label,#mermaid-svg-QJ28RDTTgf3JETZA .icon-shape .label{text-anchor:middle;}#mermaid-svg-QJ28RDTTgf3JETZA .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-QJ28RDTTgf3JETZA .rough-node .label,#mermaid-svg-QJ28RDTTgf3JETZA .node .label,#mermaid-svg-QJ28RDTTgf3JETZA .image-shape .label,#mermaid-svg-QJ28RDTTgf3JETZA .icon-shape .label{text-align:center;}#mermaid-svg-QJ28RDTTgf3JETZA .node.clickable{cursor:pointer;}#mermaid-svg-QJ28RDTTgf3JETZA .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-QJ28RDTTgf3JETZA .arrowheadPath{fill:#333333;}#mermaid-svg-QJ28RDTTgf3JETZA .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-QJ28RDTTgf3JETZA .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-QJ28RDTTgf3JETZA .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QJ28RDTTgf3JETZA .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-QJ28RDTTgf3JETZA .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QJ28RDTTgf3JETZA .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-QJ28RDTTgf3JETZA .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-QJ28RDTTgf3JETZA .cluster text{fill:#333;}#mermaid-svg-QJ28RDTTgf3JETZA .cluster span{color:#333;}#mermaid-svg-QJ28RDTTgf3JETZA div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-QJ28RDTTgf3JETZA .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-QJ28RDTTgf3JETZA rect.text{fill:none;stroke-width:0;}#mermaid-svg-QJ28RDTTgf3JETZA .icon-shape,#mermaid-svg-QJ28RDTTgf3JETZA .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QJ28RDTTgf3JETZA .icon-shape p,#mermaid-svg-QJ28RDTTgf3JETZA .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-QJ28RDTTgf3JETZA .icon-shape .label rect,#mermaid-svg-QJ28RDTTgf3JETZA .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QJ28RDTTgf3JETZA .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-QJ28RDTTgf3JETZA .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-QJ28RDTTgf3JETZA :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
PaddleOCR(打字员)
MinerU(编辑)
版面分析这里是标题/正文/表格
阅读顺序先读哪、后读哪
跨页合并 / 公式 / 表格结构
检测文字框
识别每个框里的字
Markdown / JSON
| 怎么读才是对的 | MinerU |
| 字到底长什么样 | PaddleOCR |
🎯 一句话:MinerU 决定"读哪里、按什么顺序读",PaddleOCR 负责"把那个框里的字认出来"。
这也解释了为什么 MinerU 支持把底层 OCR 引擎换成 PaddleOCR——因为它本来就是这么设计的。
六、怎么选:决策树 + 组合用法
#mermaid-svg-7FRL2mUgqapFgzg7{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-7FRL2mUgqapFgzg7 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-7FRL2mUgqapFgzg7 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-7FRL2mUgqapFgzg7 .error-icon{fill:#552222;}#mermaid-svg-7FRL2mUgqapFgzg7 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-7FRL2mUgqapFgzg7 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-7FRL2mUgqapFgzg7 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-7FRL2mUgqapFgzg7 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-7FRL2mUgqapFgzg7 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-7FRL2mUgqapFgzg7 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-7FRL2mUgqapFgzg7 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-7FRL2mUgqapFgzg7 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-7FRL2mUgqapFgzg7 .marker.cross{stroke:#333333;}#mermaid-svg-7FRL2mUgqapFgzg7 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-7FRL2mUgqapFgzg7 p{margin:0;}#mermaid-svg-7FRL2mUgqapFgzg7 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-7FRL2mUgqapFgzg7 .cluster-label text{fill:#333;}#mermaid-svg-7FRL2mUgqapFgzg7 .cluster-label span{color:#333;}#mermaid-svg-7FRL2mUgqapFgzg7 .cluster-label span p{background-color:transparent;}#mermaid-svg-7FRL2mUgqapFgzg7 .label text,#mermaid-svg-7FRL2mUgqapFgzg7 span{fill:#333;color:#333;}#mermaid-svg-7FRL2mUgqapFgzg7 .node rect,#mermaid-svg-7FRL2mUgqapFgzg7 .node circle,#mermaid-svg-7FRL2mUgqapFgzg7 .node ellipse,#mermaid-svg-7FRL2mUgqapFgzg7 .node polygon,#mermaid-svg-7FRL2mUgqapFgzg7 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-7FRL2mUgqapFgzg7 .rough-node .label text,#mermaid-svg-7FRL2mUgqapFgzg7 .node .label text,#mermaid-svg-7FRL2mUgqapFgzg7 .image-shape .label,#mermaid-svg-7FRL2mUgqapFgzg7 .icon-shape .label{text-anchor:middle;}#mermaid-svg-7FRL2mUgqapFgzg7 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-7FRL2mUgqapFgzg7 .rough-node .label,#mermaid-svg-7FRL2mUgqapFgzg7 .node .label,#mermaid-svg-7FRL2mUgqapFgzg7 .image-shape .label,#mermaid-svg-7FRL2mUgqapFgzg7 .icon-shape .label{text-align:center;}#mermaid-svg-7FRL2mUgqapFgzg7 .node.clickable{cursor:pointer;}#mermaid-svg-7FRL2mUgqapFgzg7 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-7FRL2mUgqapFgzg7 .arrowheadPath{fill:#333333;}#mermaid-svg-7FRL2mUgqapFgzg7 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-7FRL2mUgqapFgzg7 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-7FRL2mUgqapFgzg7 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7FRL2mUgqapFgzg7 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-7FRL2mUgqapFgzg7 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7FRL2mUgqapFgzg7 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-7FRL2mUgqapFgzg7 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-7FRL2mUgqapFgzg7 .cluster text{fill:#333;}#mermaid-svg-7FRL2mUgqapFgzg7 .cluster span{color:#333;}#mermaid-svg-7FRL2mUgqapFgzg7 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-7FRL2mUgqapFgzg7 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-7FRL2mUgqapFgzg7 rect.text{fill:none;stroke-width:0;}#mermaid-svg-7FRL2mUgqapFgzg7 .icon-shape,#mermaid-svg-7FRL2mUgqapFgzg7 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7FRL2mUgqapFgzg7 .icon-shape p,#mermaid-svg-7FRL2mUgqapFgzg7 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-7FRL2mUgqapFgzg7 .icon-shape .label rect,#mermaid-svg-7FRL2mUgqapFgzg7 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7FRL2mUgqapFgzg7 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-7FRL2mUgqapFgzg7 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-7FRL2mUgqapFgzg7 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
要,且排版复杂
不要,只要能读字
边缘设备 / 纯 CPU / 要实时
有 GPU 服务器
要
不要
要做文档处理
需要结构化输出吗?Markdown / JSON
MinerU
部署环境?
PaddleOCR
要公式和表格吗?
六个典型场景
| 发票 / 身份证 / 车牌识别 | PaddleOCR |
| 实时视频流文字检测 | PaddleOCR |
| 嵌入式 / 树莓派 / 手机端 | PaddleOCR |
| 学术论文 → Markdown(含公式) | MinerU |
| 财务报表 / 合同 → 结构化数据 | MinerU |
| 给 RAG 建知识库做数据预处理 | MinerU |
也可以组合用
真实项目里最常见的组合是:
MinerU 做整份文档的结构化解析(主力)
↓ 遇到特殊场景(票据、证件、竖排小字)
PaddleOCR 做定点补充识别
或者反过来:
PaddleOCR 先在边缘端做快速预筛(判断这份文档要不要走重流程)
↓ 值得解析的
送到服务端用 MinerU 做完整结构化
七、三个坑(含许可证)
坑 1:MinerU 的许可证变过,别按老文章判断
这个必须说清楚,涉及商用合规:
| 3.1.0 之前 | AGPLv3(有传染性,商用要谨慎) |
| 3.1.0 起 | MinerU 开源许可证(基于 Apache 2.0 + 附加条款) |
3.1.0 之后:绝大多数场景可直接商用,无需授权。但有两条附加条件:
- 超大规模:月活超 1 亿 或 月收入超 2000 万美元,需另行取得商业许可
- 对外提供在线服务:需在产品界面或公开文档的显著位置标注使用了 MinerU
⚠️ 网上很多 2025 年的文章还在说"MinerU 是 AGPLv3,商用有风险"——那是 3.1.0 之前的旧信息。
坑 2:PaddleOCR 3.x 不兼容 2.x
# ❌ 2.x 写法,3.x 会报错
PaddleOCR(use_angle_cls=True, lang="ch", show_log=False)
# ✅ 3.x 写法
PaddleOCR(lang="ch", ocr_version="PP-OCRv6")
如果你搜到的教程里还在传 use_angle_cls、show_log 这些参数,那篇是 2.x 时代的。
坑 3:以为"上了 MinerU 就不用 PaddleOCR 了"
MinerU 的 pipeline 后端本来就在用 PaddleOCR。
所以:
- 不必二选一
- 也不会因为用了 MinerU 就"绕过" PaddleOCR
- 反而要关注 MinerU 版本里打包的是哪个 PP-OCR 版本(3.4 之前是 v5,之后是 v6)
八、总结
三句话记住区别
✅ 应该做的
- 要"读出字"选 PaddleOCR,要"读懂整页"选 MinerU
- PaddleOCR 用 3.x 新 API(ocr_version="PP-OCRv6")
- MinerU 先跑 pipeline 后端,精度不够再上 vlm
- 商用前核对 MinerU 的许可证版本(3.1.0 是分水岭)
- 古籍、手写、生僻字场景先用自己的样本试样
- 复杂项目两个一起用,不要纠结二选一
❌ 不要做的
- ❌ 把两者当竞品比较"谁更准"
- ❌ 用 PaddleOCR 直接处理双栏论文还期待正确顺序
- ❌ 用 MinerU 做实时 OCR(它一秒才处理一页)
- ❌ 照抄 PaddleOCR 2.x 的教程
- ❌ 相信"MinerU 是 AGPLv3"这种过时说法
🎯 最后一句
文档解析的难点从来不是"认字",而是"认完字之后怎么摆回去"。 PaddleOCR 把字认得很准,MinerU 把摆回去这件事做成了产品——所以它们才能成为一条流水线上的两段,而不是擂台上的对手。
📚 参考资料
- PaddleOCR 仓库:https://github.com/PaddlePaddle/PaddleOCR
- PaddleOCR 文档:https://paddleocr.dev/zh
- MinerU 仓库:https://github.com/opendatalab/MinerU
- MinerU 官网:https://mineru.net/
- MinerU 3.1.0 协议变更说明(官方公众号)
- OmniDocBench 榜单(文档解析评测基准)
版本说明(2026-10 核对): PaddleOCR 3.x 线,PP-OCRv6 于 2026-06-11 随 3.7.0 发布(tiny 1.5M / small 7.7M / medium 34.5M,单模型 50 语言,CPU 提速 5.2×);PaddleOCR-VL-1.6 官方自报 OmniDocBench v1.6 96.3%(官方自测,未经第三方复现)。 MinerU 已迭代至 3.x / 4.0,3.4 版 pipeline 后端升级为 PP-OCRv6;3.1.0 起许可证由 AGPLv3 改为基于 Apache 2.0 的 MinerU 许可证。 两者迭代都很快,具体参数与协议请以官方 README 为准。
如果这篇对你有帮助,欢迎点赞 + 收藏。下一篇可以写 MinerU 三种后端(pipeline / vlm / hybrid)实测对比,或者 从 PDF 到 RAG 知识库的完整流水线——评论区告诉我。





