数据截至 (上游 commit 4fe4bde114a2)
pipeline 后端:传统多模型流水线
30 秒导读:
pipeline是 MinerU 的"传统"解析后端。它不靠一个大模型端到端读版面,而是把 一堆各管一件事的专用小模型(版面检测 → 公式检测/识别 → 表格识别 → 文字 OCR)串成一条流水线, 每一步只解决一个子问题,最后把逐页的检测结果拼成统一的middle_json。本章讲透这条"多个专用模型 串成流水线"的主线。
本章聚焦 mineru/backend/pipeline/,是 index 阅读地图里的第二章。
它的上游(谁调用它、字节怎么进来)见 01-orchestration;
它的产物 middle_json 之后怎么变成 Markdown,见 04-middle-json-and-markdown;
另一条走单个视觉语言模型的路线见 03-vlm-backend。
1. 这是什么(零基础也能懂)
一句话定义: pipeline 后端 = 一条由多个专用 CV/OCR 模型接力组成的文档解析流水 线, 输入是一页页 PDF 图,输出是每页上"哪里是标题、哪里是表格、哪里是公式、文字是什么"的结构化清单。
它解决什么问题: 一张扫描版或电子版 PDF 页面,对机器来说只是一堆像素。要把它变成能检索、 能渲染成 Markdown 的结构化数据,得先回答一连串问题:
- 这页有哪些区块、各是什么类型(正文 / 标题 / 图 / 表 / 公式)?——版面检测
- 每个公式的 LaTeX 是什么?——公式识别(MFR)
- 每张表格的 HTML 结构是什么?——表格识别
- 每块文字区域里的字是什么?——OCR
pipeline 的思路:一个子问题配一个专用小模型,而不是让一个大模型全包(那是 vlm 后端的活)。
一句话直觉: 把它想成一条流水线工厂——第一个工位(版面模型)先把页面切成一个个"零件盒" 并贴上标签,后面每个工位(公式、表格、OCR)只负责给自己那类盒子填内容,最后总装成一份零件清单。
用起来什么样: 使用者基本不直接碰本模块。上层入口(见 01-orchestration)
把 PDF 字节、语言、是否 OCR 传进来,本模块内部就把上面这条流水线跑一遍。对外的核心函数是
doc_analyze_streaming(mineru/backend/pipeline/pipeline_analyze.py:157),它一边跑一边通过回调
on_doc_ready 把每份文档的结果吐出来。
本节不碰底层。往下才逐层展开。