chore: init monorepo snapshot
This commit is contained in:
@@ -0,0 +1 @@
|
||||
<iframe src="https://opendatalab-mineru.ms.show" style="min-height: calc(-40px + 100vh); width: 100%; flex-grow: 1; border: medium; overflow: auto; height: 1746px;"></iframe>
|
||||
@@ -0,0 +1,29 @@
|
||||
# 常见问题解答
|
||||
|
||||
如果未能列出您的问题,您也可以使用[DeepWiki](https://deepwiki.com/opendatalab/MinerU)与AI助手交流,这可以解决大部分常见问题。
|
||||
|
||||
如果您仍然无法解决问题,您可通过[Discord](https://discord.gg/Tdedn9GTXq)或[WeChat](https://mineru.net/community-portal/?aliasId=3c430f94)加入社区,与其他用户和开发者交流。
|
||||
|
||||
??? question "在WSL2的Ubuntu22.04中遇到报错`ImportError: libGL.so.1: cannot open shared object file: No such file or directory`"
|
||||
|
||||
WSL2的Ubuntu22.04中缺少`libgl`库,可通过以下命令安装`libgl`库解决:
|
||||
|
||||
```bash
|
||||
sudo apt-get install libgl1-mesa-glx
|
||||
```
|
||||
|
||||
参考:[#388](https://github.com/opendatalab/MinerU/issues/388)
|
||||
|
||||
??? question "在 Linux 系统安装并使用时,解析结果缺失部份文字信息。"
|
||||
|
||||
MinerU在>=2.0的版本中使用`pypdfium2`代替`pymupdf`作为PDF页面的渲染引擎,以解决AGPLv3的许可证问题,在某些Linux发行版,由于缺少CJK字体,可能会在将PDF渲染成图片的过程中丢失部份文字。
|
||||
为了解决这个问题,您可以通过以下命令安装noto字体包,这在Ubuntu/debian系统中有效:
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install fonts-noto-core
|
||||
sudo apt install fonts-noto-cjk
|
||||
fc-cache -fv
|
||||
```
|
||||
也可以直接使用我们的[Docker部署](../quick_start/docker_deployment.md)方式构建镜像,镜像中默认包含以上字体包。
|
||||
|
||||
参考:[#2915](https://github.com/opendatalab/MinerU/issues/2915)
|
||||
@@ -0,0 +1,69 @@
|
||||
<div align="center" xmlns="http://www.w3.org/1999/html">
|
||||
<!-- logo -->
|
||||
<p align="center">
|
||||
<img src="https://opendatalab.github.io/MinerU/images/MinerU-logo.png" width="300px" style="vertical-align:middle;">
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- icon -->
|
||||
|
||||
[](https://github.com/opendatalab/MinerU)
|
||||
[](https://github.com/opendatalab/MinerU)
|
||||
[](https://github.com/opendatalab/MinerU/issues)
|
||||
[](https://github.com/opendatalab/MinerU/issues)
|
||||
[](https://pypi.org/project/mineru/)
|
||||
[](https://pypi.org/project/mineru/)
|
||||
[](https://pepy.tech/project/mineru)
|
||||
[](https://pepy.tech/project/mineru)
|
||||
[](https://mineru.net/OpenSourceTools/Extractor?source=github)
|
||||
[](https://www.modelscope.cn/studios/OpenDataLab/MinerU)
|
||||
[](https://huggingface.co/spaces/opendatalab/MinerU)
|
||||
[](https://colab.research.google.com/gist/myhloli/a3cb16570ab3cfeadf9d8f0ac91b4fca/mineru_demo.ipynb)
|
||||
[](https://arxiv.org/abs/2409.18839)
|
||||
[](https://arxiv.org/abs/2509.22186)
|
||||
[](https://deepwiki.com/opendatalab/MinerU)
|
||||
|
||||
<div align="center">
|
||||
<a href="https://trendshift.io/repositories/11174" target="_blank"><img src="https://trendshift.io/api/badge/repositories/11174" alt="opendatalab%2FMinerU | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
|
||||
<!-- hot link -->
|
||||
|
||||
<p align="center">
|
||||
🚀<a href="https://mineru.net/?source=github">MinerU 官网入口→✅ 免装在线版 ✅ 全功能客户端 ✅ 开发者API在线调用,省去部署麻烦,多种产品形态一键get,速冲!</a>
|
||||
</p>
|
||||
|
||||
<!-- join us -->
|
||||
|
||||
<p align="center">
|
||||
👋 join us on <a href="https://discord.gg/Tdedn9GTXq" target="_blank">Discord</a> and <a href="https://mineru.net/community-portal/?aliasId=3c430f94" target="_blank">WeChat</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
## 项目简介
|
||||
|
||||
MinerU是一款将PDF转化为机器可读格式的工具(如markdown、json),可以很方便地抽取为任意格式。
|
||||
MinerU诞生于[书生-浦语](https://github.com/InternLM/InternLM)的预训练过程中,我们将会集中精力解决科技文献中的符号转化问题,希望在大模型时代为科技发展做出贡献。
|
||||
相比国内外知名商用产品MinerU还很年轻,如果遇到问题或者结果不及预期请到[issue](https://github.com/opendatalab/MinerU/issues)提交问题,同时**附上相关PDF**。
|
||||
|
||||

|
||||
|
||||
|
||||
## 主要功能
|
||||
|
||||
- 删除页眉、页脚、脚注、页码等元素,确保语义连贯
|
||||
- 输出符合人类阅读顺序的文本,适用于单栏、多栏及复杂排版
|
||||
- 保留原文档的结构,包括标题、段落、列表等
|
||||
- 提取图像、图片描述、表格、表格标题及脚注
|
||||
- 自动识别并转换文档中的公式为LaTeX格式
|
||||
- 自动识别并转换文档中的表格为HTML格式
|
||||
- 自动检测扫描版PDF和乱码PDF,并启用OCR功能
|
||||
- OCR支持109种语言的检测与识别
|
||||
- 支持多种输出格式,如多模态与NLP的Markdown、按阅读顺序排序的JSON、含有丰富信息的中间格式等
|
||||
- 支持多种可视化结果,包括layout可视化、span可视化等,便于高效确认输出效果与质检
|
||||
- 支持纯CPU环境运行,并支持 GPU(CUDA)/NPU(CANN)/MPS 加速
|
||||
- 兼容Windows、Linux和Mac平台
|
||||
|
||||
|
||||
## 使用指南
|
||||
|
||||
- [快速上手指南](./quick_start/index.md)
|
||||
- [详细使用说明](./usage/index.md)
|
||||
@@ -0,0 +1,86 @@
|
||||
# 使用docker部署Mineru
|
||||
|
||||
MinerU提供了便捷的docker部署方式,这有助于快速搭建环境并解决一些棘手的环境兼容问题。
|
||||
|
||||
## 使用 Dockerfile 构建镜像
|
||||
|
||||
```bash
|
||||
wget https://gcore.jsdelivr.net/gh/opendatalab/MinerU@master/docker/china/Dockerfile
|
||||
docker build -t mineru-vllm:latest -f Dockerfile .
|
||||
```
|
||||
|
||||
> [!TIP]
|
||||
> [Dockerfile](https://github.com/opendatalab/MinerU/blob/master/docker/china/Dockerfile)默认使用`vllm/vllm-openai:v0.10.1.1`作为基础镜像,
|
||||
> 该版本的vLLM v1 engine对显卡型号支持有限,如您无法在Turing及更早架构的显卡上使用vLLM加速推理,可通过更改基础镜像为`vllm/vllm-openai:v0.10.2`来解决该问题。
|
||||
|
||||
## Docker说明
|
||||
|
||||
Mineru的docker使用了`vllm/vllm-openai`作为基础镜像,因此在docker中默认集成了`vllm`推理加速框架和必需的依赖环境。因此在满足条件的设备上,您可以直接使用`vllm`加速VLM模型推理。
|
||||
> [!NOTE]
|
||||
> 使用`vllm`加速VLM模型推理需要满足的条件是:
|
||||
>
|
||||
> - 设备包含Turing及以后架构的显卡,且可用显存大于等于8G。
|
||||
> - 物理机的显卡驱动应支持CUDA 12.8或更高版本,可通过`nvidia-smi`命令检查驱动版本。
|
||||
> - docker中能够访问物理机的显卡设备。
|
||||
|
||||
|
||||
## 启动 Docker 容器
|
||||
|
||||
```bash
|
||||
docker run --gpus all \
|
||||
--shm-size 32g \
|
||||
-p 30000:30000 -p 7860:7860 -p 8000:8000 \
|
||||
--ipc=host \
|
||||
-it mineru-vllm:latest \
|
||||
/bin/bash
|
||||
```
|
||||
|
||||
执行该命令后,您将进入到Docker容器的交互式终端,并映射了一些端口用于可能会使用的服务,您可以直接在容器内运行MinerU相关命令来使用MinerU的功能。
|
||||
您也可以直接通过替换`/bin/bash`为服务启动命令来启动MinerU服务,详细说明请参考[通过命令启动服务](https://opendatalab.github.io/MinerU/zh/usage/quick_usage/#apiwebuihttp-clientserver)。
|
||||
|
||||
## 通过 Docker Compose 直接启动服务
|
||||
|
||||
我们提供了[compose.yml](https://github.com/opendatalab/MinerU/blob/master/docker/compose.yaml)文件,您可以通过它来快速启动MinerU服务。
|
||||
|
||||
```bash
|
||||
# 下载 compose.yaml 文件
|
||||
wget https://gcore.jsdelivr.net/gh/opendatalab/MinerU@master/docker/compose.yaml
|
||||
```
|
||||
>[!NOTE]
|
||||
>
|
||||
>- `compose.yaml`文件中包含了MinerU的多个服务配置,您可以根据需要选择启动特定的服务。
|
||||
>- 不同的服务可能会有额外的参数配置,您可以在`compose.yaml`文件中查看并编辑。
|
||||
>- 由于`vllm`推理加速框架预分配显存的特性,您可能无法在同一台机器上同时运行多个`vllm`服务,因此请确保在启动`vlm-vllm-server`服务或使用`vlm-vllm-engine`后端时,其他可能使用显存的服务已停止。
|
||||
|
||||
---
|
||||
|
||||
### 启动 vllm-server 服务
|
||||
并通过`vlm-http-client`后端连接`vllm-server`
|
||||
```bash
|
||||
docker compose -f compose.yaml --profile vllm-server up -d
|
||||
```
|
||||
>[!TIP]
|
||||
>在另一个终端中通过http client连接vllm server(只需cpu与网络,不需要vllm环境)
|
||||
> ```bash
|
||||
> mineru -p <input_path> -o <output_path> -b vlm-http-client -u http://<server_ip>:30000
|
||||
> ```
|
||||
|
||||
---
|
||||
|
||||
### 启动 Web API 服务
|
||||
```bash
|
||||
docker compose -f compose.yaml --profile api up -d
|
||||
```
|
||||
>[!TIP]
|
||||
>在浏览器中访问 `http://<server_ip>:8000/docs` 查看API文档。
|
||||
|
||||
---
|
||||
|
||||
### 启动 Gradio WebUI 服务
|
||||
```bash
|
||||
docker compose -f compose.yaml --profile gradio up -d
|
||||
```
|
||||
>[!TIP]
|
||||
>
|
||||
>- 在浏览器中访问 `http://<server_ip>:7860` 使用 Gradio WebUI。
|
||||
>- 访问 `http://<server_ip>:7860/?view=api` 使用 Gradio API。
|
||||
@@ -0,0 +1,29 @@
|
||||
# MinerU 扩展模块安装指南
|
||||
MinerU 支持根据不同需求,按需安装扩展模块,以增强功能或支持特定的模型后端。
|
||||
|
||||
## 常见场景
|
||||
|
||||
### 核心功能安装
|
||||
`core` 模块是 MinerU 的核心依赖,包含了除`vllm`外的所有功能模块。安装此模块可以确保 MinerU 的基本功能正常运行。
|
||||
```bash
|
||||
uv pip install "mineru[core]"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 使用`vllm`加速 VLM 模型推理
|
||||
`vllm` 模块提供了对 VLM 模型推理的加速支持,适用于具有 Turing 及以后架构的显卡(8G 显存及以上)。安装此模块可以显著提升模型推理速度。
|
||||
在配置中,`all`包含了`core`和`vllm`模块,因此`mineru[all]`和`mineru[core,vllm]`是等价的。
|
||||
```bash
|
||||
uv pip install "mineru[all]"
|
||||
```
|
||||
> [!TIP]
|
||||
> 如在安装包含vllm的完整包过程中发生异常,请参考 [vllm 官方文档](https://docs.vllm.ai/en/latest/getting_started/installation/index.html) 尝试解决,或直接使用 [Docker](./docker_deployment.md) 方式部署镜像。
|
||||
|
||||
---
|
||||
|
||||
### 安装轻量版client连接vllm-server使用
|
||||
如果您需要在边缘设备上安装轻量版的 client 端以连接 `vllm-server`,可以安装mineru的基础包,非常轻量,适合在只有cpu和网络连接的设备上使用。
|
||||
```bash
|
||||
uv pip install mineru
|
||||
```
|
||||
@@ -0,0 +1,134 @@
|
||||
# 快速开始
|
||||
|
||||
如果遇到任何安装问题,请先查询 [FAQ](../faq/index.md)
|
||||
|
||||
## 在线体验
|
||||
|
||||
### 官网在线应用
|
||||
官网在线版功能与客户端一致,界面美观,功能丰富,需要登录使用
|
||||
|
||||
- [](https://mineru.net/OpenSourceTools/Extractor?source=github)
|
||||
|
||||
### 基于Gradio的在线demo
|
||||
基于gradio开发的webui,界面简洁,仅包含核心解析功能,免登录
|
||||
|
||||
- [](https://www.modelscope.cn/studios/OpenDataLab/MinerU)
|
||||
- [](https://huggingface.co/spaces/opendatalab/MinerU)
|
||||
|
||||
## 本地部署
|
||||
|
||||
> [!WARNING]
|
||||
> **安装前必看——软硬件环境支持说明**
|
||||
>
|
||||
> 为了确保项目的稳定性和可靠性,我们在开发过程中仅对特定的软硬件环境进行优化和测试。这样当用户在推荐的系统配置上部署和运行项目时,能够获得最佳的性能表现和最少的兼容性问题。
|
||||
>
|
||||
> 通过集中资源和精力于主线环境,我们团队能够更高效地解决潜在的BUG,及时开发新功能。
|
||||
>
|
||||
> 在非主线环境中,由于硬件、软件配置的多样性,以及第三方依赖项的兼容性问题,我们无法100%保证项目的完全可用性。因此,对于希望在非推荐环境中使用本项目的用户,我们建议先仔细阅读文档以及FAQ,大多数问题已经在FAQ中有对应的解决方案,除此之外我们鼓励社区反馈问题,以便我们能够逐步扩大支持范围。
|
||||
|
||||
<table border="1">
|
||||
<thead>
|
||||
<tr>
|
||||
<th rowspan="2">解析后端</th>
|
||||
<th rowspan="2">pipeline <br> (精度<sup>1</sup> 82+)</th>
|
||||
<th colspan="4" style="text-align:center;">vlm (精度<sup>1</sup> 90+)</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>transformers</th>
|
||||
<th>mlx-engine</th>
|
||||
<th>vllm-engine / <br>vllm-async-engine</th>
|
||||
<th>http-client</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>后端特性</th>
|
||||
<td>速度快, 无幻觉</td>
|
||||
<td>兼容性好, 速度较慢</td>
|
||||
<td>比transformers快</td>
|
||||
<td>速度快, 兼容vllm生态</td>
|
||||
<td>适用于OpenAI兼容服务器<sup>5</sup></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>操作系统</th>
|
||||
<td colspan="2" style="text-align:center;">Linux<sup>2</sup> / Windows / macOS</td>
|
||||
<td style="text-align:center;">macOS<sup>3</sup></td>
|
||||
<td style="text-align:center;">Linux<sup>2</sup> / Windows<sup>4</sup> </td>
|
||||
<td>不限</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>CPU推理支持</th>
|
||||
<td colspan="2" style="text-align:center;">✅</td>
|
||||
<td colspan="2" style="text-align:center;">❌</td>
|
||||
<td >不需要</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>GPU要求</th><td colspan="2" style="text-align:center;">Volta及以后架构, 6G显存以上或Apple Silicon</td>
|
||||
<td>Apple Silicon</td>
|
||||
<td>Volta及以后架构, 8G显存以上</td>
|
||||
<td>不需要</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>内存要求</th>
|
||||
<td colspan="4" style="text-align:center;">最低16GB以上, 推荐32GB以上</td>
|
||||
<td>8GB</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>磁盘空间要求</th>
|
||||
<td colspan="4" style="text-align:center;">20GB以上, 推荐使用SSD</td>
|
||||
<td>2GB</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>python版本</th>
|
||||
<td colspan="5" style="text-align:center;">3.10-3.13</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<sup>1</sup> 精度指标为OmniDocBench (v1.5)的End-to-End Evaluation Overall分数,基于`MinerU`最新版本测试
|
||||
<sup>2</sup> Linux仅支持2019年及以后发行版
|
||||
<sup>3</sup> MLX需macOS 13.5及以上版本支持,推荐14.0以上版本使用
|
||||
<sup>4</sup> Windows vLLM通过WSL2(适用于 Linux 的 Windows 子系统)实现支持
|
||||
<sup>5</sup> 兼容OpenAI API的服务器,如通过`vLLM`/`SGLang`/`LMDeploy`等推理框架部署的本地模型服务器或远程模型服务
|
||||
|
||||
> [!TIP]
|
||||
> 除以上主流环境与平台外,我们也收录了一些社区用户反馈的其他平台支持情况,详情请参考[其他加速卡适配](https://opendatalab.github.io/MinerU/zh/usage/)。
|
||||
> 如果您有意将自己的环境适配经验分享给社区,欢迎通过[show-and-tell](https://github.com/opendatalab/MinerU/discussions/categories/show-and-tell)提交或提交PR至[其他加速卡适配](https://github.com/opendatalab/MinerU/tree/master/docs/zh/usage/acceleration_cards)文档。
|
||||
|
||||
|
||||
### 安装 MinerU
|
||||
|
||||
#### 使用pip或uv安装MinerU
|
||||
```bash
|
||||
pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple
|
||||
pip install uv -i https://mirrors.aliyun.com/pypi/simple
|
||||
uv pip install -U "mineru[core]" -i https://mirrors.aliyun.com/pypi/simple
|
||||
```
|
||||
|
||||
#### 通过源码安装MinerU
|
||||
```bash
|
||||
git clone https://github.com/opendatalab/MinerU.git
|
||||
cd MinerU
|
||||
uv pip install -e .[core] -i https://mirrors.aliyun.com/pypi/simple
|
||||
```
|
||||
|
||||
> [!TIP]
|
||||
> `mineru[core]`包含除`vllm`加速外的所有核心功能,兼容Windows / Linux / macOS系统,适合绝大多数用户。
|
||||
> 如果您有使用`vllm`加速VLM模型推理,或是在边缘设备安装轻量版client端等需求,可以参考文档[扩展模块安装指南](./extension_modules.md)。
|
||||
|
||||
---
|
||||
|
||||
#### 使用docker部署Mineru
|
||||
MinerU提供了便捷的docker部署方式,这有助于快速搭建环境并解决一些棘手的环境兼容问题。
|
||||
您可以在文档中获取[Docker部署说明](./docker_deployment.md)。
|
||||
|
||||
---
|
||||
|
||||
### 使用 MinerU
|
||||
|
||||
最简单的命令行调用方式:
|
||||
```bash
|
||||
mineru -p <input_path> -o <output_path>
|
||||
```
|
||||
|
||||
您可以通过命令行、API、WebUI等多种方式使用MinerU进行PDF解析,具体使用方法请参考[使用指南](../usage/index.md)。
|
||||
@@ -0,0 +1,827 @@
|
||||
# MinerU 输出文件说明
|
||||
|
||||
## 概览
|
||||
|
||||
`mineru` 命令执行后,除了输出主要的 markdown 文件外,还会生成多个辅助文件用于调试、质检和进一步处理。这些文件包括:
|
||||
|
||||
- **可视化调试文件**:帮助用户直观了解文档解析过程和结果
|
||||
- **结构化数据文件**:包含详细的解析数据,可用于二次开发
|
||||
|
||||
下面将详细介绍每个文件的作用和格式。
|
||||
|
||||
## 可视化调试文件
|
||||
|
||||
### 布局分析文件 (layout.pdf)
|
||||
|
||||
**文件命名格式**:`{原文件名}_layout.pdf`
|
||||
|
||||
**功能说明**:
|
||||
|
||||
- 可视化展示每一页的布局分析结果
|
||||
- 每个检测框右上角的数字表示阅读顺序
|
||||
- 使用不同背景色块区分不同类型的内容块
|
||||
|
||||
**使用场景**:
|
||||
|
||||
- 检查布局分析是否正确
|
||||
- 确认阅读顺序是否合理
|
||||
- 调试布局相关问题
|
||||
|
||||

|
||||
|
||||
### 文本片段文件 (spans.pdf)
|
||||
|
||||
> [!NOTE]
|
||||
> 仅适用于 pipeline 后端
|
||||
|
||||
**文件命名格式**:`{原文件名}_spans.pdf`
|
||||
|
||||
**功能说明**:
|
||||
|
||||
- 根据 span 类型使用不同颜色线框标注页面内容
|
||||
- 用于质量检查和问题排查
|
||||
|
||||
**使用场景**:
|
||||
|
||||
- 快速排查文本丢失问题
|
||||
- 检查行内公式识别情况
|
||||
- 验证文本分割准确性
|
||||
|
||||

|
||||
|
||||
## 结构化数据文件
|
||||
|
||||
> [!IMPORTANT]
|
||||
> 2.5版本vlm后端的输出存在较大变化,与pipeline版本存在不兼容情况,如需基于结构化输出进行二次开发,请仔细阅读本文档内容。
|
||||
|
||||
### pipeline 后端 输出结果
|
||||
|
||||
#### 模型推理结果 (model.json)
|
||||
|
||||
**文件命名格式**:`{原文件名}_model.json`
|
||||
|
||||
##### 数据结构定义
|
||||
|
||||
```python
|
||||
from pydantic import BaseModel, Field
|
||||
from enum import IntEnum
|
||||
|
||||
class CategoryType(IntEnum):
|
||||
"""内容类别枚举"""
|
||||
title = 0 # 标题
|
||||
plain_text = 1 # 文本
|
||||
abandon = 2 # 包括页眉页脚页码和页面注释
|
||||
figure = 3 # 图片
|
||||
figure_caption = 4 # 图片描述
|
||||
table = 5 # 表格
|
||||
table_caption = 6 # 表格描述
|
||||
table_footnote = 7 # 表格注释
|
||||
isolate_formula = 8 # 行间公式
|
||||
formula_caption = 9 # 行间公式的标号
|
||||
embedding = 13 # 行内公式
|
||||
isolated = 14 # 行间公式
|
||||
text = 15 # OCR 识别结果
|
||||
|
||||
class PageInfo(BaseModel):
|
||||
"""页面信息"""
|
||||
page_no: int = Field(description="页码序号,第一页的序号是 0", ge=0)
|
||||
height: int = Field(description="页面高度", gt=0)
|
||||
width: int = Field(description="页面宽度", ge=0)
|
||||
|
||||
class ObjectInferenceResult(BaseModel):
|
||||
"""对象识别结果"""
|
||||
category_id: CategoryType = Field(description="类别", ge=0)
|
||||
poly: list[float] = Field(description="四边形坐标,格式为 [x0,y0,x1,y1,x2,y2,x3,y3]")
|
||||
score: float = Field(description="推理结果的置信度")
|
||||
latex: str | None = Field(description="LaTeX 解析结果", default=None)
|
||||
html: str | None = Field(description="HTML 解析结果", default=None)
|
||||
|
||||
class PageInferenceResults(BaseModel):
|
||||
"""页面推理结果"""
|
||||
layout_dets: list[ObjectInferenceResult] = Field(description="页面识别结果")
|
||||
page_info: PageInfo = Field(description="页面元信息")
|
||||
|
||||
# 完整的推理结果
|
||||
inference_result: list[PageInferenceResults] = []
|
||||
```
|
||||
|
||||
##### 坐标系统说明
|
||||
|
||||
`poly` 坐标格式:`[x0, y0, x1, y1, x2, y2, x3, y3]`
|
||||
|
||||
- 分别表示左上、右上、右下、左下四点的坐标
|
||||
- 坐标原点在页面左上角
|
||||
|
||||

|
||||
|
||||
##### 示例数据
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"layout_dets": [
|
||||
{
|
||||
"category_id": 2,
|
||||
"poly": [
|
||||
99.1906967163086,
|
||||
100.3119125366211,
|
||||
730.3707885742188,
|
||||
100.3119125366211,
|
||||
730.3707885742188,
|
||||
245.81326293945312,
|
||||
99.1906967163086,
|
||||
245.81326293945312
|
||||
],
|
||||
"score": 0.9999997615814209
|
||||
}
|
||||
],
|
||||
"page_info": {
|
||||
"page_no": 0,
|
||||
"height": 2339,
|
||||
"width": 1654
|
||||
}
|
||||
},
|
||||
{
|
||||
"layout_dets": [
|
||||
{
|
||||
"category_id": 5,
|
||||
"poly": [
|
||||
99.13092803955078,
|
||||
2210.680419921875,
|
||||
497.3183898925781,
|
||||
2210.680419921875,
|
||||
497.3183898925781,
|
||||
2264.78076171875,
|
||||
99.13092803955078,
|
||||
2264.78076171875
|
||||
],
|
||||
"score": 0.9999997019767761
|
||||
}
|
||||
],
|
||||
"page_info": {
|
||||
"page_no": 1,
|
||||
"height": 2339,
|
||||
"width": 1654
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
#### 中间处理结果 (middle.json)
|
||||
|
||||
**文件命名格式**:`{原文件名}_middle.json`
|
||||
|
||||
##### 顶层结构
|
||||
|
||||
| 字段名 | 类型 | 说明 |
|
||||
|--------|------|------|
|
||||
| `pdf_info` | `list[dict]` | 每一页的解析结果数组 |
|
||||
| `_backend` | `string` | 解析模式:`pipeline` 或 `vlm` |
|
||||
| `_version_name` | `string` | MinerU 版本号 |
|
||||
|
||||
##### 页面信息结构 (pdf_info)
|
||||
|
||||
| 字段名 | 说明 |
|
||||
|--------|------|
|
||||
| `preproc_blocks` | PDF 预处理后的未分段中间结果 |
|
||||
| `page_idx` | 页码,从 0 开始 |
|
||||
| `page_size` | 页面的宽度和高度 `[width, height]` |
|
||||
| `images` | 图片块信息列表 |
|
||||
| `tables` | 表格块信息列表 |
|
||||
| `interline_equations` | 行间公式块信息列表 |
|
||||
| `discarded_blocks` | 需要丢弃的块信息 |
|
||||
| `para_blocks` | 分段后的内容块结果 |
|
||||
|
||||
##### 块结构层次
|
||||
|
||||
```
|
||||
一级块 (table | image)
|
||||
└── 二级块
|
||||
└── 行 (line)
|
||||
└── 片段 (span)
|
||||
```
|
||||
|
||||
##### 一级块字段
|
||||
|
||||
| 字段名 | 说明 |
|
||||
|--------|------|
|
||||
| `type` | 块类型:`table` 或 `image` |
|
||||
| `bbox` | 块的矩形框坐标 `[x0, y0, x1, y1]` |
|
||||
| `blocks` | 包含的二级块列表 |
|
||||
|
||||
##### 二级块字段
|
||||
|
||||
| 字段名 | 说明 |
|
||||
|--------|------|
|
||||
| `type` | 块类型(详见下表) |
|
||||
| `bbox` | 块的矩形框坐标 |
|
||||
| `lines` | 包含的行信息列表 |
|
||||
|
||||
##### 二级块类型
|
||||
|
||||
| 类型 | 说明 |
|
||||
|------|------|
|
||||
| `image_body` | 图像本体 |
|
||||
| `image_caption` | 图像描述文本 |
|
||||
| `image_footnote` | 图像脚注 |
|
||||
| `table_body` | 表格本体 |
|
||||
| `table_caption` | 表格描述文本 |
|
||||
| `table_footnote` | 表格脚注 |
|
||||
| `text` | 文本块 |
|
||||
| `title` | 标题块 |
|
||||
| `index` | 目录块 |
|
||||
| `list` | 列表块 |
|
||||
| `interline_equation` | 行间公式块 |
|
||||
|
||||
##### 行和片段结构
|
||||
|
||||
**行 (line) 字段**:
|
||||
- `bbox`:行的矩形框坐标
|
||||
- `spans`:包含的片段列表
|
||||
|
||||
**片段 (span) 字段**:
|
||||
- `bbox`:片段的矩形框坐标
|
||||
- `type`:片段类型(`image`、`table`、`text`、`inline_equation`、`interline_equation`)
|
||||
- `content` | `img_path`:文本内容或图片路径
|
||||
|
||||
##### 示例数据
|
||||
|
||||
```json
|
||||
{
|
||||
"pdf_info": [
|
||||
{
|
||||
"preproc_blocks": [
|
||||
{
|
||||
"type": "text",
|
||||
"bbox": [
|
||||
52,
|
||||
61.956024169921875,
|
||||
294,
|
||||
82.99800872802734
|
||||
],
|
||||
"lines": [
|
||||
{
|
||||
"bbox": [
|
||||
52,
|
||||
61.956024169921875,
|
||||
294,
|
||||
72.0000228881836
|
||||
],
|
||||
"spans": [
|
||||
{
|
||||
"bbox": [
|
||||
54.0,
|
||||
61.956024169921875,
|
||||
296.2261657714844,
|
||||
72.0000228881836
|
||||
],
|
||||
"content": "dependent on the service headway and the reliability of the departure ",
|
||||
"type": "text",
|
||||
"score": 1.0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"layout_bboxes": [
|
||||
{
|
||||
"layout_bbox": [
|
||||
52,
|
||||
61,
|
||||
294,
|
||||
731
|
||||
],
|
||||
"layout_label": "V",
|
||||
"sub_layout": []
|
||||
}
|
||||
],
|
||||
"page_idx": 0,
|
||||
"page_size": [
|
||||
612.0,
|
||||
792.0
|
||||
],
|
||||
"_layout_tree": [],
|
||||
"images": [],
|
||||
"tables": [],
|
||||
"interline_equations": [],
|
||||
"discarded_blocks": [],
|
||||
"para_blocks": [
|
||||
{
|
||||
"type": "text",
|
||||
"bbox": [
|
||||
52,
|
||||
61.956024169921875,
|
||||
294,
|
||||
82.99800872802734
|
||||
],
|
||||
"lines": [
|
||||
{
|
||||
"bbox": [
|
||||
52,
|
||||
61.956024169921875,
|
||||
294,
|
||||
72.0000228881836
|
||||
],
|
||||
"spans": [
|
||||
{
|
||||
"bbox": [
|
||||
54.0,
|
||||
61.956024169921875,
|
||||
296.2261657714844,
|
||||
72.0000228881836
|
||||
],
|
||||
"content": "dependent on the service headway and the reliability of the departure ",
|
||||
"type": "text",
|
||||
"score": 1.0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"_backend": "pipeline",
|
||||
"_version_name": "0.6.1"
|
||||
}
|
||||
```
|
||||
|
||||
#### 内容列表 (content_list.json)
|
||||
|
||||
**文件命名格式**:`{原文件名}_content_list.json`
|
||||
|
||||
##### 功能说明
|
||||
|
||||
这是一个简化版的 `middle.json`,按阅读顺序平铺存储所有可读内容块,去除了复杂的布局信息,便于后续处理。
|
||||
|
||||
##### 内容类型
|
||||
|
||||
| 类型 | 说明 |
|
||||
|------|------|
|
||||
| `image` | 图片 |
|
||||
| `table` | 表格 |
|
||||
| `text` | 文本/标题 |
|
||||
| `equation` | 行间公式 |
|
||||
|
||||
##### 文本层级标识
|
||||
|
||||
通过 `text_level` 字段区分文本层级:
|
||||
|
||||
- 无 `text_level` 或 `text_level: 0`:正文文本
|
||||
- `text_level: 1`:一级标题
|
||||
- `text_level: 2`:二级标题
|
||||
- 以此类推...
|
||||
|
||||
##### 通用字段
|
||||
|
||||
- 所有内容块都包含 `page_idx` 字段,表示所在页码(从 0 开始)。
|
||||
- 所有内容块都包含 `bbox` 字段,表示内容块的边界框坐标 `[x0, y0, x1, y1]` 映射在0-1000范围内的结果。
|
||||
|
||||
##### 示例数据
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"type": "text",
|
||||
"text": "The response of flow duration curves to afforestation ",
|
||||
"text_level": 1,
|
||||
"bbox": [
|
||||
62,
|
||||
480,
|
||||
946,
|
||||
904
|
||||
],
|
||||
"page_idx": 0
|
||||
},
|
||||
{
|
||||
"type": "image",
|
||||
"img_path": "images/a8ecda1c69b27e4f79fce1589175a9d721cbdc1cf78b4cc06a015f3746f6b9d8.jpg",
|
||||
"image_caption": [
|
||||
"Fig. 1. Annual flow duration curves of daily flows from Pine Creek, Australia, 1989–2000. "
|
||||
],
|
||||
"image_footnote": [],
|
||||
"bbox": [
|
||||
62,
|
||||
480,
|
||||
946,
|
||||
904
|
||||
],
|
||||
"page_idx": 1
|
||||
},
|
||||
{
|
||||
"type": "equation",
|
||||
"img_path": "images/181ea56ef185060d04bf4e274685f3e072e922e7b839f093d482c29bf89b71e8.jpg",
|
||||
"text": "$$\nQ _ { \\% } = f ( P ) + g ( T )\n$$",
|
||||
"text_format": "latex",
|
||||
"bbox": [
|
||||
62,
|
||||
480,
|
||||
946,
|
||||
904
|
||||
],
|
||||
"page_idx": 2
|
||||
},
|
||||
{
|
||||
"type": "table",
|
||||
"img_path": "images/e3cb413394a475e555807ffdad913435940ec637873d673ee1b039e3bc3496d0.jpg",
|
||||
"table_caption": [
|
||||
"Table 2 Significance of the rainfall and time terms "
|
||||
],
|
||||
"table_footnote": [
|
||||
"indicates that the rainfall term was significant at the $5 \\%$ level, $T$ indicates that the time term was significant at the $5 \\%$ level, \\* represents significance at the $10 \\%$ level, and na denotes too few data points for meaningful analysis. "
|
||||
],
|
||||
"table_body": "<html><body><table><tr><td rowspan=\"2\">Site</td><td colspan=\"10\">Percentile</td></tr><tr><td>10</td><td>20</td><td>30</td><td>40</td><td>50</td><td>60</td><td>70</td><td>80</td><td>90</td><td>100</td></tr><tr><td>Traralgon Ck</td><td>P</td><td>P,*</td><td>P</td><td>P</td><td>P,</td><td>P,</td><td>P,</td><td>P,</td><td>P</td><td>P</td></tr><tr><td>Redhill</td><td>P,T</td><td>P,T</td><td>,*</td><td>**</td><td>P.T</td><td>P,*</td><td>P*</td><td>P*</td><td>*</td><td>,*</td></tr><tr><td>Pine Ck</td><td></td><td>P,T</td><td>P,T</td><td>P,T</td><td>P,T</td><td>T</td><td>T</td><td>T</td><td>na</td><td>na</td></tr><tr><td>Stewarts Ck 5</td><td>P,T</td><td>P,T</td><td>P,T</td><td>P,T</td><td>P.T</td><td>P.T</td><td>P,T</td><td>na</td><td>na</td><td>na</td></tr><tr><td>Glendhu 2</td><td>P</td><td>P,T</td><td>P,*</td><td>P,T</td><td>P.T</td><td>P,ns</td><td>P,T</td><td>P,T</td><td>P,T</td><td>P,T</td></tr><tr><td>Cathedral Peak 2</td><td>P,T</td><td>P,T</td><td>P,T</td><td>P,T</td><td>P,T</td><td>*,T</td><td>P,T</td><td>P,T</td><td>P,T</td><td>T</td></tr><tr><td>Cathedral Peak 3</td><td>P.T</td><td>P.T</td><td>P,T</td><td>P,T</td><td>P,T</td><td>T</td><td>P,T</td><td>P,T</td><td>P,T</td><td>T</td></tr><tr><td>Lambrechtsbos A</td><td>P,T</td><td>P</td><td>P</td><td>P,T</td><td>*,T</td><td>*,T</td><td>*,T</td><td>*,T</td><td>*,T</td><td>T</td></tr><tr><td>Lambrechtsbos B</td><td>P,T</td><td>P,T</td><td>P,T</td><td>P,T</td><td>P,T</td><td>P,T</td><td>P,T</td><td>P,T</td><td>T</td><td>T</td></tr><tr><td>Biesievlei</td><td>P,T</td><td>P.T</td><td>P,T</td><td>P,T</td><td>*,T</td><td>*,T</td><td>T</td><td>T</td><td>P,T</td><td>P,T</td></tr></table></body></html>",
|
||||
"bbox": [
|
||||
62,
|
||||
480,
|
||||
946,
|
||||
904
|
||||
],
|
||||
"page_idx": 5
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### VLM 后端 输出结果
|
||||
|
||||
#### 模型推理结果 (model.json)
|
||||
|
||||
**文件命名格式**:`{原文件名}_model.json`
|
||||
|
||||
##### 文件格式说明
|
||||
|
||||
- 该文件为 VLM 模型的原始输出结果,包含两层嵌套list,外层表示页面,内层表示该页的内容块
|
||||
- 每个内容块都是一个dict,包含 `type`、`bbox`、`angle`、`content` 字段
|
||||
|
||||
|
||||
##### 支持的内容类型
|
||||
|
||||
```json
|
||||
{
|
||||
"text": "文本",
|
||||
"title": "标题",
|
||||
"equation": "行间公式",
|
||||
"image": "图片",
|
||||
"image_caption": "图片描述",
|
||||
"image_footnote": "图片脚注",
|
||||
"table": "表格",
|
||||
"table_caption": "表格描述",
|
||||
"table_footnote": "表格脚注",
|
||||
"phonetic": "拼音",
|
||||
"code": "代码块",
|
||||
"code_caption": "代码描述",
|
||||
"ref_text": "参考文献",
|
||||
"algorithm": "算法块",
|
||||
"list": "列表",
|
||||
"header": "页眉",
|
||||
"footer": "页脚",
|
||||
"page_number": "页码",
|
||||
"aside_text": "装订线旁注",
|
||||
"page_footnote": "页面脚注"
|
||||
}
|
||||
```
|
||||
|
||||
##### 坐标系统说明
|
||||
|
||||
`bbox` 坐标格式:`[x0, y0, x1, y1]`
|
||||
|
||||
- 分别表示左上、右下两点的坐标
|
||||
- 坐标原点在页面左上角
|
||||
- 坐标为相对于原始页面尺寸的百分比,范围在0-1之间
|
||||
|
||||
##### 示例数据
|
||||
|
||||
```json
|
||||
[
|
||||
[
|
||||
{
|
||||
"type": "header",
|
||||
"bbox": [
|
||||
0.077,
|
||||
0.095,
|
||||
0.18,
|
||||
0.181
|
||||
],
|
||||
"angle": 0,
|
||||
"score": null,
|
||||
"block_tags": null,
|
||||
"content": "ELSEVIER",
|
||||
"format": null,
|
||||
"content_tags": null
|
||||
},
|
||||
{
|
||||
"type": "title",
|
||||
"bbox": [
|
||||
0.157,
|
||||
0.228,
|
||||
0.833,
|
||||
0.253
|
||||
],
|
||||
"angle": 0,
|
||||
"score": null,
|
||||
"block_tags": null,
|
||||
"content": "The response of flow duration curves to afforestation",
|
||||
"format": null,
|
||||
"content_tags": null
|
||||
}
|
||||
]
|
||||
]
|
||||
```
|
||||
|
||||
#### 中间处理结果 (middle.json)
|
||||
|
||||
**文件命名格式**:`{原文件名}_middle.json`
|
||||
|
||||
##### 文件格式说明
|
||||
vlm 后端的 middle.json 文件结构与 pipeline 后端类似,但存在以下差异:
|
||||
|
||||
- list变成二级block,增加`sub_type`字段区分list类型:
|
||||
* `text`(文本类型)
|
||||
* `ref_text`(引用类型)
|
||||
|
||||
- 增加code类型block,code类型包含两种"sub_type":
|
||||
* 分别是`code`和`algorithm`
|
||||
* 至少有`code_body`, 可选`code_caption`
|
||||
|
||||
- `discarded_blocks`内元素type增加以下类型:
|
||||
* `header`(页眉)
|
||||
* `footer`(页脚)
|
||||
* `page_number`(页码)
|
||||
* `aside_text`(装订线文本)
|
||||
* `page_footnote`(脚注)
|
||||
- 所有block增加`angle`字段,用来表示旋转角度,0,90,180,270
|
||||
|
||||
|
||||
##### 示例数据
|
||||
- list block 示例
|
||||
```json
|
||||
{
|
||||
"bbox": [
|
||||
174,
|
||||
155,
|
||||
818,
|
||||
333
|
||||
],
|
||||
"type": "list",
|
||||
"angle": 0,
|
||||
"index": 11,
|
||||
"blocks": [
|
||||
{
|
||||
"bbox": [
|
||||
174,
|
||||
157,
|
||||
311,
|
||||
175
|
||||
],
|
||||
"type": "text",
|
||||
"angle": 0,
|
||||
"lines": [
|
||||
{
|
||||
"bbox": [
|
||||
174,
|
||||
157,
|
||||
311,
|
||||
175
|
||||
],
|
||||
"spans": [
|
||||
{
|
||||
"bbox": [
|
||||
174,
|
||||
157,
|
||||
311,
|
||||
175
|
||||
],
|
||||
"type": "text",
|
||||
"content": "H.1 Introduction"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"index": 3
|
||||
},
|
||||
{
|
||||
"bbox": [
|
||||
175,
|
||||
182,
|
||||
464,
|
||||
229
|
||||
],
|
||||
"type": "text",
|
||||
"angle": 0,
|
||||
"lines": [
|
||||
{
|
||||
"bbox": [
|
||||
175,
|
||||
182,
|
||||
464,
|
||||
229
|
||||
],
|
||||
"spans": [
|
||||
{
|
||||
"bbox": [
|
||||
175,
|
||||
182,
|
||||
464,
|
||||
229
|
||||
],
|
||||
"type": "text",
|
||||
"content": "H.2 Example: Divide by Zero without Exception Handling"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"index": 4
|
||||
}
|
||||
],
|
||||
"sub_type": "text"
|
||||
}
|
||||
```
|
||||
- code block 示例
|
||||
```json
|
||||
{
|
||||
"type": "code",
|
||||
"bbox": [
|
||||
114,
|
||||
780,
|
||||
885,
|
||||
1231
|
||||
],
|
||||
"blocks": [
|
||||
{
|
||||
"bbox": [
|
||||
114,
|
||||
780,
|
||||
885,
|
||||
1231
|
||||
],
|
||||
"lines": [
|
||||
{
|
||||
"bbox": [
|
||||
114,
|
||||
780,
|
||||
885,
|
||||
1231
|
||||
],
|
||||
"spans": [
|
||||
{
|
||||
"bbox": [
|
||||
114,
|
||||
780,
|
||||
885,
|
||||
1231
|
||||
],
|
||||
"type": "text",
|
||||
"content": "1 // Fig. H.1: DivideByZeroNoExceptionHandling.java \n2 // Integer division without exception handling. \n3 import java.util.Scanner; \n4 \n5 public class DivideByZeroNoExceptionHandling \n6 { \n7 // demonstrates throwing an exception when a divide-by-zero occurs \n8 public static int quotient( int numerator, int denominator ) \n9 { \n10 return numerator / denominator; // possible division by zero \n11 } // end method quotient \n12 \n13 public static void main(String[] args) \n14 { \n15 Scanner scanner = new Scanner(System.in); // scanner for input \n16 \n17 System.out.print(\"Please enter an integer numerator: \"); \n18 int numerator = scanner.nextInt(); \n19 System.out.print(\"Please enter an integer denominator: \"); \n20 int denominator = scanner.nextInt(); \n21"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"index": 17,
|
||||
"angle": 0,
|
||||
"type": "code_body"
|
||||
},
|
||||
{
|
||||
"bbox": [
|
||||
867,
|
||||
160,
|
||||
1280,
|
||||
189
|
||||
],
|
||||
"lines": [
|
||||
{
|
||||
"bbox": [
|
||||
867,
|
||||
160,
|
||||
1280,
|
||||
189
|
||||
],
|
||||
"spans": [
|
||||
{
|
||||
"bbox": [
|
||||
867,
|
||||
160,
|
||||
1280,
|
||||
189
|
||||
],
|
||||
"type": "text",
|
||||
"content": "Algorithm 1 Modules for MCTSteg"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"index": 19,
|
||||
"angle": 0,
|
||||
"type": "code_caption"
|
||||
}
|
||||
],
|
||||
"index": 17,
|
||||
"sub_type": "code"
|
||||
}
|
||||
```
|
||||
|
||||
#### 内容列表 (content_list.json)
|
||||
|
||||
**文件命名格式**:`{原文件名}_content_list.json`
|
||||
|
||||
##### 文件格式说明
|
||||
vlm 后端的 content_list.json 文件结构与 pipeline 后端类似,伴随本次middle.json的变化,做了以下调整:
|
||||
|
||||
- 新增`code`类型,code类型包含两种"sub_type":
|
||||
* 分别是`code`和`algorithm`
|
||||
* 至少有`code_body`, 可选`code_caption`
|
||||
|
||||
- 新增`list`类型,list类型包含两种"sub_type":
|
||||
* `text`
|
||||
* `ref_text`
|
||||
|
||||
- 增加所有所有`discarded_blocks`的输出内容
|
||||
* `header`
|
||||
* `footer`
|
||||
* `page_number`
|
||||
* `aside_text`
|
||||
* `page_footnote`
|
||||
|
||||
##### 示例数据
|
||||
- code 类型 content
|
||||
```json
|
||||
{
|
||||
"type": "code",
|
||||
"sub_type": "algorithm",
|
||||
"code_caption": [
|
||||
"Algorithm 1 Modules for MCTSteg"
|
||||
],
|
||||
"code_body": "1: function GETCOORDINATE(d) \n2: $x \\gets d / l$ , $y \\gets d$ mod $l$ \n3: return $(x, y)$ \n4: end function \n5: function BESTCHILD(v) \n6: $C \\gets$ child set of $v$ \n7: $v' \\gets \\arg \\max_{c \\in C} \\mathrm{UCTScore}(c)$ \n8: $v'.n \\gets v'.n + 1$ \n9: return $v'$ \n10: end function \n11: function BACK PROPAGATE(v) \n12: Calculate $R$ using Equation 11 \n13: while $v$ is not a root node do \n14: $v.r \\gets v.r + R$ , $v \\gets v.p$ \n15: end while \n16: end function \n17: function RANDOMSEARCH(v) \n18: while $v$ is not a leaf node do \n19: Randomly select an untried action $a \\in A(v)$ \n20: Create a new node $v'$ \n21: $(x, y) \\gets \\mathrm{GETCOORDINATE}(v'.d)$ \n22: $v'.p \\gets v$ , $v'.d \\gets v.d + 1$ , $v'.\\Gamma \\gets v.\\Gamma$ \n23: $v'.\\gamma_{x,y} \\gets a$ \n24: if $a = -1$ then \n25: $v.lc \\gets v'$ \n26: else if $a = 0$ then \n27: $v.mc \\gets v'$ \n28: else \n29: $v.rc \\gets v'$ \n30: end if \n31: $v \\gets v'$ \n32: end while \n33: return $v$ \n34: end function \n35: function SEARCH(v) \n36: while $v$ is fully expanded do \n37: $v \\gets$ BESTCHILD(v) \n38: end while \n39: if $v$ is not a leaf node then \n40: $v \\gets$ RANDOMSEARCH(v) \n41: end if \n42: return $v$ \n43: end function",
|
||||
"bbox": [
|
||||
510,
|
||||
87,
|
||||
881,
|
||||
740
|
||||
],
|
||||
"page_idx": 0
|
||||
}
|
||||
```
|
||||
- list 类型 content
|
||||
```json
|
||||
{
|
||||
"type": "list",
|
||||
"sub_type": "text",
|
||||
"list_items": [
|
||||
"H.1 Introduction",
|
||||
"H.2 Example: Divide by Zero without Exception Handling",
|
||||
"H.3 Example: Divide by Zero with Exception Handling",
|
||||
"H.4 Summary"
|
||||
],
|
||||
"bbox": [
|
||||
174,
|
||||
155,
|
||||
818,
|
||||
333
|
||||
],
|
||||
"page_idx": 0
|
||||
}
|
||||
```
|
||||
- discarded 类型 content
|
||||
```json
|
||||
[{
|
||||
"type": "header",
|
||||
"text": "Journal of Hydrology 310 (2005) 253-265",
|
||||
"bbox": [
|
||||
363,
|
||||
164,
|
||||
623,
|
||||
177
|
||||
],
|
||||
"page_idx": 0
|
||||
},
|
||||
{
|
||||
"type": "page_footnote",
|
||||
"text": "* Corresponding author. Address: Forest Science Centre, Department of Sustainability and Environment, P.O. Box 137, Heidelberg, Vic. 3084, Australia. Tel.: +61 3 9450 8719; fax: +61 3 9450 8644.",
|
||||
"bbox": [
|
||||
71,
|
||||
815,
|
||||
915,
|
||||
841
|
||||
],
|
||||
"page_idx": 0
|
||||
}]
|
||||
```
|
||||
|
||||
|
||||
## 总结
|
||||
|
||||
以上文件为 MinerU 的完整输出结果,用户可根据需要选择合适的文件进行后续处理:
|
||||
|
||||
- **模型输出**(使用原始输出):
|
||||
* model.json
|
||||
|
||||
- **调试和验证**(使用可视化文件):
|
||||
* layout.pdf
|
||||
* spans.pdf
|
||||
|
||||
- **内容提取**(使用简化文件):
|
||||
* *.md
|
||||
* content_list.json
|
||||
|
||||
- **二次开发**(使用结构化文件):
|
||||
* middle.json
|
||||
@@ -0,0 +1,365 @@
|
||||
## 基于Triton的ROCm 不同后端实现优化,基本实现vllm后端正常推理,以及pipeline后端中第一步layout用的DocLayout-YOLO
|
||||
|
||||
**已有完整python vllm和mineru环境直接跳转第五步!!!**
|
||||
**其他GPU执行问题可以参考,先prof查看定位找到哪个算子问题,然后triton后端实现即可**
|
||||
测试了一下,基本和MinerU官网效果差不多,用AMD的人也不是很多,就在评论区分享给大家了
|
||||
|
||||
### 1.结果介绍
|
||||
**补充一个200页的PDF python编程书测试一下速度,可以到1.99it/s:**
|
||||
Two Step Extraction: 100%|████████████████████████████████████████| 200/200 [01:40<00:00, 1.99it/s]
|
||||
|
||||
**下面为之前14学术论文测试结果:**
|
||||
7900xtx mineru-gradio --server-name 0.0.0.0 --server-port 7860 --enable-vllm-engine true 速度大概为**1.6-1.8s/it**,没有仔细测试,简单试了两个文档。第二种矩阵乘法代替原来的dots点乘可以进一步提速到1.3s/it,优化后的主要算子耗时在hipblast(这个没法提升了)和vllm triton后端,各占25%耗时吧,vllm tirion后端这个这个只能等官方优化了。。。。
|
||||
doclayout-yolo的layout速度从原来的1.6it/s提高到15it/s,注意需要缓存一下输入的pdf尺寸后,triton必须要缓存尺寸没办法。主要是为了保留模型输入输出接口,最小代码改动。
|
||||
采用-b vlm-vllm-engine模式举个例子
|
||||
|
||||
---
|
||||
**测试结果为优化为5d矩阵乘代替原来的点积结果:**
|
||||
2025-10-05 15:45:12.985 | INFO | mineru.backend.vlm.vlm_analyze:get_model:128 - get vllm-engine predictor cost: 18.45s
|
||||
Adding requests: 100%|████████████████████████████████████████████████████████████████████████████████| 14/14 [00:01<00:00, 12.20it/s]
|
||||
Processed prompts: 100%|█████████████████████| 14/14 [00:08<00:00, 1.56it/s, est. speed input: 2174.18 toks/s, output: 791.87 toks/s]
|
||||
Adding requests: 100%|█████████████████████████████████████████████████████████████████████████████| 278/278 [00:00<00:00, 323.03it/s]
|
||||
Processed prompts: 100%|██████████████████| 278/278 [00:07<00:00, 37.63it/s, est. speed input: 5264.66 toks/s, output: 2733.31 toks/s]
|
||||
|
||||
mineru-gradio --server-name 0.0.0.0 --server-port 7860 --enable-vllm-engine true测试:
|
||||
2025-10-05 15:46:55.953 | WARNING | mineru.cli.common:convert_pdf_bytes_to_bytes_by_pypdfium2:54 - end_page_id is out of range, use pdf_docs length
|
||||
Two Step Extraction: 100%|████████████████████████████████████████████████████████████████████████████| 14/14 [00:18<00:00, 1.30s/it]
|
||||
|
||||
---
|
||||
|
||||
### 2.原因介绍
|
||||
AMD RDNA使用vllm后端有严重的性能问题,原因是因为vllm的**qwen2_vl.py**中有一个算子在rocm kernel上没有对应的实现,导致性能出现严重的卷积计算回退,一次执行花了12s,。。。。。。。。一言难尽。即**MIOpen 库中缺少模型中特定 Conv3d(bfloat16) 的优化内核**。
|
||||
DocLayout-YOLO的**g2l_crm.py**空洞卷积也是这个问题,专业的CDNA MI210也没解决这个问题
|
||||
正好一起处理了。
|
||||
|
||||
---
|
||||
|
||||
### 3.环境介绍
|
||||
System: Ubuntu 24.04.3 Kernel: Linux 6.14.0-33-generic ROCm version: 7.0.1
|
||||
python环境:
|
||||
python 3.12
|
||||
pytorch-triton-rocm 3.5.0+gitbbb06c03
|
||||
torch 2.10.0.dev20251001+rocm7.0
|
||||
torchvision 0.25.0.dev20251003+rocm7.0
|
||||
vllm 0.11.0rc2.dev198+g736fbf4c8.rocm701
|
||||
不同版本无所谓,处理方法是一样的。
|
||||
|
||||
---
|
||||
|
||||
### 4.前置环境安装
|
||||
```
|
||||
uv venv --python python3.12
|
||||
source .venv/bin/activate
|
||||
uv pip install --pre torch torchvision -i https://pypi.tuna.tsinghua.edu.cn/simple/ --extra-index-url https://download.pytorch.org/whl/nightly/rocm7.0
|
||||
uv pip install pip
|
||||
# 避免覆盖我们本地的pytorch,改用pip而没有继续使用uv pip
|
||||
pip install -U "mineru[core]" -i https://pypi.mirrors.ustc.edu.cn/simple/
|
||||
```
|
||||
vllm 安装参考官方手册[Vllm](https://docs.vllm.com.cn/en/latest/getting_started/installation/gpu.html#amd-rocm)
|
||||
```
|
||||
#手动安装aiter,vllm,amd-smi等,自行找一个位置clone,然后进入该目录吧
|
||||
git clone --recursive https://github.com/ROCm/aiter.git
|
||||
cd aiter
|
||||
git submodule sync; git submodule update --init --recursive
|
||||
python setup.py develop
|
||||
cd ..
|
||||
git clone https://github.com/vllm-project/vllm.git
|
||||
cd vllm/
|
||||
cp -r /opt/rocm/share/amd_smi ~/Pytorch/vllm/
|
||||
pip install amd_smi/
|
||||
pip install --upgrade numba \
|
||||
scipy \
|
||||
huggingface-hub[cli,hf_transfer] \
|
||||
setuptools_scm
|
||||
pip install -r requirements/rocm.txt
|
||||
export PYTORCH_ROCM_ARCH="gfx1100" #根据自己的GPU架构 rocminfo | grep gfx
|
||||
python setup.py develop
|
||||
```
|
||||
---
|
||||
|
||||
### 5.vllm中关键triton算子添加
|
||||
#### 这里我给出两种解决方法,第一种解决方法就是前面提到的优化到1.5到1.8s/it,第二种方法有手动优化算子到矩阵乘法,7900xtx肯定适用,大概1.3s/it,其他AMD GPU相对方案一也有提速,但是不一定是最佳速度实现,里面的手动部分可能需要微调。
|
||||
**注意pip把triton 后端的flash_attn卸载了,搞了半天各种尝试还是报错,问题比较大,直接不用就行了**
|
||||
```
|
||||
#定位自己vllm位置XXX
|
||||
pip show vllm
|
||||
```
|
||||
**关键更改**
|
||||
XXX/vllm/model_executor/models/qwen2_vl.py文件:
|
||||
**1.qwen2_vl.py文件33行下增加from .qwen2_vl_vision_kernels import triton_conv3d_patchify**
|
||||
```
|
||||
from collections.abc import Iterable, Mapping, Sequence
|
||||
from functools import partial
|
||||
from typing import Annotated, Any, Callable, Literal, Optional, Union
|
||||
|
||||
import torch
|
||||
import torch.nn as nn
|
||||
import torch.nn.functional as F
|
||||
from .qwen2_vl_vision_kernels import triton_conv3d_patchify
|
||||
```
|
||||
**接下来分为方案一(2.1和3.1)和方案二(2.2和3.2),选取一种实现即可**
|
||||
|
||||
---
|
||||
**方案1**
|
||||
**2.1qwen2_vl.py文件498行class Qwen2VisionPatchEmbed(nn.Module),PS.就是这玩意AMD没有现成的内核算子导致回退**
|
||||
```
|
||||
class Qwen2VisionPatchEmbed(nn.Module):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
patch_size: int = 14,
|
||||
temporal_patch_size: int = 2,
|
||||
in_channels: int = 3,
|
||||
embed_dim: int = 1152,
|
||||
) -> None:
|
||||
super().__init__()
|
||||
self.patch_size = patch_size
|
||||
self.temporal_patch_size = temporal_patch_size
|
||||
self.embed_dim = embed_dim
|
||||
|
||||
kernel_size = (temporal_patch_size, patch_size, patch_size)
|
||||
self.proj = nn.Conv3d(in_channels,
|
||||
embed_dim,
|
||||
kernel_size=kernel_size,
|
||||
stride=kernel_size,
|
||||
bias=False)
|
||||
def forward(self, x: torch.Tensor) -> torch.Tensor:
|
||||
L, C = x.shape
|
||||
x_reshaped = x.view(L, -1, self.temporal_patch_size, self.patch_size,
|
||||
self.patch_size)
|
||||
|
||||
# Call your custom Triton kernel instead of self.proj
|
||||
x_out = triton_conv3d_patchify(x_reshaped, self.proj.weight)
|
||||
|
||||
# The output of our kernel is already the correct shape [L, embed_dim]
|
||||
return x_out
|
||||
```
|
||||
**3.1XXX/vllm/model_executor/models/目录下创建qwen2_vl_vision_kernels.py文件,用triton实现**
|
||||
```
|
||||
import torch
|
||||
from vllm.triton_utils import tl, triton
|
||||
|
||||
@triton.jit
|
||||
def _conv3d_patchify_kernel(
|
||||
# Pointers to tensors
|
||||
X, W, Y,
|
||||
# Tensor dimensions
|
||||
N, C_in, D_in, H_in, W_in,
|
||||
C_out, KD, KH, KW,
|
||||
# Stride and padding for memory access
|
||||
stride_xn, stride_xc, stride_xd, stride_xh, stride_xw,
|
||||
stride_wn, stride_wc, stride_wd, stride_wh, stride_ww,
|
||||
stride_yn, stride_yc,
|
||||
# Triton-specific metaparameters
|
||||
BLOCK_SIZE: tl.constexpr,
|
||||
):
|
||||
"""
|
||||
Triton kernel for a non-overlapping 3D patching convolution.
|
||||
Each kernel instance computes one output value for one patch.
|
||||
"""
|
||||
# Get the program IDs for the N (patch) and C_out (output channel) dimensions
|
||||
pid_n = tl.program_id(0) # The index of the patch we are processing
|
||||
pid_cout = tl.program_id(1) # The index of the output channel we are computing
|
||||
|
||||
# --- Calculate memory pointers ---
|
||||
# Pointer to the start of the current input patch
|
||||
x_ptr = X + (pid_n * stride_xn)
|
||||
# Pointer to the start of the current filter (weight)
|
||||
w_ptr = W + (pid_cout * stride_wn)
|
||||
# Pointer to where the output will be stored
|
||||
y_ptr = Y + (pid_n * stride_yn + pid_cout * stride_yc)
|
||||
|
||||
# --- Perform the convolution (element-wise product and sum) ---
|
||||
# This is a dot product between the flattened patch and the flattened filter.
|
||||
accumulator = tl.zeros((BLOCK_SIZE,), dtype=tl.float32)
|
||||
|
||||
# Iterate over the elements of the patch/filter
|
||||
for c_offset in range(0, C_in):
|
||||
for d_offset in range(0, KD):
|
||||
for h_offset in range(0, KH):
|
||||
# Unrolled loop for the innermost dimension (width) for performance
|
||||
for w_offset in range(0, KW, BLOCK_SIZE):
|
||||
# Create masks to handle cases where KW is not a multiple of BLOCK_SIZE
|
||||
w_range = w_offset + tl.arange(0, BLOCK_SIZE)
|
||||
w_mask = w_range < KW
|
||||
|
||||
# Calculate offsets to load data
|
||||
patch_offset = (c_offset * stride_xc + d_offset * stride_xd +
|
||||
h_offset * stride_xh + w_range * stride_xw)
|
||||
filter_offset = (c_offset * stride_wc + d_offset * stride_wd +
|
||||
h_offset * stride_wh + w_range * stride_ww)
|
||||
|
||||
# Load patch and filter data, applying masks
|
||||
patch_vals = tl.load(x_ptr + patch_offset, mask=w_mask, other=0.0)
|
||||
filter_vals = tl.load(w_ptr + filter_offset, mask=w_mask, other=0.0)
|
||||
|
||||
# Multiply and accumulate
|
||||
accumulator += patch_vals.to(tl.float32) * filter_vals.to(tl.float32)
|
||||
|
||||
# Sum the accumulator block and store the single output value
|
||||
output_val = tl.sum(accumulator, axis=0)
|
||||
tl.store(y_ptr, output_val)
|
||||
|
||||
|
||||
def triton_conv3d_patchify(x: torch.Tensor, weight: torch.Tensor) -> torch.Tensor:
|
||||
"""
|
||||
Python wrapper for the 3D patching convolution Triton kernel.
|
||||
"""
|
||||
# Get tensor dimensions
|
||||
N, C_in, D_in, H_in, W_in = x.shape
|
||||
C_out, _, KD, KH, KW = weight.shape
|
||||
|
||||
# Create the output tensor
|
||||
# The output of this specific conv is (N, C_out, 1, 1, 1), which we squeeze
|
||||
Y = torch.empty((N, C_out), dtype=x.dtype, device=x.device)
|
||||
|
||||
# Define the grid for launching the Triton kernel
|
||||
# Each kernel instance handles one patch (N) for one output channel (C_out)
|
||||
grid = (N, C_out)
|
||||
|
||||
# Launch the kernel
|
||||
# We pass all strides to make the kernel flexible
|
||||
_conv3d_patchify_kernel[grid](
|
||||
x, weight, Y,
|
||||
N, C_in, D_in, H_in, W_in,
|
||||
C_out, KD, KH, KW,
|
||||
x.stride(0), x.stride(1), x.stride(2), x.stride(3), x.stride(4),
|
||||
weight.stride(0), weight.stride(1), weight.stride(2), weight.stride(3), weight.stride(4),
|
||||
Y.stride(0), Y.stride(1),
|
||||
BLOCK_SIZE=16, # A reasonable default, can be tuned
|
||||
)
|
||||
|
||||
return Y
|
||||
```
|
||||
---
|
||||
**方案2**
|
||||
**2.2qwen2_vl.py文件498行class Qwen2VisionPatchEmbed(nn.Module)函数,PS.就是这玩意AMD没有现成的内核算子导致回退,这里我们直接5D张量一步到位,改为矩阵乘法**
|
||||
```
|
||||
class Qwen2VisionPatchEmbed(nn.Module):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
patch_size: int = 14,
|
||||
temporal_patch_size: int = 2,
|
||||
in_channels: int = 3,
|
||||
embed_dim: int = 1152,
|
||||
) -> None:
|
||||
super().__init__()
|
||||
self.patch_size = patch_size
|
||||
self.temporal_patch_size = temporal_patch_size
|
||||
self.embed_dim = embed_dim
|
||||
|
||||
kernel_size = (temporal_patch_size, patch_size, patch_size)
|
||||
|
||||
self.proj = nn.Conv3d(in_channels,
|
||||
embed_dim,
|
||||
kernel_size=kernel_size,
|
||||
stride=kernel_size,
|
||||
bias=False)
|
||||
|
||||
def forward(self, x: torch.Tensor) -> torch.Tensor:
|
||||
L, C = x.shape
|
||||
x_reshaped_5d = x.view(L, -1, self.temporal_patch_size, self.patch_size,
|
||||
self.patch_size)
|
||||
|
||||
return triton_conv3d_patchify(x_reshaped_5d, self.proj.weight)
|
||||
```
|
||||
**3.2XXX/vllm/model_executor/models/目录下创建qwen2_vl_vision_kernels.py文件,用triton实现**
|
||||
```
|
||||
import torch
|
||||
from vllm.triton_utils import tl, triton
|
||||
|
||||
@triton.jit
|
||||
def _conv_gemm_kernel(
|
||||
A, B, C, M, N, K,
|
||||
stride_am, stride_ak,
|
||||
stride_bk, stride_bn,
|
||||
stride_cm, stride_cn,
|
||||
BLOCK_M: tl.constexpr, BLOCK_N: tl.constexpr, BLOCK_K: tl.constexpr,
|
||||
):
|
||||
pid_m = tl.program_id(0)
|
||||
pid_n = tl.program_id(1)
|
||||
offs_m = pid_m * BLOCK_M + tl.arange(0, BLOCK_M)
|
||||
offs_n = pid_n * BLOCK_N + tl.arange(0, BLOCK_N)
|
||||
offs_k = tl.arange(0, BLOCK_K)
|
||||
a_ptrs = A + (offs_m[:, None] * stride_am + offs_k[None, :] * stride_ak)
|
||||
b_ptrs = B + (offs_k[:, None] * stride_bk + offs_n[None, :] * stride_bn)
|
||||
accumulator = tl.zeros((BLOCK_M, BLOCK_N), dtype=tl.float32)
|
||||
for k in range(0, K, BLOCK_K):
|
||||
a = tl.load(a_ptrs, mask=(offs_m[:, None] < M) & (offs_k[None, :] < K), other=0.0)
|
||||
b = tl.load(b_ptrs, mask=(offs_k[:, None] < K) & (offs_n[None, :] < N), other=0.0)
|
||||
accumulator += tl.dot(a, b)
|
||||
a_ptrs += BLOCK_K * stride_ak
|
||||
b_ptrs += BLOCK_K * stride_bk
|
||||
offs_k += BLOCK_K
|
||||
c = accumulator.to(C.dtype.element_ty)
|
||||
offs_cm = pid_m * BLOCK_M + tl.arange(0, BLOCK_M)
|
||||
offs_cn = pid_n * BLOCK_N + tl.arange(0, BLOCK_N)
|
||||
c_ptrs = C + stride_cm * offs_cm[:, None] + stride_cn * offs_cn[None, :]
|
||||
c_mask = (offs_cm[:, None] < M) & (offs_cn[None, :] < N)
|
||||
tl.store(c_ptrs, c, mask=c_mask)
|
||||
|
||||
def triton_conv3d_patchify(x_5d: torch.Tensor, weight_5d: torch.Tensor) -> torch.Tensor:
|
||||
N_patches, _, _, _, _ = x_5d.shape
|
||||
C_out, _, _, _, _ = weight_5d.shape
|
||||
A = x_5d.view(N_patches, -1)
|
||||
B = weight_5d.view(C_out, -1).transpose(0, 1).contiguous()
|
||||
M, K = A.shape
|
||||
_K, N = B.shape
|
||||
assert K == _K
|
||||
C = torch.empty((M, N), device=A.device, dtype=A.dtype)
|
||||
|
||||
# --- 针对7900xtx的手动调优配置,其他GPU的最优组合可能需要自行寻找,AMD的autotune效果就是没有效果 ---
|
||||
best_config = {
|
||||
'BLOCK_M': 128,
|
||||
'BLOCK_N': 128,
|
||||
'BLOCK_K': 32,
|
||||
}
|
||||
num_stages = 4
|
||||
num_warps = 8
|
||||
|
||||
grid = (triton.cdiv(M, best_config['BLOCK_M']),
|
||||
triton.cdiv(N, best_config['BLOCK_N']))
|
||||
|
||||
_conv_gemm_kernel[grid](
|
||||
A, B, C,
|
||||
M, N, K,
|
||||
A.stride(0), A.stride(1),
|
||||
B.stride(0), B.stride(1),
|
||||
C.stride(0), C.stride(1),
|
||||
**best_config,
|
||||
num_stages=num_stages,
|
||||
num_warps=num_warps
|
||||
)
|
||||
|
||||
return C
|
||||
```
|
||||
---
|
||||
**4.关闭终端后再次使用mineru-gradio会报一个Lora错误,修改代码跳过它**
|
||||
```
|
||||
pip show mineru_vl_utils
|
||||
```
|
||||
|
||||
打开该文件XXX/mineru_vl_utils/vlm_client/vllm_async_engine_client.py修改第58行self.tokenizer = vllm_async_llm.tokenizer.get_lora_tokenizer()为:
|
||||
```
|
||||
try:
|
||||
self.tokenizer = vllm_async_llm.tokenizer.get_lora_tokenizer()
|
||||
except AttributeError:
|
||||
# 如果没有 get_lora_tokenizer 方法,直接使用原始 tokenizer
|
||||
self.tokenizer = vllm_async_llm.tokenizer
|
||||
```
|
||||
|
||||
**最后整两个环境变量后愉快玩耍即可**
|
||||
```
|
||||
export MINERU_MODEL_SOURCE=modelscope
|
||||
export TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1
|
||||
```
|
||||
---
|
||||
|
||||
### 6.vllm后端已经没有问题,下面是pipeline 中layout用的doclayout-yolo模型空洞卷积问题
|
||||
### 我在 [DocLayout-YOLO](https://github.com/opendatalab/DocLayout-YOLO/issues/120#issuecomment-3368144275) 下做了一个回答,因此 pipeline 的空洞卷积问题不在这里赘述,直接点击链接查看即可。
|
||||
查看自己doclayout-yolo安装位置如下,然后进入修改链接中回复介绍的文件即可
|
||||
```
|
||||
pip show doclayout-yolo
|
||||
```
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
#### 1 系统
|
||||
NAME="Ubuntu"
|
||||
VERSION="20.04.6 LTS (Focal Fossa)"
|
||||
昇腾910B2
|
||||
驱动 23.0.6.2
|
||||
CANN 7.5.X
|
||||
Miner U 2.1.9
|
||||
#### 2 踩坑记录
|
||||
坑1: **图形库相关的问题,总之就是动态库导致TLS的内存分配失败(OpenCV库在ARM64架构上的兼容性问题)**
|
||||
⭐这个错误 ImportError: /lib/aarch64-linux-gnu/libGLdispatch.so.0: cannot allocate memory in static TLS block 是由于OpenCV库在ARM64架构上的兼容性问题导致的。从错误堆栈可以看到,问题出现在导入cv2模块时,这发生在MinerU的VLM后端初始化过程中。
|
||||
解决方法:
|
||||
1 安装减少内存问题的opencv版本
|
||||
```
|
||||
pip install --upgrade albumentations albucore simsimd# Uninstall current opencv
|
||||
pip uninstall opencv-python opencv-contrib-python
|
||||
|
||||
# Install headless version (no GUI dependencies)
|
||||
pip install opencv-python-headless
|
||||
|
||||
python -c "import cv2; print(cv2.__version__)"2 apt-get install一些包
|
||||
```
|
||||
换成清华源然后重命名为sources.list.tuna,然后挪到根目录下面
|
||||
```
|
||||
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
|
||||
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
|
||||
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
|
||||
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiversesudo apt-get update -o Dir::Etc::sourcelist="sources.list.tuna" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
|
||||
sudo apt-get install libgl1-mesa-glx -o Dir::Etc::sourcelist="sources.list.tuna" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
|
||||
sudo apt-get install libglib2.0-0 libsm6 libxext6 libxrender-dev libgomp1 -o Dir::Etc::sourcelist="sources.list.tuna" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
|
||||
sudo apt-get install libgl1-mesa-dev libgles2-mesa-dev -o Dir::Etc::sourcelist="sources.list.tuna" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
|
||||
sudo apt-get install libgomp1 -o Dir::Etc::sourcelist="sources.list.tuna" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
|
||||
export OPENCV_IO_ENABLE_OPENEXR=0 export QT_QPA_PLATFORM=offscreen
|
||||
```
|
||||
↑这些不知道哪些好使,或者有没有好使的
|
||||
|
||||
3 强制覆盖conda环境自带的动态库(conda的和系统的冲突)
|
||||
```
|
||||
查找:find /usr/lib /lib /root/.local/conda -name "libgomp.so*" 2>/dev/null
|
||||
export LD_PRELOAD="/usr/lib/aarch64-linux-gnu/libstdc++.so.6:/usr/lib/aarch64-linux-gnu/libgomp.so.1"
|
||||
export LD_PRELOAD=/lib/aarch64-linux-gnu/libGLdispatch.so.0:$LD_PRELOAD
|
||||
```
|
||||
此外,还可以把conda环境中自带的的强制挪走
|
||||
```
|
||||
mv $CONDA_PREFIX/lib/libstdc++.so.6 $CONDA_PREFIX/lib/libstdc++.so.6.bak
|
||||
mv $CONDA_PREFIX/lib/libgomp.so.1 $CONDA_PREFIX/lib/libgomp.so.1.bak
|
||||
mv $CONDA_PREFIX/lib/libGLdispatch.so.0 $CONDA_PREFIX/lib/libGLdispatch.so.0.bak # 如果有的话
|
||||
simsimd包相关:
|
||||
mv /root/.local/conda/envs/pdfparser/lib/python3.10/site-packages/simsimd./libgomp-947d5fa1.so.1.0.0 /root/.local/conda/envs/pdfparser/lib/python3.10/site-packages/simsimd./libgomp-947d5fa1.so.1.0.0.bak
|
||||
```
|
||||
或者:
|
||||
降级simsimd 3.7.2
|
||||
降级albumentations 1.3.1
|
||||
sklean包相关:
|
||||
```
|
||||
# 找到 scikit-learn 内部的 libgomp 路径
|
||||
SKLEARN_LIBGOMP="/root/.local/conda/envs/pdfparser/lib/python3.10/site-packages/scikit_learn.libs/libgomp-947d5fa1.so.1.0.0"
|
||||
|
||||
# 预加载这个特定的 libgomp 版本
|
||||
export LD_PRELOAD="$SKLEARN_LIBGOMP:$LD_PRELOAD"
|
||||
```
|
||||
4 其他
|
||||
torch / torch_npu 2.5.1
|
||||
pip install "numpy<2.0" 2.0和昇腾不兼容
|
||||
export MINERU_MODEL_SOURCE=modelscope
|
||||
@@ -0,0 +1,117 @@
|
||||
## 在C500+MACA上部署并使用Mineru
|
||||
|
||||
### 获取MACA镜像,包含torch-maca,maca,sglang-maca
|
||||
|
||||
镜像获取地址:https://developer.metax-tech.com/softnova/docker ,
|
||||
选择maca-c500-pytorch:2.33.0.6-ubuntu22.04-amd64
|
||||
|
||||
若在docker上部署镜像则需要启动GPU设备访问
|
||||
```bash
|
||||
docker run --device=/dev/dri --device=/dev/mxcd....
|
||||
```
|
||||
|
||||
#### 注意事项
|
||||
|
||||
由于此镜像默认开启TORCH_ALLOW_TF32_CUBLAS_OVERRIDE,会导致backed:vlm-transformers推理结果错误
|
||||
|
||||
```bash
|
||||
unset TORCH_ALLOW_TF32_CUBLAS_OVERRIDE
|
||||
```
|
||||
|
||||
### 安装MinerU
|
||||
|
||||
使用--no-deps,去除对一些cuda版本包的依赖,后续采用pip install-r requirements.txt 安装其他依赖
|
||||
```bash
|
||||
pip install -U "mineru[core]" --no-deps
|
||||
```
|
||||
|
||||
```tex
|
||||
boto3>=1.28.43
|
||||
click>=8.1.7
|
||||
loguru>=0.7.2
|
||||
numpy==1.26.4
|
||||
pdfminer.six==20250506
|
||||
tqdm>=4.67.1
|
||||
requests
|
||||
httpx
|
||||
pillow>=11.0.0
|
||||
pypdfium2>=4.30.0
|
||||
pypdf>=5.6.0
|
||||
reportlab
|
||||
pdftext>=0.6.2
|
||||
modelscope>=1.26.0
|
||||
huggingface-hub>=0.32.4
|
||||
json-repair>=0.46.2
|
||||
opencv-python>=4.11.0.86
|
||||
fast-langdetect>=0.2.3,<0.3.0
|
||||
transformers>=4.51.1
|
||||
accelerate>=1.5.1
|
||||
pydantic
|
||||
matplotlib>=3.10,<4
|
||||
ultralytics>=8.3.48,<9
|
||||
dill>=0.3.8,<1
|
||||
rapid_table>=1.0.5,<2.0.0
|
||||
PyYAML>=6.0.2,<7
|
||||
ftfy>=6.3.1,<7
|
||||
openai>=1.70.0,<2
|
||||
shapely>=2.0.7,<3
|
||||
pyclipper>=1.3.0,<2
|
||||
omegaconf>=2.3.0,<3
|
||||
transformers>=4.49.0,!=4.51.0,<5.0.0
|
||||
fastapi
|
||||
python-multipart
|
||||
uvicorn
|
||||
gradio>=5.34,<6
|
||||
gradio-pdf>=0.0.22
|
||||
albumentations
|
||||
beautifulsoup4
|
||||
scikit-image==0.25.0
|
||||
outlines==0.1.11
|
||||
magika>=0.6.2,<0.7.0
|
||||
mineru-vl-utils>=0.1.6,<1
|
||||
```
|
||||
上述内容保存为requirments.txt,进行安装
|
||||
```bash
|
||||
pip install -r requirments.txt
|
||||
```
|
||||
安装doclayout_yolo,这里doclayout_yolo会依赖torch-cuda,使用--no-deps
|
||||
```bash
|
||||
pip install doclayout-yolo --no-deps
|
||||
```
|
||||
### 在线使用
|
||||
**基础使用命令为:mineru -p <input_path> -o <output_path> -b vlm-transformers**
|
||||
|
||||
- `<input_path>`: Local PDF/image file or directory
|
||||
- `<output_path>`: Output directory
|
||||
- -b --backend [pipeline|vlm-transformers|vlm-vllm-engine|vlm-http-client] (default:pipeline)<br/>
|
||||
|
||||
其他详细使用命令可参考官方文档[Quick Usage - MinerU](https://opendatalab.github.io/MinerU/usage/quick_usage/#quick-model-source-configuration)
|
||||
|
||||
### 离线使用
|
||||
|
||||
**所用模型为本地模型,需要设置环境变量和config配置文件**<br/>
|
||||
#### 下载模型到本地
|
||||
通过mineru交互式命令行工具进行下载,下载完后会自动更新mineru.json配置文件
|
||||
```bash
|
||||
mineru-models-download
|
||||
```
|
||||
也可以在[HuggingFace](http://www.huggingface.co.)或[ModelScope](https://www.modelscope.cn/home)找到所需模型源(PDF-Extract-Kit-1.0和MinerU2.5-2509-1.2B)进行下载,
|
||||
下载完成后,创建mineru.json文件,按如下进行修改
|
||||
```json
|
||||
{
|
||||
"models-dir": {
|
||||
"pipeline": "/path/pdf-extract-kit-1.0/",
|
||||
"vlm": "/path/MinerU2.5-2509-1.2B"
|
||||
},
|
||||
"config_version": "1.3.0"
|
||||
}
|
||||
```
|
||||
path为本地模型的存储路径,其中models-dir为本地模型的路径,pipeline代表backend为pipeline时,所需要的模型路径,vlm代表backend为vlm-开头,所需要的模型路径
|
||||
|
||||
#### 修改环境变量
|
||||
|
||||
```bash
|
||||
export MINERU_MODEL_SOURCE=local
|
||||
export MINERU_TOOLS_CONFIG_JSON=/path/mineru.json //此环境变量为配置文件的路径
|
||||
```
|
||||
修改完成后即可正常使用<br/>
|
||||
@@ -0,0 +1,73 @@
|
||||
# TECO适配
|
||||
|
||||
## 快速开始
|
||||
使用本工具执行推理的主要流程如下:
|
||||
1. 基础环境安装:介绍推理前需要完成的基础环境检查和安装。
|
||||
3. 构建Docker环境:介绍如何使用Dockerfile创建模型推理时所需的Docker环境。
|
||||
4. 启动推理:介绍如何启动推理。
|
||||
|
||||
### 1 基础环境安装
|
||||
请参考[Teco用户手册的安装准备章节](http://docs.tecorigin.com/release/torch_2.4/v2.2.0/#fc980a30f1125aa88bad4246ff0cedcc),完成训练前的基础环境检查和安装。
|
||||
|
||||
### 2 构建docker
|
||||
#### 2.1 执行以下命令,下载Docker镜像至本地(Docker镜像包:pytorch-3.0.0-torch_sdaa3.0.0.tar)
|
||||
|
||||
wget 镜像下载链接(链接获取请联系太初内部人员)
|
||||
|
||||
#### 2.2 校验Docker镜像包,执行以下命令,生成MD5码是否与官方MD5码b2a7f60508c0d199a99b8b6b35da3954一致:
|
||||
|
||||
md5sum pytorch-3.0.0-torch_sdaa3.0.0.tar
|
||||
|
||||
#### 2.3 执行以下命令,导入Docker镜像
|
||||
|
||||
docker load < pytorch-3.0.0-torch_sdaa3.0.0.tar
|
||||
|
||||
#### 2.4 执行以下命令,构建名为MinerU的Docker容器
|
||||
|
||||
docker run -itd --name="MinerU" --net=host --device=/dev/tcaicard0 --device=/dev/tcaicard1 --device=/dev/tcaicard2 --device=/dev/tcaicard3 --cap-add SYS_PTRACE --cap-add SYS_ADMIN --shm-size 64g jfrog.tecorigin.net/tecotp-docker/release/ubuntu22.04/x86_64/pytorch:3.0.0-torch_sdaa3.0.0 /bin/bash
|
||||
|
||||
#### 2.5 执行以下命令,进入名称为tecopytorch_docker的Docker容器。
|
||||
|
||||
docker exec -it MinerU bash
|
||||
|
||||
|
||||
### 3 执行以下命令安装MinerU
|
||||
- 安装前的准备
|
||||
```
|
||||
cd <MinerU>
|
||||
pip install --upgrade pip
|
||||
pip install uv
|
||||
```
|
||||
- 由于镜像中安装了torch,并且不需要安装nvidia-nccl-cu12、nvidia-cudnn-cu12等包,因此需要注释掉一部分安装依赖。
|
||||
- 请注释掉<MinerU>/pyproject.toml文件中所有的"doclayout_yolo==0.0.4"依赖,并且将torch开头的包也注释掉。
|
||||
- 执行以下命令安装MinerU
|
||||
```
|
||||
uv pip install -e .[core]
|
||||
```
|
||||
- 下载安装doclayout_yolo==0.0.4
|
||||
```
|
||||
pip install doclayout_yolo==0.0.4 --no-deps
|
||||
```
|
||||
- 下载安装其他包(doclayout_yolo==0.0.4的依赖)
|
||||
```
|
||||
pip install albumentations py-cpuinfo seaborn thop numpy==1.24.4
|
||||
```
|
||||
- 由于部分张量内部内存分布不连续,需要修改如下两个文件
|
||||
<ultralytics安装路径>/ultralytics/utils/tal.py(330行左右,将view --> reshape)
|
||||
<doclayout_yolo安装路径>/doclayout_yolo/utils/tal.py(375行左右,将view --> reshape)
|
||||
### 4 执行推理
|
||||
- 开启sdaa环境
|
||||
```
|
||||
export TORCH_SDAA_AUTOLOAD=cuda_migrate
|
||||
```
|
||||
- 首次运行推理命令前请添加以下环境下载模型权重
|
||||
```
|
||||
export HF_ENDPOINT=https://hf-mirror.com
|
||||
```
|
||||
- 运行以下命令执行推理
|
||||
```
|
||||
mineru -p 'input path' -o 'output_path' --lang 'model_name'
|
||||
```
|
||||
其中model_name可从'ch', 'ch_server', 'ch_lite', 'en', 'korean', 'japan', 'chinese_cht', 'ta', 'te', 'ka', 'latin', 'arabic', 'east_slavic', 'cyrillic', 'devanagari'选择
|
||||
### 5 适配用到的软件栈版本列表
|
||||
使用v3.0.0软件栈版本适配,获取方式联系太初内部人员
|
||||
@@ -0,0 +1,53 @@
|
||||
# 命令行参数进阶
|
||||
|
||||
## vllm 加速参数优化
|
||||
|
||||
### 性能优化参数
|
||||
> [!TIP]
|
||||
> 如果您已经可以正常使用vllm对vlm模型进行加速推理,但仍然希望进一步提升推理速度,可以尝试以下参数:
|
||||
>
|
||||
> - 如果您有超过多张显卡,可以使用vllm的多卡并行模式来增加吞吐量:`--data-parallel-size 2`
|
||||
|
||||
### 参数传递说明
|
||||
> [!TIP]
|
||||
> - 所有vllm官方支持的参数都可用通过命令行参数传递给 MinerU,包括以下命令:`mineru`、`mineru-vllm-server`、`mineru-gradio`、`mineru-api`
|
||||
> - 如果您想了解更多有关`vllm`的参数使用方法,请参考 [vllm官方文档](https://docs.vllm.ai/en/latest/cli/serve.html)
|
||||
|
||||
## GPU 设备选择与配置
|
||||
|
||||
### CUDA_VISIBLE_DEVICES 基本用法
|
||||
> [!TIP]
|
||||
> - 任何情况下,您都可以通过在命令行的开头添加`CUDA_VISIBLE_DEVICES` 环境变量来指定可见的 GPU 设备:
|
||||
> ```bash
|
||||
> CUDA_VISIBLE_DEVICES=1 mineru -p <input_path> -o <output_path>
|
||||
> ```
|
||||
> - 这种指定方式对所有的命令行调用都有效,包括 `mineru`、`mineru-vllm-server`、`mineru-gradio` 和 `mineru-api`,且对`pipeline`、`vlm`后端均适用。
|
||||
|
||||
### 常见设备配置示例
|
||||
> [!TIP]
|
||||
> 以下是一些常见的 `CUDA_VISIBLE_DEVICES` 设置示例:
|
||||
> ```bash
|
||||
> CUDA_VISIBLE_DEVICES=1 # Only device 1 will be seen
|
||||
> CUDA_VISIBLE_DEVICES=0,1 # Devices 0 and 1 will be visible
|
||||
> CUDA_VISIBLE_DEVICES="0,1" # Same as above, quotation marks are optional
|
||||
> CUDA_VISIBLE_DEVICES=0,2,3 # Devices 0, 2, 3 will be visible; device 1 is masked
|
||||
> CUDA_VISIBLE_DEVICES="" # No GPU will be visible
|
||||
> ```
|
||||
|
||||
## 实际应用场景
|
||||
|
||||
> [!TIP]
|
||||
> 以下是一些可能的使用场景:
|
||||
>
|
||||
> - 如果您有多张显卡,需要指定卡0和卡1,并使用多卡并行来启动`vllm-server`,可以使用以下命令:
|
||||
> ```bash
|
||||
> CUDA_VISIBLE_DEVICES=0,1 mineru-vllm-server --port 30000 --data-parallel-size 2
|
||||
> ```
|
||||
>
|
||||
> - 如果您有多张显卡,需要在卡0和卡1上启动两个`fastapi`服务,并分别监听不同的端口,可以使用以下命令:
|
||||
> ```bash
|
||||
> # 在终端1中
|
||||
> CUDA_VISIBLE_DEVICES=0 mineru-api --host 127.0.0.1 --port 8000
|
||||
> # 在终端2中
|
||||
> CUDA_VISIBLE_DEVICES=1 mineru-api --host 127.0.0.1 --port 8001
|
||||
> ```
|
||||
@@ -0,0 +1,108 @@
|
||||
# 命令行工具使用说明
|
||||
|
||||
## 查看帮助信息
|
||||
要查看 MinerU 命令行工具的帮助信息,可以使用 `--help` 参数。以下是各个命令行工具的帮助信息示例:
|
||||
```bash
|
||||
mineru --help
|
||||
Usage: mineru [OPTIONS]
|
||||
|
||||
Options:
|
||||
-v, --version 显示版本并退出
|
||||
-p, --path PATH 输入文件路径或目录(必填)
|
||||
-o, --output PATH 输出目录(必填)
|
||||
-m, --method [auto|txt|ocr] 解析方法:auto(默认)、txt、ocr(仅用于 pipeline 后端)
|
||||
-b, --backend [pipeline|vlm-transformers|vlm-vllm-engine|vlm-http-client]
|
||||
解析后端(默认为 pipeline)
|
||||
-l, --lang [ch|ch_server|ch_lite|en|korean|japan|chinese_cht|ta|te|ka|th|el|latin|arabic|east_slavic|cyrillic|devanagari]
|
||||
指定文档语言(可提升 OCR 准确率,仅用于 pipeline 后端)
|
||||
-u, --url TEXT 当使用 http-client 时,需指定服务地址
|
||||
-s, --start INTEGER 开始解析的页码(从 0 开始)
|
||||
-e, --end INTEGER 结束解析的页码(从 0 开始)
|
||||
-f, --formula BOOLEAN 是否启用公式解析(默认开启)
|
||||
-t, --table BOOLEAN 是否启用表格解析(默认开启)
|
||||
-d, --device TEXT 推理设备(如 cpu/cuda/cuda:0/npu/mps,仅 pipeline 后端)
|
||||
--vram INTEGER 单进程最大 GPU 显存占用(GB)(仅 pipeline 后端)
|
||||
--source [huggingface|modelscope|local]
|
||||
模型来源,默认 huggingface
|
||||
--help 显示帮助信息
|
||||
```
|
||||
```bash
|
||||
mineru-api --help
|
||||
Usage: mineru-api [OPTIONS]
|
||||
|
||||
Options:
|
||||
--host TEXT 服务器主机地址(默认:127.0.0.1)
|
||||
--port INTEGER 服务器端口(默认:8000)
|
||||
--reload 启用自动重载(开发模式)
|
||||
--help 显示此帮助信息并退出
|
||||
```
|
||||
```bash
|
||||
mineru-gradio --help
|
||||
Usage: mineru-gradio [OPTIONS]
|
||||
|
||||
Options:
|
||||
--enable-example BOOLEAN 启用示例文件输入(需要将示例文件放置在当前
|
||||
执行命令目录下的 `example` 文件夹中)
|
||||
--enable-vllm-engine BOOLEAN 启用 vllm 引擎后端以提高处理速度
|
||||
--enable-api BOOLEAN 启用 Gradio API 以提供应用程序服务
|
||||
--max-convert-pages INTEGER 设置从 PDF 转换为 Markdown 的最大页数
|
||||
--server-name TEXT 设置 Gradio 应用程序的服务器主机名
|
||||
--server-port INTEGER 设置 Gradio 应用程序的服务器端口
|
||||
--latex-delimiters-type [a|b|all]
|
||||
设置在 Markdown 渲染中使用的 LaTeX 分隔符类型
|
||||
('a' 表示 '$' 类型,'b' 表示 '()[]' 类型,
|
||||
'all' 表示两种类型都使用)
|
||||
--help 显示此帮助信息并退出
|
||||
```
|
||||
|
||||
## 环境变量说明
|
||||
|
||||
MinerU命令行工具的某些参数存在相同功能的环境变量配置,通常环境变量配置的优先级高于命令行参数,且在所有命令行工具中都生效。
|
||||
以下是常用的环境变量及其说明:
|
||||
|
||||
- `MINERU_DEVICE_MODE`:
|
||||
* 用于指定推理设备
|
||||
* 支持`cpu/cuda/cuda:0/npu/mps`等设备类型
|
||||
* 仅对`pipeline`后端生效。
|
||||
|
||||
- `MINERU_VIRTUAL_VRAM_SIZE`:
|
||||
* 用于指定单进程最大 GPU 显存占用(GB)
|
||||
* 仅对`pipeline`后端生效。
|
||||
|
||||
- `MINERU_MODEL_SOURCE`:
|
||||
* 用于指定模型来源
|
||||
* 支持`huggingface/modelscope/local`
|
||||
* 默认为`huggingface`可通过环境变量切换为`modelscope`或使用本地模型。
|
||||
|
||||
- `MINERU_TOOLS_CONFIG_JSON`:
|
||||
* 用于指定配置文件路径
|
||||
* 默认为用户目录下的`mineru.json`,可通过环境变量指定其他配置文件路径。
|
||||
|
||||
- `MINERU_FORMULA_ENABLE`:
|
||||
* 用于启用公式解析
|
||||
* 默认为`true`,可通过环境变量设置为`false`来禁用公式解析。
|
||||
|
||||
- `MINERU_FORMULA_CH_SUPPORT`:
|
||||
* 用于启用中文公式解析优化(实验性功能)
|
||||
* 默认为`false`,可通过环境变量设置为`true`来启用中文公式解析优化。
|
||||
* 仅对`pipeline`后端生效。
|
||||
|
||||
- `MINERU_TABLE_ENABLE`:
|
||||
* 用于启用表格解析
|
||||
* 默认为`true`,可通过环境变量设置为`false`来禁用表格解析。
|
||||
|
||||
- `MINERU_TABLE_MERGE_ENABLE`:
|
||||
* 用于启用表格合并功能
|
||||
* 默认为`true`,可通过环境变量设置为`false`来禁用表格合并功能。
|
||||
|
||||
- `MINERU_PDF_RENDER_TIMEOUT`:
|
||||
* 用于设置将PDF渲染为图片的超时时间(秒)
|
||||
* 默认为`300`秒,可通过环境变量设置为其他值以调整渲染图片的超时时间。
|
||||
|
||||
- `MINERU_INTRA_OP_NUM_THREADS`:
|
||||
* 用于设置onnx模型的intra_op线程数,影响单个算子的计算速度
|
||||
* 默认为`-1`(自动选择),可通过环境变量设置为其他值以调整线程数。
|
||||
|
||||
- `MINERU_INTER_OP_NUM_THREADS`:
|
||||
* 用于设置onnx模型的inter_op线程数,影响多个算子的并行执行
|
||||
* 默认为`-1`(自动选择),可通过环境变量设置为其他值以调整线程数。
|
||||
@@ -0,0 +1,33 @@
|
||||
# 使用指南
|
||||
|
||||
本章节提供了项目的完整使用说明。我们将通过以下几个部分,帮助您从基础到进阶逐步掌握项目的使用方法:
|
||||
|
||||
## 目录
|
||||
- 本地部署
|
||||
* [快速使用](./quick_usage.md) - 快速上手和基本使用
|
||||
* [模型源配置](./model_source.md) - 模型源的详细配置说明
|
||||
* [命令行工具](./cli_tools.md) - 命令行工具的详细参数说明
|
||||
* [进阶优化参数](./advanced_cli_parameters.md) - 一些适配命令行工具的进阶参数说明
|
||||
- 插件与生态
|
||||
* [Cherry Studio](plugin/Cherry_Studio.md)
|
||||
* [Sider](plugin/Sider.md)
|
||||
* [Dify](plugin/Dify.md)
|
||||
* [n8n](plugin/n8n.md)
|
||||
* [Coze](plugin/Coze.md)
|
||||
* [FastGPT](plugin/FastGPT.md)
|
||||
* [ModelWhale](plugin/ModelWhale.md)
|
||||
* [DingTalk](plugin/DingTalk.md)
|
||||
* [DataFlow](plugin/DataFlow.md)
|
||||
* [BISHENG](plugin/BISHENG.md)
|
||||
* [RagFlow](plugin/RagFlow.md)
|
||||
- 其他加速卡适配(由社区贡献)
|
||||
* [昇腾 Ascend](acceleration_cards/Ascend.md) [#3233](https://github.com/opendatalab/MinerU/discussions/3233)
|
||||
* [沐曦 METAX](acceleration_cards/METAX.md) [#3477](https://github.com/opendatalab/MinerU/pull/3477)
|
||||
* [AMD](acceleration_cards/AMD.md) [#3662](https://github.com/opendatalab/MinerU/discussions/3662)
|
||||
* [太初元碁 Tecorigin](acceleration_cards/Tecorigin.md) [#3767](https://github.com/opendatalab/MinerU/pull/3767)
|
||||
|
||||
## 开始使用
|
||||
|
||||
建议按照上述顺序阅读文档,这样可以帮助您更好地理解和使用项目功能。
|
||||
|
||||
如果您在使用过程中遇到问题,请查看 [FAQ](../faq/index.md)
|
||||
@@ -0,0 +1,56 @@
|
||||
# 模型源说明
|
||||
|
||||
MinerU使用 `HuggingFace` 和 `ModelScope` 作为模型仓库,用户可以根据需要切换模型源或使用本地模型。
|
||||
|
||||
- `HuggingFace` 是默认的模型源,在全球范围内提供了优异的加载速度和极高稳定性。
|
||||
- `ModelScope` 是中国大陆地区用户的最佳选择,提供了无缝兼容的SDK模块,适用于无法访问`HuggingFace`的用户。
|
||||
|
||||
## 模型源的切换方法
|
||||
|
||||
### 通过命令行参数切换
|
||||
目前仅`mineru`命令行工具支持通过命令行参数切换模型源,其他命令行工具如`mineru-api`、`mineru-gradio`等暂不支持。
|
||||
```bash
|
||||
mineru -p <input_path> -o <output_path> --source modelscope
|
||||
```
|
||||
|
||||
### 通过环境变量切换
|
||||
在任何情况下可以通过设置环境变量来切换模型源,这适用于所有命令行工具和API调用。
|
||||
```bash
|
||||
export MINERU_MODEL_SOURCE=modelscope
|
||||
```
|
||||
或
|
||||
```python
|
||||
import os
|
||||
os.environ["MINERU_MODEL_SOURCE"] = "modelscope"
|
||||
```
|
||||
>[!TIP]
|
||||
> 通过环境变量设置的模型源会在当前终端会话中生效,直到终端关闭或环境变量被修改。且优先级高于命令行参数,如同时设置了命令行参数和环境变量,命令行参数将被忽略。
|
||||
|
||||
|
||||
## 使用本地模型
|
||||
|
||||
### 1. 下载模型到本地
|
||||
```bash
|
||||
mineru-models-download --help
|
||||
```
|
||||
或使用交互式命令行工具选择模型下载:
|
||||
```bash
|
||||
mineru-models-download
|
||||
```
|
||||
> [!NOTE]
|
||||
>- 下载完成后,模型路径会在当前终端窗口输出,并自动写入用户目录下的 `mineru.json`。
|
||||
>- 您也可以通过将[配置模板文件](https://github.com/opendatalab/MinerU/blob/master/mineru.template.json)复制到用户目录下并重命名为 `mineru.json` 来创建配置文件。
|
||||
>- 模型下载到本地后,您可以自由移动模型文件夹到其他位置,同时需要在 `mineru.json` 中更新模型路径。
|
||||
>- 如您将模型文件夹部署到其他服务器上,请确保将 `mineru.json`文件一同移动到新设备的用户目录中并正确配置模型路径。
|
||||
>- 如您需要更新模型文件,可以再次运行 `mineru-models-download` 命令,模型更新暂不支持自定义路径,如您没有移动本地模型文件夹,模型文件会增量更新;如您移动了模型文件夹,模型文件会重新下载到默认位置并更新`mineru.json`。
|
||||
|
||||
### 2. 使用本地模型进行解析
|
||||
|
||||
```bash
|
||||
mineru -p <input_path> -o <output_path> --source local
|
||||
```
|
||||
或通过环境变量启用:
|
||||
```bash
|
||||
export MINERU_MODEL_SOURCE=local
|
||||
mineru -p <input_path> -o <output_path>
|
||||
```
|
||||
@@ -0,0 +1,11 @@
|
||||
# BISHENG 简介
|
||||
|
||||
BISHENG毕昇 是一款开源 LLM应用开发平台,主攻企业场景, 已有大量行业头部组织及世界500强企业在使用。“毕昇”是活字印刷术的发明人,活字印刷术为人类知识的传递起到了巨大的推动作用。BISHENG毕昇团队希望“BISHENG毕昇”同样能够为智能应用的广泛落地提供有力支撑。
|
||||
|
||||

|
||||
|
||||
|
||||
- 官网地址:https://bisheng.dataelem.com/
|
||||
- Miner 在BISHENG毕昇 项目中的插件项目:https://github.com/dataelement/bisheng/pulls
|
||||
|
||||
特别鸣谢 [@pzc163](https://github.com/pzc163)
|
||||
@@ -0,0 +1,238 @@
|
||||
# Cherry Studio 简介
|
||||
|
||||
Cherry Studio 是一款功能强大的多模型 AI 客户端软件,支持 Windows、macOS 和 Linux 等多平台运行,集成了 OpenAI、DeepSeek、Gemini、Anthropic 等主流 AI 云服务,同时支持本地模型运行,用户可以灵活切换不同的AI模型。
|
||||
|
||||
目前,MinerU 强大的文档解析能力已深度集成到 Cherry Studio 的知识库与对话交互中,为用户带来更便捷的文档处理与信息获取体验。
|
||||
|
||||

|
||||
|
||||
- Cherry Studio 官网地址:https://www.cherry-ai.com/
|
||||
|
||||
|
||||
# MinerU 在 Cherry Studio 中的使用方法
|
||||
|
||||
## 进入 Cherry Studio 设置
|
||||
|
||||
a. 打开 Cherry Studio 应用程序
|
||||
|
||||
b. 点击左下角的"设置"按钮,进入设置页面
|
||||
|
||||
c. 在左侧菜单中,选择"MCP 服务器"
|
||||
|
||||
在右侧的 MCP 服务器配置界面中,您可以看到已有的 MCP 服务器列表。点击右上角的"添加服务器"按钮来创建新的 MCP 服务,或者点击现有服务来编辑配置。
|
||||
|
||||
## 添加 MinerU-MCP 配置
|
||||
|
||||
点击"添加服务器"后,您将看到一个配置表单。请按以下步骤填写:
|
||||
|
||||
**a. 名称**:输入"MinerU-MCP"或您喜欢的其他名称
|
||||
|
||||
**b. 描述**:可选,如"文档转换为Markdown工具"
|
||||
|
||||
**c. 类型**:选择"标准输入/输出(stdio)"
|
||||
|
||||
**d. 命令**:输入 uvx
|
||||
|
||||
**e. 参数**:输入 mineru-mcp
|
||||
|
||||
**f. 环境变量**:添加以下环境变量
|
||||
|
||||
```Plain
|
||||
MINERU_API_BASE=https://mineru.net
|
||||
MINERU_API_KEY=您的API密钥
|
||||
OUTPUT_DIR=./downloads
|
||||
USE_LOCAL_API=false
|
||||
LOCAL_MINERU_API_BASE=http://localhost:8888
|
||||
```
|
||||
|
||||
使用 *`uvx`* 命令可以自动处理 mineru-mcp 的安装和运行,**无需预先手动安装 mineru-mcp 包**。这是最简单的配置方式。
|
||||
|
||||
## 保存配置
|
||||
|
||||
确认无误后,点击界面右上角的"保存"按钮完成配置。保存后,MCP 服务器列表中会显示您刚刚添加的 MinerU-MCP 服务。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 使用 Cherry Studio 中的 MinerU MCP
|
||||
|
||||
一旦配置完成,您可以在 Cherry Studio 中的对话中使用 MinerU MCP 工具。在 Cherry Studio 中,您可以使用如下提示让模型调用 MinerU MCP 工具。模型会自动识别任务并调用相应的工具。
|
||||
|
||||
## 示例 1: 使用 URL 转换文档
|
||||
|
||||
**用户输入:**
|
||||
|
||||
```Plain
|
||||
请使用 MinerU MCP 将以下 URL 的 PDF 文档转换为 Markdown 格式:https://example.com/sample.pdf
|
||||
```
|
||||
|
||||
**模型将执行的步骤:**
|
||||
|
||||
模型识别这是文档转换任务,并调用 *`parse_documents`* 工具,参数为:
|
||||
|
||||
```Plain
|
||||
{"file_sources": "https://example.com/sample.pdf"}
|
||||
```
|
||||
|
||||
工具处理完成后,模型会告知您转换结果。
|
||||
|
||||

|
||||
|
||||
## 示例 2: 转换本地文档
|
||||
|
||||
**用户输入:**
|
||||
|
||||
```Plain
|
||||
请使用 MinerU-MCP 将本地的 D://sample.pdf 文件转换为 Markdown 格式
|
||||
```
|
||||
|
||||
**模型将执行的步骤:**
|
||||
|
||||
模型识别这是本地文档转换任务,调用 `parse_documents` 工具,参数为:
|
||||
|
||||
```Plain
|
||||
{"file_sources": "D://sample.pdf"}
|
||||
```
|
||||
|
||||

|
||||
|
||||
## 示例 3: 启用 OCR 处理扫描文档
|
||||
|
||||
**用户输入:**
|
||||
|
||||
```Plain
|
||||
请使用 MinerU-MCP 将以下 URL 的扫描版 PDF 文档转换为 Markdown 格式,并启用 OCR 功能:
|
||||
https://example.com/scanned.pdf
|
||||
```
|
||||
|
||||
**模型将执行的步骤:**
|
||||
|
||||
模型识别这是需要 OCR 处理的文档转换任务,调用 `parse_documents` 工具,并启用 OCR 参数:
|
||||
|
||||
```Plain
|
||||
{"file_sources": "https://example.com/scanned.pdf","enable_ocr": true}
|
||||
```
|
||||
|
||||

|
||||
|
||||
## 示例 4: 完整对话流程
|
||||
|
||||
以下是一个完整的对话流程示例:
|
||||
|
||||
**用户:**
|
||||
|
||||
```Plain
|
||||
我有一份学术论文的 PDF,网址是 https://arxiv.org/pdf/2303.08774.pdf,能帮我转换成 Markdown 格式吗?
|
||||
```
|
||||
|
||||
**模型:**
|
||||
|
||||
```Plain
|
||||
我可以帮您将这份学术论文转换为 Markdown 格式。我将使用 MinerU-MCP 工具来处理这个任务。
|
||||
[模型调用 parse_documents 工具,处理过程中...]
|
||||
论文已成功转换为 Markdown 格式。转换结果如下:
|
||||
# The Capacity of Diffusion Models to Memorize and Generate Training Data
|
||||
## Abstract
|
||||
Recent diffusion models can generate high-quality images that are nearly indistinguishable from real ones...
|
||||
[显示论文内容...]
|
||||
```
|
||||
|
||||

|
||||
|
||||
## 工具参数详解
|
||||
|
||||
在使用过程中,模型会根据您的指令自动选择合适的工具和参数。以下是主要工具的参数说明:
|
||||
|
||||
### ● *parse_documents* 工具参数
|
||||
|
||||

|
||||
|
||||
### ● *get_ocr_languages* 工具参数
|
||||
|
||||
无需参数,用于获取OCR支持的语言列表。
|
||||
|
||||
## 高级用法
|
||||
|
||||
### 指定语言和页码范围
|
||||
|
||||
**用户输入:**
|
||||
|
||||
```Plain
|
||||
请使用 MinerU MCP 将以下 URL 的文档转换为 Markdown 格式,只处理第 5-10 页,并指定语言为中文:https://example.com/document.pdf
|
||||
```
|
||||
|
||||
模型会使用 *`parse_documents`* 工具,并设置 *`language`* 参数为 "ch",*`page_ranges`* 参数为 "5-10"。
|
||||
|
||||
### 批量处理多个文档
|
||||
|
||||
**用户输入:**
|
||||
|
||||
```Plain
|
||||
请使用 MinerU-MCP 将以下多个 URL 的文档转换为 Markdown 格式:
|
||||
https://example.com/doc1.pdf
|
||||
https://example.com/doc2.pdf
|
||||
https://example.com/doc3.pdf
|
||||
```
|
||||
|
||||
模型会调用 *`parse_documents`* 工具,并将多个 URL 以逗号分隔传入 *`file_sources`* 参数。
|
||||
|
||||
## 注意事项
|
||||
|
||||
● 当设置 *`USE_LOCAL_API=true`* 时,使用本地配置的API进行解析
|
||||
|
||||
● 当设置 *`USE_LOCAL_API=false`* 时,会使用 MinerU 官网的API进行解析
|
||||
|
||||
● 处理大型文档可能需要较长时间,请耐心等待
|
||||
|
||||
● 如果遇到超时问题,请考虑分批处理文档或使用本地API模式
|
||||
|
||||
## 常见问题与解决方案
|
||||
|
||||
### 无法启动 MCP 服务
|
||||
|
||||
**问题**:运行 *`uv run -m mineru.cli`*` `时报错。
|
||||
|
||||
**解决方案**:
|
||||
|
||||
● 确保已激活虚拟环境
|
||||
|
||||
● 检查是否已安装所有依赖
|
||||
|
||||
● 尝试使用 *`python -m mineru.cli`*` `命令替代
|
||||
|
||||
### 文件转换失败
|
||||
|
||||
**问题**:文件上传成功但转换失败。
|
||||
|
||||
**解决方案**:
|
||||
|
||||
● 检查文件格式是否受支持
|
||||
|
||||
● 确认API密钥是否正确
|
||||
|
||||
● 查看MCP服务日志获取详细错误信息
|
||||
|
||||
### 文件路径问题
|
||||
|
||||
**问题**:使用 `parse_documents` 工具处理本地文件时报找不到文件错误。
|
||||
|
||||
**解决方案**:请确保使用绝对路径,或者相对于服务器运行目录的正确相对路径。
|
||||
|
||||
### MCP 服务调用超时问题
|
||||
|
||||
**问题**:调用 *`parse_documents`* 工具时出现 *`Error calling tool 'parse_documents': MCP error -32001: Request timed out`* 错误。
|
||||
|
||||
**解决方案**:这个问题常见于处理大型文档或网络不稳定的情况。在某些 MCP 客户端(如 Cursor)中,超时后可能导致无法再次调用 MCP 服务,需要重启客户端。最新版本的 Cursor 中可能会显示正在调用 MCP,但实际上没有真正调用成功。建议:
|
||||
|
||||
**● 等待官方修复**:这是Cursor客户端的已知问题,建议等待Cursor官方修复
|
||||
|
||||
**● 处理小文件**:尽量只处理少量小文件,避免处理大型文档导致超时
|
||||
|
||||
**● 分批处理**:将多个文件分成多次请求处理,每次只处理一两个文件
|
||||
|
||||
● 增加超时时间设置(如果客户端支持)
|
||||
|
||||
● 对于超时后无法再次调用的问题,需要重启 MCP 客户端
|
||||
|
||||
● 如果反复出现超时,请检查网络连接或考虑使用本地 API 模式
|
||||
@@ -0,0 +1,92 @@
|
||||
# Coze 简介
|
||||
|
||||
Coze(中文版名称:扣子) 是字节跳动推出的零代码 AI 应用开发平台。无论用户是否有编程经验,都可以通过该平台快速创建各种类型的聊天机器人、智能体、AI 应用和插件,并将其部署在社交平台和即时聊天应用程序中。
|
||||
|
||||
目前,MinerU 插件已在 Coze 插件商店上线,通过其强大的文档解析能力,为用户搭建智能体与工作流提供文档解析能力,加快用户 AI 应用的开发。
|
||||
|
||||

|
||||
|
||||
- 扣子官网地址:https://www.coze.cn/
|
||||
- MinerU 扣子插件下载地址:https://www.coze.cn/store/plugin/7527957359730360354
|
||||
|
||||
# MinerU 在 Coze 中的使用方法
|
||||
|
||||
## **Coze:集成应用**
|
||||
|
||||
- 进入 https://www.coze.cn/home coze 开发平台
|
||||
|
||||
## 智能体
|
||||
|
||||
### 工作空间 -> 项目开发 -> 创建 -> 创建智能体 -> 创建 -> 输入项目名
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### 插件配置 -> 添加 `插件` -> 搜索 `MinerU`
|
||||
|
||||

|
||||
|
||||
### 添加 `parse_file` 工具(在线版)
|
||||
|
||||

|
||||
|
||||
### 选择 `MinerU` 插件 -> 编辑参数 -> 填写 api key
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
> 记得关闭 url 和 token 显示
|
||||
|
||||
### 调试 `智能体`
|
||||
|
||||

|
||||
|
||||
## 工作流
|
||||
|
||||
> 用工作流的方式使用 minerU
|
||||
|
||||
### 工作流 -> 创建工作流
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### 工作流插件配置 -> 添加 `插件` -> 搜索 `MinerU` -> 添加
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### 选择`MinerU` 插件 -> 编辑参数 -> 填写 api key
|
||||
|
||||

|
||||
|
||||
### 选择开始节点 -> 配置 `input` 类型为文件类型 -> 连接到 `mineru` 节点
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### 选择结束节点 -> 连接到 `mineru` 节点 -> 配置 `output` 输出为 `mineru` 节点的 `parse_file.text`
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### 上传文件 -> 试运行
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### 发布 -> 添加到当前智能体
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### 移除 `mineru` 插件 -> 调试
|
||||
|
||||

|
||||
@@ -0,0 +1,11 @@
|
||||
# 元枢智汇 ADP 智能数据平台 简介
|
||||
|
||||
元枢智汇 ADP 智能数据平台基于自研 AI 数据库和 DataFlow数据准备框架打造,旨在帮助企业高效管理、检索、处理海量数据,并通过体系化、自动化数据治理降低模型/智能体训练的专业门槛,帮助企业结合业务场景发挥私有数据的价值,真正落地AI应用。
|
||||
|
||||
目前,MinerU 已深度集成于元枢智汇 ADP 智能数据平台的 DataFlow 模块中,其数据解析服务由文档语料提取引擎 MinerU 提供支持。
|
||||
|
||||

|
||||

|
||||
|
||||
- 官网地址:https://adp.originhub.tech/agent
|
||||
- Miner fastGPT 插件下载地址:https://cloud.fastgpt.io/dashboard/systemPlugin?type=productivity
|
||||
@@ -0,0 +1,171 @@
|
||||
# Dify 简介
|
||||
|
||||
**Dify** 是一个开源的大语言模型(LLM)应用开发平台,旨在简化和加速生成式 AI 应用的创建和部署。它结合了后端即服务(BaaS)和 LLMOps 的理念,为开发者提供了用户友好的界面和强大的工具,有效降低了 AI 应用开发的门槛。
|
||||
|
||||
目前 MinerU 与 Dify 联合研发的 MinerU 插件已在 Dify 市场上架,帮助用户搭建工作流,提供文档解析的工作。
|
||||
|
||||

|
||||
|
||||
- Dify 官网地址:https://dify.ai/zh
|
||||
- MinerU Dify 插件下载地址:https://marketplace.dify.ai/plugins/langgenius/mineru
|
||||
|
||||
# MinerU 在 Dify 中的使用方法
|
||||
|
||||
## 一、**新版MinerU Dify插件亮点 (v0.4.0)**
|
||||
|
||||
- **完美适配MinerU2**:全面兼容MinerU2的最新功能,释放顶尖的文档解析能力。
|
||||
- **超高灵活性**:同时支持官方在线API和本地化部署的API(并向下兼容 1.x 版本)。
|
||||
- **赋能工作流**:让Dify的Agent拥有强大的文档“读写”能力,轻松处理复杂任务。
|
||||
|
||||
|
||||
## **二、实战演练:两个案例带你快速上手**
|
||||
|
||||
空谈不如实战。下面我们通过两个典型场景,向你展示新版插件的强大之处。
|
||||
|
||||
### 准备
|
||||
|
||||
1. 在Dify插件页面安装MinerU插件(私有化部署的Dify同理)
|
||||
|
||||
|
||||
2. 填写API URL等信息
|
||||
|
||||

|
||||
|
||||
使用官方API时令牌(Token)必须提供👆,使用本地部署API时令牌可不填写👇
|
||||
|
||||

|
||||
|
||||
### **案例一:解析单文件,搭建Chat PDF应用**
|
||||
|
||||
想借助AI与你的文档对话吗?跟着下面几步,轻松实现
|
||||
|
||||
#### 第一步:创建空白应用,选择“Chatflow”
|
||||
|
||||
输入应用名称与描述
|
||||
|
||||

|
||||
|
||||
#### 第二步:创建的初始模板中,选择“开始”节点
|
||||
|
||||
字段类型选为单文件,填写变量名称(此处填为input_file),支持文档类型选为文档与图片
|
||||
|
||||

|
||||
|
||||
#### 第三步:添加工具节点——MinerU插件来解析上一步开始节点上传的文件
|
||||
|
||||

|
||||
|
||||
#### 第四步:设置MinerU的输入变量,选择上一步开始节点添加的 `input_file`
|
||||
|
||||

|
||||
|
||||
#### 第五步:配置LLM模型
|
||||
|
||||
选择“LLM”节点后,如果没有模型可用,需要单独在插件市场安装(这里使用 Deepseek作为示例)
|
||||
|
||||
“上下文”选择MinerU的输出变量 `text`(MinerU解析文档后的markdown格式)
|
||||
|
||||

|
||||
|
||||
在“SYSTEM”区域根据实际需求填写提示词,可如图填写“在Parse File `text`中提取用户的问题答案”
|
||||
|
||||

|
||||
|
||||
#### 第六步:预览,上传文件并提问机器人关于文档的内容
|
||||
|
||||
至此一个简单的文档问答应用Chat PDF搭建完成,点击“预览”,查看效果如何👇
|
||||
|
||||

|
||||
|
||||
结果如下:
|
||||
|
||||

|
||||
|
||||
#### **第七步:发布与测试**
|
||||
|
||||
保存并发布你的应用。现在,上传一份PDF或图片,你就可以和它自由对话了!
|
||||
|
||||

|
||||
|
||||
### **案例二:自动化批量处理文档,并上传至云端S3**
|
||||
|
||||
需要处理大量文档并归档?MinerU 插件同样能胜任
|
||||
|
||||
#### 第一步:安装 botos3 插件
|
||||
|
||||

|
||||
|
||||
#### 第二步:配置 S3 bucket
|
||||
|
||||

|
||||
|
||||
#### 第三步:创建工作流
|
||||
|
||||
选择字段类型为“文件列表”,填写变量名称(此处填为input_files),支持的文档类型选为文档与图片
|
||||
|
||||

|
||||
|
||||
#### 第四步:添加“迭代”
|
||||
|
||||
在“开始”节点后添加“迭代”,并配置迭代内的MinerU节点,设置迭代的输入为上一步开始节点的`upload_files`,输出节点暂时不填写,再整个迭代配置完成后选择MinerU节点Parse File的`full_zip_url`
|
||||
|
||||

|
||||
|
||||
将MinerU的输入参数file选择为迭代器的 `item`
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
#### 第五步:增加中间节点“代码执行”来转换MinerU的解析结果
|
||||
|
||||
**输入变量(变量名称需与代码定义一致)**
|
||||
|
||||
- **text:**选择MinerU Parse File的输出变量`text`
|
||||
- **uploadFiles:**选择“开始”节点的文件列表`upload_files`,用来根据迭代的index索引下标找到对应的原始文件名
|
||||
- **index:**迭代的下标索引,选择迭代器的`index`
|
||||
|
||||
**输出变量(变量名称需与代码定义一致)**
|
||||
|
||||
- **fileName:**String
|
||||
- **base64:**String
|
||||
|
||||

|
||||
|
||||
代码选择JavaScript,编写转换代码:
|
||||
|
||||
暂时无法在飞书文档外展示此内容
|
||||
|
||||
以下为Python版本:
|
||||
|
||||
暂时无法在飞书文档外展示此内容
|
||||
|
||||
#### 第六步:配置 Botos3 插件来上传内容
|
||||
|
||||
添加工具节点Botos3,选择“通过s3上传base64”
|
||||
|
||||

|
||||
|
||||
文件base64选择代码执行(图中为**转换MINERU MD文本**)输出的base64字段
|
||||
|
||||

|
||||
|
||||
S3对象key,S3 对象key填写文件存储的路径,在 botos3 插件配置界面已经填写了 bucket 名称,这里只需要填写在bucket下存储的目录即可。选择代码执行**(图中为转换MINERU MD文本)**的`fileName`
|
||||
|
||||

|
||||
|
||||
#### 第七步:预览效果
|
||||
|
||||
连接结束节点,至此,一个简单的上传到s3的工作流配置完成,点击“运行”看看效果👇:
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
#### 第八步:Vis3查看文档
|
||||
|
||||
运行结束,可通过[vis3](https://github.com/opendatalab/Vis3?tab=readme-ov-file#features)来查看S3桶内是否已上传解析后的md文件,Vis3使用可参考
|
||||
|
||||
[新工具开源!Vis3大模型数据可视化利器:填 AK/SK 直接预览 S3 数据,JSON/视频/图片秒开!本地文件也可用](https://mp.weixin.qq.com/s/p3rH4EaoJB-AK7RWeDvOhg)
|
||||
|
||||

|
||||
@@ -0,0 +1,12 @@
|
||||
# 钉钉简介
|
||||
|
||||
钉钉(DingTalk)是阿里巴巴集团打造的企业级智能移动办公平台,是数字经济时代的企业组织协同办公和应用开发平台。钉钉整合了 IM 即时沟通、钉钉文档、钉闪会、钉盘、Teambition、OA审批、智能人事、钉工牌、工作台等功能,旨在实现简单、高效、安全、智能的数字化工作方式。它支持企业组织数字化和业务数字化,覆盖“人、财、物、事、产、供、销、存”的全链路管理。
|
||||
|
||||
通过钉钉开放平台上的SaaS软件,企业可低成本搭建数字化应用,整合所有数字化系统。此外,钉钉提供超过2000个API接口,为企业数字化转型提供开放兼容环境。不会代码的用户也可利用低代码工具构建CRM、ERP、OA、项目管理、进销存等系统。
|
||||
|
||||
目前,钉钉文档、AI 表格等产品此前已深度集成 MinerU 能力,并通过开放平台向生态开发者开放文档解析功能,为 DLU 的联合研发提供了扎实的技术与场景基础。
|
||||
|
||||

|
||||
|
||||
|
||||
- 钉钉官网:https://www.dingtalk.com/
|
||||
@@ -0,0 +1,13 @@
|
||||
# FastGPT 简介
|
||||
|
||||
FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,将智能对话与可视化编排完美结合,让 AI 应用开发变得简单自然。无论您是开发者还是业务人员,都能轻松打造专属的 AI 应用。
|
||||
|
||||
目前,MinerU 插件已在 Coze 插件商店上线,通过其强大的文档解析能力,为用户搭建智能体与工作流提供文档解析能力,加快用户 AI 应用的开发。
|
||||
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
- 官网地址:https://fastgpt.cn
|
||||
- Miner fastGPT 插件下载地址:https://cloud.fastgpt.io/dashboard/systemPlugin?type=productivity
|
||||
@@ -0,0 +1,18 @@
|
||||
# ModelWhale 简介
|
||||
|
||||
ModelWhale是一款高效率的数据科学云端协作工具,为数据工作者提供了即开即用的云端分析环境,Jupyter Notebook 交互式和Canvas 拖拽式两种分析界面,帮助科研者、教育工作者解决底层工程繁复、数据难以安全应用、成果流转复现困难等问题。基于不同使用场景,ModelWhale 为用户提供三个产品版本,分别是基础版、专业版、团队版。
|
||||
|
||||
目前,MinerU 插件已在 ModelWhale 工作中,通过其强大的文档解析能力,为用户搭建智能体与工作流提供文档解析能力,加快用户 AI 应用的开发。
|
||||
|
||||
images/DingTalk_01.png
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
- ModelWhale 官网:Mohttps://www.modelwhale.com/pricing?scroll=1
|
||||
- MinerU 在ModelWhale 的使用地址:https://www.heywhale.com/org/7b38d/workspace/iframe?url=https://www.heywhale.com/api/model/services/68089d360b1519a862ccb9b4/app/
|
||||
@@ -0,0 +1,9 @@
|
||||
# RagFlow 简介
|
||||
|
||||
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,通过融合前沿的 RAG 技术与 Agent 能力,为大型语言模型提供卓越的上下文层。它提供可适配任意规模企业的端到端 RAG 工作流,凭借融合式上下文引擎与预置的 Agent 模板,助力开发者以极致效率与精度将复杂数据转化为高可信、生产级的人工智能系统。
|
||||
|
||||
目前 OpenDataLab 团队正在开发 MinerU 在 Ragflow 中的插件,近期即将开源,**敬请期待**。
|
||||
|
||||

|
||||
|
||||
- 官网地址:https://ragflow.io/
|
||||
@@ -0,0 +1,10 @@
|
||||
# Sider 简介
|
||||
|
||||
Sider 是一款浏览器侧边栏类的 AI 助手扩展,主要在网页右侧开启一个“随处可用”的智能面板,将对话式 AI(如 GPT、Claude、Gemini 等)带到你正在浏览的任何页面中。它的核心定位是:提升阅读、写作、翻译、检索与总结效率,并与网页内容深度联动。
|
||||
|
||||
目前,Sider在 Wisebase 模块中深度集成了 MinerU 的相关功能。该模块是一个由AI驱动的知识库,您可以通过上传 PDF 等各类型文件,构建个人图书馆以实现高效的知识管理,MinerU 可以帮助您更好地解析此类文件,精准地提取文件中的信息。
|
||||
|
||||

|
||||
|
||||
- Sider 官网地址:https://sider.ai/zh-CN/chat
|
||||
- 使用集成 MinerU 相关功能的 Sider 地址:https://sider.ai/zh-CN/wisebase
|
||||
@@ -0,0 +1,54 @@
|
||||
# n8n 简介
|
||||
|
||||
**n8n** 是一款以低代码(Low-code)、工作流自动化为核心的应用开发平台,许多企业都借助于其灵活的节点(Node)配置,实现业务流程的自动化执行。它通过可视化界面和代码扩展能力,帮助用户连接各种应用程序和服务,构建复杂的自动化流程,降低用户使用门槛。
|
||||
|
||||
目前,MinerU 已将其强大的文档解析能力封装为 n8n 节点,用户在搭建工作流时,可以更加便捷地处理复杂的文档解析任务。
|
||||
|
||||

|
||||
|
||||
- n8n 官网地址:https://n8n.io/
|
||||
- MinerU n8n 插件下载地址:https://www.npmjs.com/package/n8n-nodes-mineru
|
||||
|
||||
# MinerU 在 n8n 中的使用方法
|
||||
|
||||
## step1 进入社区node安装界面
|
||||
|
||||

|
||||
|
||||
## step2 安装 n8n-nodes-mineru 节点
|
||||
|
||||
≈assets/images/n8n_2.png)
|
||||
|
||||
## step3 新建工作流,添加 n8n-nodes-mineru 节点,并设置 api key
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### n8n使用节点文档
|
||||
|
||||
https://www.npmjs.com/package/n8n-nodes-mineru
|
||||
|
||||
### **在工作流内集成解压功能**
|
||||
|
||||
#### 导入 json 模板
|
||||
|
||||
暂时无法在飞书文档外展示此内容
|
||||
|
||||

|
||||
|
||||
### 配置 凭证和文档url
|
||||
|
||||

|
||||
|
||||
### 根据各自的需求配置所需的输出
|
||||
|
||||

|
||||
|
||||
### 调试
|
||||
|
||||

|
||||
@@ -0,0 +1,110 @@
|
||||
# 使用 MinerU
|
||||
|
||||
## 快速配置模型源
|
||||
MinerU默认使用`huggingface`作为模型源,若用户网络无法访问`huggingface`,可以通过环境变量便捷地切换模型源为`modelscope`:
|
||||
```bash
|
||||
export MINERU_MODEL_SOURCE=modelscope
|
||||
```
|
||||
有关模型源配置和自定义本地模型路径的更多信息,请参考文档中的[模型源说明](./model_source.md)。
|
||||
|
||||
## 通过命令行快速使用
|
||||
MinerU内置了命令行工具,用户可以通过命令行快速使用MinerU进行PDF解析:
|
||||
```bash
|
||||
# 默认使用pipeline后端解析
|
||||
mineru -p <input_path> -o <output_path>
|
||||
```
|
||||
> [!TIP]
|
||||
> - `<input_path>`:本地 PDF/图片 文件或目录
|
||||
> - `<output_path>`:输出目录
|
||||
>
|
||||
> 更多关于输出文件的信息,请参考[输出文件说明](../reference/output_files.md)。
|
||||
|
||||
> [!NOTE]
|
||||
> 命令行工具会在Linux和macOS系统自动尝试cuda/mps加速。Windows用户如需使用cuda加速,
|
||||
> 请前往 [Pytorch官网](https://pytorch.org/get-started/locally/) 选择适合自己cuda版本的命令安装支持加速的`torch`和`torchvision`。
|
||||
|
||||
```bash
|
||||
# 或指定vlm后端解析
|
||||
mineru -p <input_path> -o <output_path> -b vlm-transformers
|
||||
```
|
||||
> [!TIP]
|
||||
> vlm后端另外支持`vllm`加速,与`transformers`后端相比,`vllm`的加速比可达20~30倍,可以在[扩展模块安装指南](../quick_start/extension_modules.md)中查看支持`vllm`加速的完整包安装方法。
|
||||
|
||||
如果需要通过自定义参数调整解析选项,您也可以在文档中查看更详细的[命令行工具使用说明](./cli_tools.md)。
|
||||
|
||||
## 通过api、webui、http-client/server进阶使用
|
||||
|
||||
- 通过python api直接调用:[Python 调用示例](https://github.com/opendatalab/MinerU/blob/master/demo/demo.py)
|
||||
- 通过fast api方式调用:
|
||||
```bash
|
||||
mineru-api --host 0.0.0.0 --port 8000
|
||||
```
|
||||
>[!TIP]
|
||||
>在浏览器中访问 `http://127.0.0.1:8000/docs` 查看API文档。
|
||||
- 启动gradio webui 可视化前端:
|
||||
```bash
|
||||
# 使用 pipeline/vlm-transformers/vlm-http-client 后端
|
||||
mineru-gradio --server-name 0.0.0.0 --server-port 7860
|
||||
# 或使用 vlm-vllm-engine/pipeline 后端(需安装vllm环境)
|
||||
mineru-gradio --server-name 0.0.0.0 --server-port 7860 --enable-vllm-engine true
|
||||
```
|
||||
>[!TIP]
|
||||
>
|
||||
>- 在浏览器中访问 `http://127.0.0.1:7860` 使用 Gradio WebUI。
|
||||
|
||||
- 使用`http-client/server`方式调用:
|
||||
```bash
|
||||
# 启动vllm server(需要安装vllm环境)
|
||||
mineru-vllm-server --port 30000
|
||||
```
|
||||
>[!TIP]
|
||||
>在另一个终端中通过http client连接vllm server(只需cpu与网络,不需要vllm环境)
|
||||
> ```bash
|
||||
> mineru -p <input_path> -o <output_path> -b vlm-http-client -u http://127.0.0.1:30000
|
||||
> ```
|
||||
|
||||
> [!NOTE]
|
||||
> 所有vllm官方支持的参数都可用通过命令行参数传递给 MinerU,包括以下命令:`mineru`、`mineru-vllm-server`、`mineru-gradio`、`mineru-api`,
|
||||
> 我们整理了一些`vllm`使用中的常用参数和使用方法,可以在文档[命令行进阶参数](./advanced_cli_parameters.md)中获取。
|
||||
|
||||
## 基于配置文件扩展 MinerU 功能
|
||||
|
||||
MinerU 现已实现开箱即用,但也支持通过配置文件扩展功能。您可通过编辑用户目录下的 `mineru.json` 文件,添加自定义配置。
|
||||
|
||||
>[!IMPORTANT]
|
||||
>`mineru.json` 文件会在您使用内置模型下载命令 `mineru-models-download` 时自动生成,也可以通过将[配置模板文件](https://github.com/opendatalab/MinerU/blob/master/mineru.template.json)复制到用户目录下并重命名为 `mineru.json` 来创建。
|
||||
|
||||
以下是一些可用的配置选项:
|
||||
|
||||
- `latex-delimiter-config`:
|
||||
* 用于配置 LaTeX 公式的分隔符
|
||||
* 默认为`$`符号,可根据需要修改为其他符号或字符串。
|
||||
|
||||
- `llm-aided-config`:
|
||||
* 用于配置 LLM 辅助标题分级的相关参数,兼容所有支持`openai协议`的 LLM 模型
|
||||
* 默认使用`阿里云百炼`的`qwen3-next-80b-a3b-instruct`模型
|
||||
* 您需要自行配置 API 密钥并将`enable`设置为`true`来启用此功能
|
||||
* 如果您的api供应商不支持`enable_thinking`参数,请手动将该参数删除
|
||||
* 例如,在您的配置文件中,`llm-aided-config` 部分可能如下所示:
|
||||
```json
|
||||
"llm-aided-config": {
|
||||
"api_key": "your_api_key",
|
||||
"base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1",
|
||||
"model": "qwen3-next-80b-a3b-instruct",
|
||||
"enable_thinking": false,
|
||||
"enable": false
|
||||
}
|
||||
```
|
||||
* 要移除`enable_thinking`参数,只需删除包含`"enable_thinking": false`的那一行,结果如下:
|
||||
```json
|
||||
"llm-aided-config": {
|
||||
"api_key": "your_api_key",
|
||||
"base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1",
|
||||
"model": "qwen3-next-80b-a3b-instruct",
|
||||
"enable": false
|
||||
}
|
||||
```
|
||||
|
||||
- `models-dir`:
|
||||
* 用于指定本地模型存储目录,请为`pipeline`和`vlm`后端分别指定模型目录,
|
||||
* 指定目录后您可通过配置环境变量`export MINERU_MODEL_SOURCE=local`来使用本地模型。
|
||||
Reference in New Issue
Block a user