• 欢迎访问誉卿博客,推荐使用最新版火狐浏览器和 Chrome 浏览器访问本网站。

  • 初不解禅心未住,悟后逍遥游处方。 山水有情皆由心,见山见水皆天堂。

MinerU 本地便携部署与避坑笔记

工具 yqdnsjs 2个月前 (08-09) 154次浏览 扫描二维码
封面

本文整理自本地部署笔记,记录 MinerU Windows 便携部署的目录结构、环境变量、模型配置、API/WebUI、分层 PDF、古籍 OCR 增强,以及常见问题和启动关闭方法。项目目录为 C:MinerU,整理日期 2026-08-05。

一、当前部署状态

当前是一套便携式部署:Python、依赖、模型、配置、缓存、输入输出都尽量放在 C:MinerU 下面。

主要目录:

<code class="language-text">C:MinerU
├─ runtimepython              便携 Python
├─ source                       MinerU 源码,当前安装为本地 editable 包
├─ models                       本地模型缓存
├─ portable-homemineru.json      MinerU 配置
├─ input                        输入文件目录
├─ output                       API/WebUI 输出目录
├─ downloads                    安装包、pip 缓存
└─ tools                        自定义后处理脚本</code>

当前关键版本:

<code class="language-text">mineru             3.4.4,路径 C:MinerUsource
gradio             6.8.0
torch              2.13.0+cu130
torchvision        0.28.0+cu130
transformers       4.57.6
huggingface_hub    0.36.2
hf-xet             1.5.2
accelerate         1.14.0
pypdf              6.14.2
pypdfium2          5.10.1
reportlab          5.0.0
opencv-python      5.0.0.93
pillow             12.3.0
psutil             7.2.2</code>

GPU 已按 NVIDIA CUDA 环境配置,check-gpu.cmd 可检查 PyTorch 是否能识别显卡。

二、便携环境关键点

入口脚本都会先调用 portable-env.cmd,它负责设置这些环境变量:

<code class="language-bat">PYTHON=C:MinerUruntimepythonpython.exe
USERPROFILE=C:MinerUportable-home
HOME=C:MinerUportable-home
HF_HOME=C:MinerUmodelshuggingface
HUGGINGFACE_HUB_CACHE=C:MinerUmodelshuggingfacehub
MODELSCOPE_CACHE=C:MinerUmodelsmodelscope
MINERU_TOOLS_CONFIG_JSON=C:MinerUportable-homemineru.json
MINERU_MODEL_SOURCE=local
MINERU_API_OUTPUT_ROOT=C:MinerUoutput
MINERU_PDF_RENDER_USE_THREADS=true</code>

几个变量很关键:

  • USERPROFILE/HOME 改到 portable-home,避免配置写到系统用户目录。
  • HF_HOME/MODELSCOPE_CACHE 固定模型缓存位置。
  • MINERU_TOOLS_CONFIG_JSON 指向项目内配置文件。
  • MINERU_MODEL_SOURCE=local 强制使用本地模型。
  • MINERU_API_OUTPUT_ROOT 让 API 输出落到 output。

三、模型配置

配置文件:C:MinerUportable-homemineru.json,关键内容:

<code class="language-json">{
  "models-dir": {
    "pipeline": "models/modelscope/models/OpenDataLab--PDF-Extract-Kit-1.0/snapshots/master",
    "vlm": "models/huggingface/MinerU2.5-Pro-2605-1.2B"
  },
  "model-source": "local"
}</code>

含义:

  • pipeline 使用本地 PDF-Extract-Kit 模型。
  • vlm 使用本地强模型 MinerU2.5-Pro-2605-1.2B。
  • model-source=local 避免启动时重新联网拉模型。

Pipeline 模型下载脚本为 download-models.cmd,内部命令:

<code class="language-bat">"%PYTHON%" -m mineru.cli.models_download --model_type pipeline --source modelscope</code>

强模型已放在 C:MinerUmodelshuggingfaceMinerU2.5-Pro-2605-1.2B。

四、API 与 WebUI 部署

API 启动脚本 run-api.cmd,实际命令:

<code class="language-bat">"%PYTHON%" -m mineru.cli.fast_api --host 0.0.0.0 --port 8000 --allow-public-http-client</code>

API 地址:

<code class="language-text">本机:http://127.0.0.1:8000/docs
局域网:http://<本机局域网 IP>:8000/docs</code>

WebUI 启动脚本 run-gradio.cmd,实际命令:

<code class="language-bat">"%PYTHON%" -m mineru.cli.gradio_app --server-name 0.0.0.0 --server-port 7860 --api-url http://127.0.0.1:8000</code>

WebUI 地址:

