MinerU 能够准确识别并提取 PDF 中的图文、表格、公式等复杂元素

1、github路径

https://github.com/opendatalab/MinerU

2、docker 部署

https://opendatalab.github.io/MinerU/zh/quick_start/docker_deployment/

通过 Docker Compose 直接启动服务

提供了compose.yml文件,可以通过它来快速启动MinerU服务。

复制代码
# 下载 compose.yaml 文件
wget https://gcore.jsdelivr.net/gh/opendatalab/MinerU@master/docker/compose.yaml
  • compose.yaml文件中包含了MinerU的多个服务配置,可以根据需要选择启动特定的服务。
  • 不同的服务可能会有额外的参数配置,可以在compose.yaml文件中查看并编辑。
  • 由于vllm推理加速框架预分配显存的特性,可能无法在同一台机器上同时运行多个vllm服务,因此请确保在启动vlm-openai-server服务或使用vlm-vllm-engine后端时,其他可能使用显存的服务已停止。

启动 openai兼容接口 服务

并通过vlm-http-client后端连接openai-server

复制代码
docker compose -f compose.yaml --profile openai-server up -d

在另一个终端中通过http client连接openai server(只需cpu与网络,不需要vllm环境)

复制代码
mineru -p <input_path> -o <output_path> -b vlm-http-client -u http://<server_ip>:30000

启动 Web API 服务

复制代码
docker compose -f compose.yaml --profile api up -d

在浏览器中访问 http://<server_ip>:8000/docs 查看API文档。


启动 MinerU Router 服务

复制代码
docker compose -f compose.yaml --profile router up -d
  • 默认配置会以 --local-gpus auto 模式在容器内自动拉起本地 worker,并通过 http://<server_ip>:8002/docs 暴露统一入口。
  • 如果您希望聚合已有的 mineru-api 服务而不是启动本地 worker,可直接参考 compose.yamlmineru-router 服务下的注释示例,改为使用 --upstream-url

启动 Gradio WebUI 服务

复制代码
docker compose -f compose.yaml --profile gradio up -d
  • 在浏览器中访问 http://<server_ip>:7860 使用 Gradio WebUI。

3、参数解释

在浏览器中访问 http://<server_ip>:8000/docs 查看API文档

接口功能说明

接口 方法 功能 使用场景
/file_parse POST 同步解析 小文件、实时返回结果
/tasks POST 提交异步任务 大文件、批量处理
/tasks/{task_id} GET 查询任务状态 轮询异步任务进度
/tasks/{task_id}/result GET 获取任务结果 获取异步任务解析结果
/health GET 健康检查 监控服务状态

什么时候用异步任务?

场景 推荐方式 原因
文件 < 10MB 同步 /file_parse 快速返回,简单直接
文件 > 10MB 异步 /tasks 避免超时,可轮询
批量处理多个文件 异步 /tasks 后台处理,不阻塞
网页集成 异步 /tasks 更好的用户体验
脚本/自动化 同步或异步均可 根据文件大小选择

核心参数详解

必填参数

参数 说明 示例
files 要解析的文件(PDF/图片/DOCX) 支持多文件上传

语言设置 (lang_list)

根据文档类型选择:

复制代码
# 中文文档(推荐)
lang_list: ["ch"]           # 中英繁混合

# 纯英文文档
lang_list: ["en"]           # 英文

# 日文文档
lang_list: ["japan"]        # 中日英繁

# 多语言混合(欧洲语言)
lang_list: ["latin"]        # 支持法语、德语、西班牙语等37种语言

# 俄语/乌克兰语
lang_list: ["east_slavic"]  # 俄语、白俄语、乌克兰语

# 阿拉伯语
lang_list: ["arabic"]       # 阿拉伯语、波斯语、乌尔都语等

后端选择 (backend)

后端 适用场景 硬件要求 特点
pipeline 通用场景 CPU/GPU 均可 无幻觉、多语言、资源占用低
hybrid-auto-engine 高精度需求 GPU 8GB+ 下一代方案,精度最高
vlm-auto-engine 中英文高精度 GPU 8GB+ 基于VLM,精度高
vlm-http-client 远程调用 仅需网络 连接 OpenAI 兼容服务器

解析方法 (parse_method)

仅对 pipeline/hybrid 后端有效:

复制代码
parse_method: "auto"    # 自动选择(推荐)
parse_method: "txt"     # 强制文本提取(适合文本型PDF)
parse_method: "ocr"     # 强制OCR(适合扫描件)

功能开关

复制代码
formula_enable: true     # 启用公式解析(转为LaTeX)
table_enable: true       # 启用表格解析(转为HTML)

返回内容控制

复制代码
return_md: true              # Markdown格式(最常用)
return_content_list: true    # 结构化内容列表
return_middle_json: false    # 中间结果(调试用)
return_model_output: false   # 模型输出(调试用)
return_images: true          # 提取的图片

高级选项

复制代码
start_page_id: 0        # 起始页(从0开始)
end_page_id: 10         # 结束页(不包含10)
response_format_zip: true   # 返回ZIP包
return_original_file: true  # 包含原文件(ZIP模式)

4、示例1

针对不确定是文字版还是扫描版含有表格 的PDF,auto + table_enable=true 是最佳组合。

复制代码
parse_method: "auto"     # 自动识别文档类型,智能选择txt/ocr
table_enable: true       # 启用表格解析,转为HTML格式
formula_enable: true     # 启用公式解析(如果文档有公式)

