CV之PDF-Extract-Kit:PDF-Extract-Kit(布局檢測→公式檢測+公式識別→表格識別→光學(xué)字符識別)的簡介、安裝和使用方法、案例應(yīng)用之詳細(xì)攻略
PDF文檔中包含大量知識信息,然而提取高質(zhì)量的PDF內(nèi)容并非易事。為此,我們將PDF內(nèi)容提取工作進(jìn)行拆解:
圖像
,表格
,標(biāo)題
,文本
等;行內(nèi)公式
和行間公式
;注意: 由于文檔類型的多樣性,現(xiàn)有開源的布局檢測和公式檢測很難處理多樣性的PDF文檔,為此我們內(nèi)容采集多樣性數(shù)據(jù)進(jìn)行標(biāo)注和訓(xùn)練,使得在各類文檔上取得精準(zhǔn)的檢測效果,細(xì)節(jié)參考布局檢測和公式檢測部分。對于公式識別,UniMERNet方法可以媲美商業(yè)軟件,在各種類型公式識別上均勻很高的質(zhì)量。對于OCR,我們采用PaddleOCR,對中英文OCR效果不錯。
GitHub地址:https://github.com/opendatalab/PDF-Extract-Kit
2024.08.01 新增了StructEqTable表格識別模塊用于表格內(nèi)容提取,歡迎使用!
2024.07.01 我們發(fā)布了PDF-Extract-Kit,一個用于高質(zhì)量PDF內(nèi)容提取的綜合工具包,包括布局檢測、公式檢測、公式識別和OCR。
{0: 'title', # 標(biāo)題
1: 'plain text', # 文本
2: 'abandon', # 包括頁眉頁腳頁碼和頁面注釋
3: 'figure', # 圖片
4: 'figure_caption', # 圖片描述
5: 'table', # 表格
6: 'table_caption', # 表格描述
7: 'table_footnote', # 表格注釋
8: 'isolate_formula', # 行間公式(這個是layout的行間公式,優(yōu)先級低于14)
9: 'formula_caption', # 行間公式的標(biāo)號
13: 'inline_formula', # 行內(nèi)公式
14: 'isolated_formula', # 行間公式
15: 'ocr_text'} # ocr識別結(jié)果
PDF-Extract-Kit?旨在提供高質(zhì)量PDF文件的提取能力。我們鼓勵社區(qū)提出具體且有價值的需求,并歡迎大家共同參與,以不斷改進(jìn)PDF-Extract-Kit工具,推動科研及產(chǎn)業(yè)發(fā)展。
結(jié)合多樣性PDF文檔標(biāo)注,我們訓(xùn)練了魯棒的布局檢測和公式檢測模型。在論文、教材、研報、財報等多樣性的PDF文檔上,我們的pipeline都能得到準(zhǔn)確的提取結(jié)果,對于掃描模糊、水印等情況也有較高魯棒性。
現(xiàn)有開源模型多基于Arxiv論文類型數(shù)據(jù)進(jìn)行訓(xùn)練,面對多樣性的PDF文檔,提取質(zhì)量遠(yuǎn)不能達(dá)到實(shí)用需求。相比之下,我們的模型經(jīng)過多樣化數(shù)據(jù)訓(xùn)練,可以適應(yīng)各種類型文檔提取。
我們與現(xiàn)有的開源Layout檢測模型做了對比,包括DocXchain、Surya、360LayoutAnalysis的兩個模型。而LayoutLMv3-SFT指的是我們在LayoutLMv3-base-chinese預(yù)訓(xùn)練權(quán)重的基礎(chǔ)上進(jìn)一步做了SFT訓(xùn)練后的模型。論文驗(yàn)證集由402張論文頁面構(gòu)成,教材驗(yàn)證集由587張不同來源的教材頁面構(gòu)成。
模型 | 論文驗(yàn)證集 | 教材驗(yàn)證集 | ||||
---|---|---|---|---|---|---|
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 |
我們與開源的模型Pix2Text-MFD做了對比。另外,YOLOv8-Trained是我們在YOLOv8l模型的基礎(chǔ)上訓(xùn)練后的權(quán)重。論文驗(yàn)證集由255張論文頁面構(gòu)成,多源驗(yàn)證集由789張不同來源的頁面構(gòu)成,包括教材、書籍等。
模型 | 論文驗(yàn)證集 | 多源驗(yàn)證集 | ||
---|---|---|---|---|
AP50 | AR50 | AP50 | AR50 | |
Pix2Text-MFD | 60.1 | 64.6 | 58.9 | 62.8 |
YOLOv8-Trained | 87.7 | 89.9 | 82.4 | 87.3 |
公式識別我們使用的是UniMERNet的權(quán)重,沒有進(jìn)一步的SFT訓(xùn)練,其精度驗(yàn)證結(jié)果可以在其GitHub頁面獲取。
表格識別我們使用的是StructEqTable的權(quán)重,用于將表格轉(zhuǎn)換為LaTeX。相比于PP-StructureV2的表格識別,StructEqTable的識別能力更強(qiáng),針對復(fù)雜表格也能夠有不錯的效果,但目前可能主要適用于學(xué)術(shù)論文中的數(shù)據(jù),速度也有較大的提升空間,我們?nèi)栽诓粩嗟鷥?yōu)化中。在一周內(nèi)我們會將表格識別的功能同步更新到MinerU中。
conda create -n pipeline python=3.10
pip install -r requirements.txt
pip install https://github.com/opendatalab/PDF-Extract-Kit/raw/main/assets/whl/detectron2-0.6-cp310-cp310-linux_x86_64.whl
安裝完環(huán)境后,可能還會遇到torch無法調(diào)用的錯誤,可以先把下面的庫卸載,然后重新安裝cuda12和cudnn。
pip uninstall nvidia-cusparse-cu12
參考模型下載下載所需模型權(quán)重
下載地址:https://github.com/opendatalab/PDF-Extract-Kit/blob/main/models/README.md
在開始之前,請確保您的系統(tǒng)上已經(jīng)安裝了 Git 大文件存儲(Git LFS)。使用以下命令進(jìn)行安裝:
git lfs install
要從 Hugging Face 下載 PDF-Extract-Kit 模型,請使用以下命令:
git lfs clone https://huggingface.co/opendatalab/PDF-Extract-Kit
確保在克隆過程中啟用了 Git LFS 以便正確下載所有大文件。
首先,使用 pip 安裝 ModelScope 庫:
pip install modelscope
使用以下 Python 代碼通過 ModelScope SDK 下載模型:
from modelscope import snapshot_download
model_dir = snapshot_download('opendatalab/PDF-Extract-Kit')
或者,您也可以使用 Git 從 ModelScope 克隆模型倉庫:
git clone https://www.modelscope.cn/opendatalab/PDF-Extract-Kit.git
將模型文件放置如下結(jié)構(gòu)中:
./
├── 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_config.json
│ └──tokenizer.json
└── README.md
如需要在Windows上運(yùn)行本項(xiàng)目,請參考在Windows環(huán)境下使用PDF-Extract-Kit。
如需要在macOS上運(yùn)行本項(xiàng)目,請參考在macOS系統(tǒng)使用PDF-Extract-Kit。
python pdf_extract.py --pdf assets/examples/example.pdf
相關(guān)參數(shù)解釋:
--pdf
?待處理的pdf文件,如果傳入一個文件夾,則會處理文件夾下的所有pdf文件。--output
?處理結(jié)果保存的路徑,默認(rèn)是"output"--vis
?是否對結(jié)果可視化,是則會把檢測的結(jié)果可視化出來,主要是檢測框和類別--render
?是否把識別得的結(jié)果渲染出來,包括公式的latex代碼,以及普通文本,都會渲染出來放在檢測框中。注意:此過程非常耗時,另外也需要提前安裝xelatex
和imagemagic
。本項(xiàng)目專注使用模型對
多樣性
文檔進(jìn)行高質(zhì)量
內(nèi)容提取,不涉及提取后內(nèi)容拼接成新文檔,如PDF轉(zhuǎn)Markdown。如果有此類需求,請參考我們另一個Github項(xiàng)目:?MinerU
持續(xù)更新中……