<code class="language-text">本机:http://127.0.0.1:7860
局域网:http://<本机局域网 IP>:7860</code>

一键启动脚本 start-webui.cmd 会:

1. 检查 http://127.0.0.1:8000/health。 2. API 不存在时启动 run-api.cmd。 3. 检查 http://127.0.0.1:7860。 4. WebUI 不存在时启动 run-gradio.cmd。 5. 自动打开浏览器访问 WebUI。

五、命令行解析脚本

普通 pipeline 解析:

<code class="language-bat">run-mineru.cmd inputyour-file.pdf</code>

内部使用自定义提交脚本:

<code class="language-bat">"%PYTHON%" "%MINERU_ROOT%toolssubmit_mineru_task.py" "%~1" --backend pipeline --api-url http://127.0.0.1:8000</code>

CPU 备用模式:

<code class="language-bat">run-mineru-cpu.cmd inputyour-file.pdf</code>

强模型高精度模式:

<code class="language-bat">run-mineru-strong.cmd inputyour-file.pdf</code>

内部参数:

<code class="language-bat">--backend hybrid-engine --effort high --layered-pdf --api-url http://127.0.0.1:8000</code>

注意:命令行脚本依赖 API 已经启动;如果没有启动,先运行 run-api.cmd 或直接运行 start-webui.cmd。

配图示意

六、WebUI 已加的自定义能力

OCR 语言显示中文化

WebUI 的 OCR 语言下拉已改成中文说明,例如 ch(中文、英文、日文、繁体中文、拉丁文),不用再看英文语言组合。

同步生成分层 PDF

高级选项里新增并默认勾选“同步生成分层 PDF”。PDF 输入解析完成后,会自动生成 *_origin_layered.pdf 并写入结果 zip。

分层 PDF 包含两个图层:

<code class="language-text">Original Page  原始页图层,可关闭
OCR Text       OCR 文字图层,可关闭</code>

OCR 文字和框使用高对比红色,便于校对。

古籍/长卷分块 OCR 补漏

高级选项里新增,默认关闭,适用场景:

  • 古籍长卷
  • 竖排文字
  • 从右到左阅读
  • 页面很宽
  • 普通 OCR 出现大片空白、整页只有几个 OCR 块,甚至 0 个 OCR 块

工作方式:

1. 只处理宽页。 2. 只处理 OCR 文本块少于阈值的页面。 3. 把页面渲染成图。 4. 横向切成重叠窄块。 5. 按古籍方向从右到左跑 OCR。 6. 合并坐标后按“列中心从右到左、列内从上到下”排序。 7. 把补出来的文字写进 OCR Text 图层。

默认关闭,是为了避免影响普通现代文档、表格、横排 PDF。

手动后处理命令:

<code class="language-bat">.python.cmd toolsmake_layered_pdf.py <任务输出目录> --ancient-vertical-ocr</code>

备用只画框模式:

<code class="language-bat">.python.cmd toolsmake_layered_pdf.py <任务输出目录> --box-only</code>

七、分层 PDF 实现注意

分层 PDF 由 toolsmake_layered_pdf.py 生成。关键实现:

  • 使用 pypdf 写可选内容组 OCG。
  • 原始页面包进 Original Page 图层。
  • OCR 文字包进 OCR Text 图层。
  • OCR 字体优先使用 Windows 字体:C:WindowsFontsDeng.ttf、C:WindowsFontssimhei.ttf、C:WindowsFontssimsunb.ttf。
  • 默认使用嵌入式 TrueType 字体,减少 Adobe Acrobat 闪退风险。
  • 文字颜色和边框颜色为红色 #dc2626。

八、已验证过的结果

当前古籍样例启用分块补漏后,低 OCR 宽页补充结果示例:

<code class="language-text">第 1 页:补 11 块
第 2 页:补 42 块
第 4 页:补 42 块
第 6 页:补 42 块
第 8 页:补 42 块</code>

验证方式:

<code class="language-bat">.python.cmd -m py_compile toolsmake_layered_pdf.py sourceminerucligradio_app.py toolssubmit_mineru_task.py</code>

PDF 结构检查过:

<code class="language-text">图层:Original Page, OCR Text
pypdf strict=True 可读
Poppler pdfinfo 可读
Poppler 可渲染页面</code>

九、应该避开的坑

1. IDM 拦截结果 zip

报错示例:Failed to download result ZIP ... 204 - Intercepted by the IDM Advanced Integration。这是 IDM 把 MinerU 从本地 API 下载结果 zip 的请求接管了,不是 OCR 或模型失败。

处理:

  • 退出 IDM,或暂停 IDM 浏览器集成。
  • 在 IDM 里关闭“使用高级浏览器集成”。
  • 把 127.0.0.1、localhost 加入 IDM 例外。

