前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[1309]MinerU、Magic-PDF、Magic-Doc

[1309]MinerU、Magic-PDF、Magic-Doc

作者头像
周小董
发布于 2024-11-24 00:08:27
发布于 2024-11-24 00:08:27
92600
代码可运行
举报
文章被收录于专栏:python前行者python前行者
运行总次数:0
代码可运行

关于 MinerU

MinerU 是一款一站式、开源、高质量的数据提取工具,主要包含以下功能:

  • Magic-PDF PDF文档提取
  • Magic-Doc 网页与电子书提取
  • github: https://github.com/opendatalab/MinerU/blob/master/README_zh-CN.md

在线体验地址: https://opendatalab.com/OpenSourceTools/Extractor/PDF https://www.modelscope.cn/studios/OpenDataLab/MinerU

Magic-PDF

简介 Magic-PDF 是一款将 PDF 转化为 markdown 格式的工具。支持转换本地文档或者位于支持S3协议对象存储上的文件。

主要功能包含:

  • 支持多种前端模型输入
  • 删除页眉、页脚、脚注、页码等元素
  • 符合人类阅读顺序的排版格式
  • 保留原文档的结构和格式,包括标题、段落、列表等
  • 提取图像和表格并在markdown中展示
  • 将公式转换成latex
  • 乱码PDF自动识别并转换
  • 支持cpu和gpu环境
  • 支持windows/linux/mac平台

项目全景

流程图

子模块仓库

Magic-PDF 上手指南

使用CPU快速体验
1. 安装magic-pdf
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda create -n MinerU python=3.10
conda activate MinerU
pip install -U magic-pdf[full] --extra-index-url https://wheels.myhloli.com -i https://pypi.tuna.tsinghua.edu.cn/simple

已收到多起由于镜像源和依赖冲突问题导致安装了错误版本软件包的反馈,请务必安装完成后通过以下命令验证版本是否正确

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
magic-pdf --version

如版本低于0.6.x,请提交issue进行反馈。

完整功能包依赖detectron2,该库需要编译安装,如需自行编译,请参考 facebookresearch/detectron2#5114 或是直接使用我们预编译的whl包(仅限python 3.10):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install detectron2 --extra-index-url https://myhloli.github.io/wheels/
2. 下载模型权重文件

详细参考 如何下载模型文件 下载后请将models目录移动到空间较大的ssd磁盘目录

从 ModelScope 下载模型

ModelScope 支持SDK或模型下载,任选一个即可。

1)利用Git lsf下载

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git lfs install
git lfs clone https://www.modelscope.cn/opendatalab/PDF-Extract-Kit.git

2)利用SDK下载

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 首先安装modelscope
pip install modelscope
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 使用modelscope sdk下载模型
from modelscope import snapshot_download
model_dir = snapshot_download('opendatalab/PDF-Extract-Kit')
print(f"模型文件下载路径为:{model_dir}/models")

【❗️必须要做❗️】的额外步骤(模型下载完成后请务必完成以下操作)

1.检查模型目录是否下载完整 模型文件夹的结构如下,包含了不同组件的配置文件和权重文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./
├── Layout  # 布局检测模型
│   ├── config.json
│   └── model_final.pth
├── MFD  # 公式检测
│   └── weights.pt
├── MFR  # 公式识别模型
│   └── UniMERNet
│       ├── config.json
│       ├── preprocessor_config.json
│       ├── pytorch_model.bin
│       ├── README.md
│       ├── tokenizer_config.json
│       └── tokenizer.json
│── TabRec # 表格识别模型
│   └─StructEqTable
│       ├── config.json
│       ├── generation_config.json
│       ├── model.safetensors
│       ├── preprocessor_config.json
│       ├── special_tokens_map.json
│       ├── spiece.model
│       ├── tokenizer.json
│       └── tokenizer_config.json 
│   └─ TableMaster 
│       └─ ch_PP-OCRv3_det_infer
│           ├── inference.pdiparams
│           ├── inference.pdiparams.info
│           └── inference.pdmodel
│       └─ ch_PP-OCRv3_rec_infer
│           ├── inference.pdiparams
│           ├── inference.pdiparams.info
│           └── inference.pdmodel
│       └─ table_structure_tablemaster_infer
│           ├── inference.pdiparams
│           ├── inference.pdiparams.info
│           └── inference.pdmodel
│       ├── ppocr_keys_v1.txt
│       └── table_master_structure_dict.txt
└── README.md