auto 模式的工作原理

auto 模式会智能判断:

文档类型 自动选择方法 说明
文字版PDF(可选中的文本) txt 模式 直接提取文本,速度快,无OCR误差
扫描版PDF(图片形式) ocr 模式 自动调用OCR识别文字
混合型PDF(部分页面扫描) 逐页判断 每页独立选择最优方法

推荐的完整配置

针对此场景,建议这样设置:

复制代码
# 基础配置
files: 你的文档.pdf
parse_method: auto           # 自动识别文字版/扫描版
backend: pipeline            # 通用后端,兼容性好
lang_list: ["ch"]            # 中文文档(根据实际调整)

# 功能开关
table_enable: true           # 表格解析(推荐)
formula_enable: true         # 公式解析(如果有公式)
return_md: true              # 返回Markdown

# 输出控制
return_content_list: true    # 返回结构化内容(方便程序处理)
response_format_zip: false   # 先用JSON测试,需要图片再改ZIP

5、使用如下

方式1:cURL 命令

复制代码
curl -X POST "http://服务器ip:port/file_parse" \
  -F "files=@document.pdf" \
  -F "parse_method=auto" \
  -F "table_enable=true" \
  -F "formula_enable=true" \
  -F "lang_list=ch" \
  -F "backend=pipeline" \
  -F "return_md=true" \
  -F "return_content_list=true"

方式2:Python 调用

复制代码
import requests

url = "http://服务器ip:port/file_parse"

files = {
    'files': ('document.pdf', open('document.pdf', 'rb'))
}

data = {
    'parse_method': 'auto',      # 自动识别
    'table_enable': True,        # 解析表格
    'formula_enable': True,      # 解析公式
    'lang_list': ['ch'],         # 中文
    'backend': 'pipeline',       # 通用后端
    'return_md': True,
    'return_content_list': True
}

response = requests.post(url, files=files, data=data)
result = response.json()

# 保存 Markdown
with open('output.md', 'w', encoding='utf-8') as f:
    f.write(result['md_content'])

# 如果包含表格,在Markdown中会呈现为HTML格式
print(result['md_content'])

表格解析效果

启用 table_enable=true 后,表格会被解析为 HTML 格式嵌入在 Markdown 中:

复制代码
# 解析结果示例

这是文档中的一段文字。

<table>
  <tr>
    <th>姓名</th>
    <th>年龄</th>
    <th>职位</th>
  </tr>
  <tr>
    <td>张三</td>
    <td>28</td>
    <td>工程师</td>
  </tr>
  <tr>
    <td>李四</td>
    <td>32</td>
    <td>经理</td>
  </tr>
</table>

后续文字...

如何确认解析效果

方法1:查看返回的 content_list

复制代码
{
  "content_list": [
    {"type": "text", "content": "段落文字..."},
    {"type": "table", "content": "<table>...</table>", "html": "..."},
    {"type": "formula", "content": "$$E=mc^2$$", "latex": "..."}
  ]
}

方法2:检查 parse_method 实际使用的方法

从日志或响应中可以看到系统选择了哪种方法:

  • 如果是文字版:自动用 txt

  • 如果是扫描版:自动用 ocr

高级建议

如果表格解析不理想

复制代码
# 可以尝试 hybrid 后端(如果GPU显存≥8GB)
backend: hybrid-auto-engine
table_enable: true

如果文档包含多种语言

复制代码
lang_list: ["ch", "en"]  # 同时支持中文和英文

如果需要提取表格中的公式

复制代码
table_enable: true
formula_enable: true    # 表格内的公式也会被解析

注意事项

  1. 表格复杂度:简单表格(3-5列)解析效果好,复杂嵌套表格可能有偏差

  2. OCR准确性:扫描版表格的识别精度取决于扫描质量

  3. 性能auto 模式会逐页判断,大文件处理时间稍长

相关推荐
GISer_Jing4 分钟前
AI Agent中游产业链全景拆解:智能体开发的核心生态与技术版图
前端·人工智能·后端
冬奇Lab10 分钟前
RAG 系列(七):检索策略——如何找到最相关的内容
人工智能·llm·源码
薛定猫AI16 分钟前
【深度解析】DeepSeek V4 + Cloud Code:构建低成本、高吞吐的混合 AI 编码工作流
人工智能·log4j
数智工坊17 分钟前
【Transfer CLIP论文阅读】跨模态大模型赋能!CLIP迁移学习实现超强泛化图像去噪
论文阅读·人工智能·迁移学习
科研前沿19 分钟前
MatrixFusion™+ 云边端协同,百路视频全域融合实现零延时指令闭环
大数据·人工智能·音视频
AI周红伟22 分钟前
三年狂赚1.75亿!卖课,才是中国AI最容易赚钱的生意
人工智能·深度学习·学习·机器学习·copilot·openclaw
R御22 分钟前
Mem0g用图谱拿到 68.4%,TiMem5 层时间树为什么走另一条路
人工智能
月诸清酒25 分钟前
52-260504 AI 科技日报 (四月AI架构密集发布,模型更新潮来临)
人工智能
AI周红伟33 分钟前
一天赚5个亿的超级个体天花板李一舟:普通人可借鉴的6点
大数据·人工智能·搜索引擎·copilot·openclaw
MATLAB代码顾问34 分钟前
AI Agent智能体开发实战:LangChain自动化工作流
人工智能·langchain·自动化