2. WebUI 正在运行时看不到新选项

修改 sourceminerucligradio_app.py 后,已有 WebUI 进程不会自动热更新。运行 restart-webui.cmd,或关闭 API/WebUI 窗口后重新运行 start-webui.cmd。

3. 分层 PDF 打开闪退

风险主要来自可选图层对象结构不够稳、OCR 文字层使用 CIDFont 时 Acrobat 处理不稳、原始页和 OCR 页内容流混合不规范。当前规避:OCProperties 写成间接对象,只保留两个明确 OCG,OCR 文字层使用嵌入式 TrueType 字体,红色文字和边框方便辨认。如果 Acrobat 仍异常,可先用福昕或浏览器验证;只有 Acrobat 崩时优先怀疑其图层/字体兼容性。

4. 关闭原始图层后大片空白

这通常不是分层 PDF 漏画,而是上游 _model.json 本来没有 OCR 出主体文字。关闭 Original Page 后只剩少数红字,说明 OCR Text 层确实只有这些块;古籍长卷请勾选“古籍/长卷分块 OCR 补漏”。

5. 古籍分块 OCR 不适合所有文档

它假设“竖排、从右到左、长卷宽页”,不建议用于现代横排论文、表格密集文件、普通扫描合同、图文混排页面,否则可能补出重复块、顺序不合阅读习惯,或增加处理时间。

6. 古籍 OCR 顺序不要按横排理解

古籍默认阅读顺序为“列从右到左、列内从上到下”,当前分块补漏也按这个顺序合并,不按现代横排从左到右排序。

7. 控制台中文路径乱码

PowerShell 或 CMD 输出中文路径时可能显示乱码,但文件本身通常正常。判断以资源管理器和实际文件存在为准。

8. 旧 zip 不会自动包含后生成的 PDF

结果 zip 生成之后又手动生成 _origin_layered.pdf,旧 zip 不会自动更新。WebUI 正常流程里分层 PDF 在压缩前生成;手动补生成后需要重新打包。

9. 端口占用

API 用 8000,WebUI 用 7860。启动失败先检查端口:

<code class="language-bat">netstat -ano | findstr :8000
netstat -ano | findstr :7860</code>

10. 局域网访问安全

当前 API 使用 --host 0.0.0.0 --allow-public-http-client,方便局域网访问,但只建议在可信内网使用,不要直接暴露公网。

11. 便携目录可以移动,但显卡驱动不能便携

整个 C:MinerU 可以复制到别的位置或另一台机器,但另一台电脑仍需要 Windows、可用 NVIDIA 驱动、能支持当前 PyTorch CUDA 运行时的显卡环境。

十、常用检查命令

<code class="language-bat">check-gpu.cmd
python.cmd -V
.python.cmd -m py_compile toolsmake_layered_pdf.py sourceminerucligradio_app.py toolssubmit_mineru_task.py
.python.cmd toolsmake_layered_pdf.py --help</code>

十一、启动方法

推荐一键启动:

<code class="language-bat">start-webui.cmd</code>

它会自动启动 API 和 WebUI,并打开 http://127.0.0.1:7860。

分开启动:

<code class="language-bat">run-api.cmd
run-gradio.cmd</code>

命令行解析前先确认 API 已启动:

<code class="language-bat">run-mineru.cmd inputyour-file.pdf
run-mineru-strong.cmd inputyour-file.pdf
run-mineru-cpu.cmd inputyour-file.pdf</code>

十二、关闭方法

方法一:直接关闭 MinerU API 和 MinerU WebUI 两个 CMD 窗口。

方法二:按端口结束进程:

<code class="language-bat">for /f "tokens=5" %P in ('netstat -ano ^| findstr /R /C:":8000 .*LISTENING" /C:":7860 .*LISTENING"') do taskkill /F /PID %P</code>

写进 .cmd 文件时 %P 要改成 %%P。

方法三:重启服务:

<code class="language-bat">restart-webui.cmd</code>

它会先结束 8000 和 7860 端口上的服务,再调用 start-webui.cmd 重新启动,适合修改了 WebUI 代码、新增选项没出现、服务卡住、端口被旧进程占用等情况。

十三、推荐使用习惯

普通 PDF:勾选“同步生成分层 PDF”即可。

古籍长卷:勾选“同步生成分层 PDF”,再勾选“古籍/长卷分块 OCR 补漏”。

校对时:打开 *_origin_layered.pdf,在 PDF 图层面板切换 Original Page 和 OCR Text,红色文字就是 OCR 层。

如果下载失败且看到 IDM 提示,先处理 IDM,不要重装模型。


*本文依据本地部署笔记整理,命令、路径、版本与报错均以实际环境为准。*

喜欢 (0)