2.检查模型文件是否下载完整 请检查目录下的模型文件大小与网页上描述是否一致,如果可以的话,最好通过sha256校验模型是否下载完整

3.移动模型到固态硬盘 将 ‘models’ 目录移动到具有较大磁盘空间的目录中,最好是在固态硬盘(SSD)上。 此外在 ~/magic-pdf.json里修改模型的目录指向最终的模型存放位置,否则会报模型无法加载的错误。

3. 拷贝配置文件并进行配置

在仓库根目录可以获得 magic-pdf.template.json 文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cp magic-pdf.template.json ~/magic-pdf.json

在magic-pdf.json中配置"models-dir"为模型权重文件所在目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "models-dir": "/tmp/models"
}

❗️务必正确配置模型权重文件所在目录的【绝对路径】,否则会因为找不到模型文件而导致程序无法运行 windows系统中此路径应包含盘符,且需把路径中所有的"\"替换为"/",否则会因为转义原因导致json文件语法错误。

例如:模型放在D盘根目录的models目录,则model-dir的值应为"D:/models"

使用CUDA或MPS加速推理

如您有可用的Nvidia显卡或在使用Apple Silicon的Mac,可以使用CUDA或MPS进行加速

CUDA 需要根据自己的CUDA版本安装对应的pytorch版本 以下是对应CUDA 11.8版本的安装命令,更多信息请参考 https://pytorch.org/get-started/locally/

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install --force-reinstall torch==2.3.1 torchvision==0.18.1 --index-url https://download.pytorch.org/whl/cu118

同时需要修改配置文件magic-pdf.json中"device-mode"的值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "device-mode":"cuda"
}

MPS 使用macOS(M系列芯片设备)可以使用MPS进行推理加速 需要修改配置文件magic-pdf.json中"device-mode"的值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "device-mode":"mps"
}
使用
命令行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
magic-pdf --help
Usage: magic-pdf [OPTIONS]

Options:
  -v, --version                display the version and exit
  -p, --path PATH              local pdf filepath or directory  [required]
  -o, --output-dir TEXT        output local directory
  -m, --method [ocr|txt|auto]  the method for parsing pdf.
                               ocr: using ocr technique to extract information from pdf,
                               txt: suitable for the text-based pdf only and outperform ocr,
                               auto: automatically choose the best method for parsing pdf
                                  from ocr and txt.
                               without method specified, auto will be used by default.
  --help                       Show this message and exit.


## show version
magic-pdf -v

## command line example
magic-pdf -p {some_pdf} -o {some_output_dir} -m auto

其中 {some_pdf} 可以是单个pdf文件,也可以是一个包含多个pdf文件的目录。 运行完命令后输出的结果会保存在{some_output_dir}目录下, 输出的文件列表如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
├── some_pdf.md                          # markdown 文件
├── images                               # 存放图片目录
├── some_pdf_layout.pdf                  # layout 绘图
├── some_pdf_middle.json                 # minerU 中间处理结果
├── some_pdf_model.json                  # 模型推理结果
├── some_pdf_origin.pdf                  # 原 pdf 文件
└── some_pdf_spans.pdf                   # 最小粒度的bbox位置信息绘图
API

处理本地磁盘上的文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import os
import json

from loguru import logger

from magic_pdf.pipe.UNIPipe import UNIPipe
from magic_pdf.rw.DiskReaderWriter import DiskReaderWriter

