PDF-Extract-Kit

文章目录


一、关于 PDF-Extract-Kit


整体介绍

PDF文档中包含大量知识信息,然而提取高质量的PDF内容并非易事。为此,我们将PDF内容提取工作进行拆解:

  • 布局检测:使用LayoutLMv3模型进行区域检测,如图像表格,标题,文本等;
  • 公式检测:使用YOLOv8进行公式检测,包含行内公式行间公式
  • 公式识别:使用UniMERNet进行公式识别;
  • 光学字符识别:使用PaddleOCR进行文本识别;

注意: 由于文档类型的多样性,现有开源的布局检测和公式检测很难处理多样性的PDF文档,为此我们内容采集多样性数据进行标注和训练,使得在各类文档上取得精准的检测效果,细节参考布局检测公式检测部分。对于公式识别,UniMERNet方法可以媲美商业软件,在各种类型公式识别上均匀很高的质量。对于OCR,我们采用PaddleOCR,对中英文OCR效果不错。


PDF内容提取框架如下图所示


PDF-Extract-Kit输出格式

shell 复制代码
{
    "layout_dets": [    # 页中的元素
        {
            "category_id": 0, # 类别编号, 0~9,13~15
            "poly": [
                136.0, # 坐标为图片坐标,需要转换回pdf坐标, 顺序是 左上-右上-右下-左下的x,y坐标
                781.0,
                340.0,
                781.0,
                340.0,
                806.0,
                136.0,
                806.0
            ],
            "score": 0.69,   # 置信度
            "latex": ''      # 公式识别的结果,只有13,14有内容,其他为空,另外15是ocr的结果,这个key会换成text
        },
        ...
    ],
    "page_info": {         # 页信息:提取bbox时的分辨率大小,如果有缩放可以基于该信息进行对齐
        "page_no": 0,      # 页数
        "height": 1684,    # 页高
        "width": 1200      # 页宽
    }
}

中category_id包含的类型如下:

json 复制代码
{0: 'title',              # 标题
 1: 'plain text',         # 文本
 2: 'abandon',            # 包括页眉页脚页码和页面注释
 3: 'figure',             # 图片
 4: 'figure_caption',     # 图片描述
 5: 'table',              # 表格
 6: 'table_caption',      # 表格描述
 7: 'table_footnote',     # 表格注释
 8: 'isolate_formula',    # 行间公式(这个是layout的行间公式,优先级低于14)
 9: 'formula_caption',    # 行间公式的标号

 13: 'inline_formula',    # 行内公式
 14: 'isolated_formula',  # 行间公式
 15: 'ocr_text'}              # ocr识别结果

效果展示

结合多样性PDF文档标注,我们训练了鲁棒的布局检测公式检测模型。在论文、教材、研报、财报等多样性的PDF文档上,我们的pipeline都能得到准确的提取结果,对于扫描模糊、水印等情况也有较高鲁棒性。



二、评测指标

现有开源模型多基于Arxiv论文类型数据进行训练,面对多样性的PDF文档,提前质量远不能达到实用需求。相比之下,我们的模型经过多样化数据训练,可以适应各种类型文档提取。

评测代码及详细信息请看这里


1、布局检测

我们与现有的开源Layout检测模型做了对比,包括DocXchainSurya360LayoutAnalysis的两个模型。而LayoutLMv3-SFT指的是我们在LayoutLMv3-base-chinese预训练权重的基础上进一步做了SFT训练后的模型。论文验证集由402张论文页面构成,教材验证集由587张不同来源的教材页面构成。

模型 论文验证集 教材验证集
mAP AP50 AR50 mAP AP50 AR50
DocXchain 52.8 69.5 77.3 34.9 50.1 63.5
Surya 24.2 39.4 66.1 13.9 23.3 49.9
360LayoutAnalysis-Paper 37.7 53.6 59.8 20.7 31.3 43.6
360LayoutAnalysis-Report 35.1 46.9 55.9 25.4 33.7 45.1
LayoutLMv3-SFT 77.6 93.3 95.5 67.9 82.7 87.9

2、公式检测

我们与开源的模型Pix2Text-MFD做了对比。另外,YOLOv8-Trained是我们在YOLOv8l模型的基础上训练后的权重。论文验证集由255张论文页面构成,多源验证集由789张不同来源的页面构成,包括教材、书籍等。

模型 论文验证集 多源验证集
AP50 AR50 AP50 AR50
Pix2Text-MFD 60.1 64.6 58.9 62.8
YOLOv8-Trained 87.7 89.9 82.4 87.3

3、公式识别


公式识别我们使用的是 UniMERNet 的权重,没有进一步的SFT训练,其精度验证结果可以在其GitHub页面获取。


三、安装

Windows :在Windows环境下使用PDF-Extract-Kit

macOS : 在macOS系统使用PDF-Extract-Kit

以下以Linux 为例:

shell 复制代码
conda create -n pipeline python=3.10

pip install -r requirements.txt

pip install --extra-index-url https://miropsota.github.io/torch_packages_builder detectron2==0.6+pt2.3.1cu121

安装完环境后,可能会遇到一些版本冲突导致版本变更,如果遇到了版本相关的报错,可以尝试下面的命令重新安装指定版本的库。

shell 复制代码
pip install pillow==8.4.0

除了版本冲突外,可能还会遇到torch无法调用的错误,可以先把下面的库卸载,然后重新安装cuda12和cudnn。

shell 复制代码
pip uninstall nvidia-cusparse-cu12

参考模型下载 下载所需模型权重


四、模型下载

https://github.com/opendatalab/PDF-Extract-Kit/blob/main/models/README.md


1、安装 Git LFS

Before you begin, make sure Git Large File Storage (Git LFS) is installed on your system. Install it using the following command:

shell 复制代码
git lfs install

2、从 Hugging Face 下载模型

shell 复制代码
git lfs clone https://huggingface.co/wanderkid/PDF-Extract-Kit

确保在克隆过程中启用了Git LFS,以便正确下载所有大文件。


3、从 ModelScope 下载模型


SDK 下载
shell 复制代码
# First, install the ModelScope library using pip:
pip install modelscope

shell 复制代码
# Use the following Python code to download the model using the ModelScope SDK:
from modelscope import snapshot_download
model_dir = snapshot_download('wanderkid/PDF-Extract-Kit')

Git 下载
shell 复制代码
git clone https://www.modelscope.cn/wanderkid/PDF-Extract-Kit.git

将模型文件 放在这里:

shell 复制代码
./
├── 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
└── README.md

五、运行提取脚本

shell 复制代码
python pdf_extract.py --pdf data/pdfs/ocr_1.pdf

相关参数解释:

  • --pdf 待处理的pdf文件,如果传入一个文件夹,则会处理文件夹下的所有pdf文件。
  • --output 处理结果保存的路径,默认是"output"
  • --vis 是否对结果可视化,是则会把检测的结果可视化出来,主要是检测框和类别
  • --render 是否把识别得的结果渲染出来,包括公式的latex代码,以及普通文本,都会渲染出来放在检测框中。注意:此过程非常耗时,另外也需要提前安装xelateximagemagic

本项目专注使用模型对多样性文档进行高质量内容提取,不涉及提取后内容拼接成新文档,如PDF转Markdown。如果有此类需求,请参考我们另一个Github项目: MinerU


六、其它


待办事项

  • 表格解析:开发能够将表格图像转换成对应的LaTeX/Markdown格式源码的功能。
  • 化学方程式检测:实现对化学方程式的自动检测。
  • 化学方程式/图解识别:开发识别并解析化学方程式的模型。
  • 阅读顺序排序模型:构建模型以确定文档中文本的正确阅读顺序。

PDF-Extract-Kit 旨在提供高质量PDF文件的提取能力。我们鼓励社区提出具体且有价值的需求,并欢迎大家共同参与,以不断改进PDF-Extract-Kit工具,推动科研及产业发展。


协议

本仓库的代码依照 Apache-2.0 协议开源。

使用模型权重时,请遵循对应的模型协议:LayoutLMv3 / UniMERNet / YOLOv8 / PaddleOCR.


致谢


2024-07-21(日)

相关推荐
开开心心_Every3 小时前
多线程语音识别工具
javascript·人工智能·ocr·excel·语音识别·symfony
Hi202402173 小时前
支持OCR和AI解释的Web PDF阅读器:解决大文档阅读难题
pdf·flask·llm·ocr·阅读器
kevin 13 小时前
如何识别发票特殊版式?OCR大模型如何颠覆传统并保证准确率?
ocr
愿你天黑有灯下雨有伞10 小时前
告别复杂配置!Spring Boot优雅集成百度OCR的终极方案
spring boot·百度·ocr
VB59416 小时前
《考研 考证 各学科 各专业 思维导图汇总》PDF 5.2GB
考研·pdf
软件工程小施同学1 天前
计算机学报 2025年 区块链论文 录用汇总 附pdf下载
pdf·区块链
VB5941 天前
《中国传世名画》《中国传世山水画》《中国传世人物画》百科全书式的中国名画,PDF,294M
pdf
家庭云计算专家1 天前
ONLYOFFICE深度解锁系列.13-如何复制、重新排序 PDF 页面:onlyoffice 9.0.3 新功能
pdf·onlyoffice·协作空间·onlyoffice开发版·onlyoffice新功能·onlyoffice开发者版
胡耀超1 天前
基于Docker的GPU版本飞桨PaddleOCR部署深度指南(国内镜像)2025年7月底测试好用:从理论到实践的完整技术方案
运维·python·docker·容器·ocr·paddlepaddle·gpu
2301_787725652 天前
通用图片 OCR 到 Word API 数据接口
ocr