import magic_pdf.model as model_config 
model_config.__use_inside_model__ = True

try:
    current_script_dir = os.path.dirname(os.path.abspath(__file__))
    demo_name = "demo1"
    pdf_path = os.path.join(current_script_dir, f"{demo_name}.pdf")
    model_path = os.path.join(current_script_dir, f"{demo_name}.json")
    pdf_bytes = open(pdf_path, "rb").read()
    # model_json = json.loads(open(model_path, "r", encoding="utf-8").read())
    model_json = []  # model_json传空list使用内置模型解析
    jso_useful_key = {"_pdf_type": "", "model_list": model_json}
    local_image_dir = os.path.join(current_script_dir, 'images')
    image_dir = str(os.path.basename(local_image_dir))
    image_writer = DiskReaderWriter(local_image_dir)
    pipe = UNIPipe(pdf_bytes, jso_useful_key, image_writer)
    pipe.pipe_classify()
    """如果没有传入有效的模型数据,则使用内置model解析"""
    if len(model_json) == 0:
        if model_config.__use_inside_model__:
            pipe.pipe_analyze()
        else:
            logger.error("need model list input")
            exit(1)
    pipe.pipe_parse()
    md_content = pipe.pipe_mk_markdown(image_dir, drop_mode="none")
    with open(f"{demo_name}.md", "w", encoding="utf-8") as f:
        f.write(md_content)
except Exception as e:
    logger.exception(e)

Magic-Doc

github:https://github.com/opendatalab/magic-doc

简介

Magic-Doc 是一个轻量级、开源的用于将多种格式的文档(PPT/PPTX/DOC/DOCX/PDF)转化为 markdown 格式的工具。支持转换本地文档或者位于 AWS S3 上的文件

主要功能包含

  • Web网页提取
    • 跨模态精准解析图文、表格、公式信息
  • 电子书文献提取
    • 支持 epub,mobi等多格式文献,文本图片全适配
  • 语言类型鉴定
    • 支持176种语言的准确识别
安装

前置依赖: python3.10 安装依赖

  • linux/osx
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apt-get/yum/brew install libreoffice
  • windows
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
安装 libreoffice 
添加 "install_dir\LibreOffice\program" to 环境变量 PATH

安装 Magic-Doc

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install fairy-doc[cpu] # 安装 cpu 版本 
或 
pip install fairy-doc[gpu] # 安装 gpu 版本
使用示例
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# for local file
from magic_doc.docconv import DocConverter, S3Config
converter = DocConverter(s3_config=None)
markdown_content, time_cost = converter.convert("some_doc.pptx", conv_timeout=300)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# for remote file located in aws s3
from magic_doc.docconv import DocConverter, S3Config

s3_config = S3Config(ak='${ak}', sk='${sk}', endpoint='${endpoint}')
converter = DocConverter(s3_config=s3_config)
markdown_content, time_cost = converter.convert("s3://some_bucket/some_doc.pptx", conv_timeout=300)
性能

环境:AMD EPYC 7742 64-Core Processor, NVIDIA A100, Centos 7

文件类型

转化速度

PDF (digital)

347 (page/s)

PDF (ocr)

2.7 (page/s)

PPT

20 (page/s)

PPTX

149 (page/s)

DOC

600 (page/s)

DOCX

1482 (page/s)

参考:https://blog.csdn.net/lovechris00/article/details/140584728 https://blog.csdn.net/lokuz/article/details/141962790

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于 MinerU
  • Magic-PDF
    • 使用CPU快速体验
      • 1. 安装magic-pdf
      • 2. 下载模型权重文件
      • 3. 拷贝配置文件并进行配置
    • 使用CUDA或MPS加速推理
    • 使用
      • 命令行
      • API
  • Magic-Doc
    • 简介
    • 安装
    • 使用示例
    • 性能
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档