模型概述
模型特點
模型能力
使用案例
🚀 SLANet
SLANet是用於表格結構識別的模型,能夠將不可編輯的表格圖像轉換為可編輯的表格格式(如HTML)。其輸出的表格區域HTML代碼,可作為輸入傳遞給表格識別流程進行後續處理。
🚀 快速開始
安裝
1. 安裝PaddlePaddle
請參考以下命令,使用pip安裝PaddlePaddle:
# 適用於CUDA11.8
python -m pip install paddlepaddle-gpu==3.0.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/
# 適用於CUDA12.6
python -m pip install paddlepaddle-gpu==3.0.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu126/
# 適用於CPU
python -m pip install paddlepaddle==3.0.0 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/
PaddlePaddle安裝的詳細信息,請參考PaddlePaddle官方網站。
2. 安裝PaddleOCR
從PyPI安裝最新版本的PaddleOCR推理包:
python -m pip install paddleocr
模型使用
基礎用法
你可以通過以下命令快速體驗模型功能:
paddleocr table_structure_recognition \
--model_name SLANet \
-i https://cdn-uploads.huggingface.co/production/uploads/681c1ecd9539bdde5ae1733c/6rfhb-CXOHowonjpBsaUJ.png
你也可以將表格分類模塊的模型推理集成到你的項目中。在運行以下代碼之前,請將示例圖像下載到本地:
from paddleocr import TableStructureRecognition
model = TableStructureRecognition(model_name="SLANet")
output = model.predict(input="6rfhb-CXOHowonjpBsaUJ.png", batch_size=1)
for res in output:
res.print(json_format=False)
res.save_to_json("./output/res.json")
運行後,得到的結果如下:
{'res': {'input_path': '6rfhb-CXOHowonjpBsaUJ.png', 'page_index': None, 'bbox': [[2, 2, 60, 3, 60, 37, 2, 37], [50, 1, 193, 2, 195, 36, 51, 36], [175, 1, 252, 1, 255, 36, 178, 36], [246, 2, 321, 2, 322, 36, 248, 36], [316, 2, 390, 2, 391, 36, 318, 36], [392, 2, 493, 2, 493, 40, 393, 40], [5, 39, 52, 40, 52, 82, 5, 82], [65, 40, 181, 41, 181, 89, 65, 89], [186, 40, 252, 41, 252, 84, 186, 84], [251, 40, 323, 41, 324, 82, 252, 82], [323, 40, 385, 41, 386, 82, 324, 81], [384, 39, 496, 40, 496, 84, 385, 84], [5, 79, 52, 79, 52, 120, 5, 120], [63, 79, 182, 79, 183, 119, 63, 119], [188, 79, 252, 80, 252, 118, 189, 118], [253, 78, 324, 79, 326, 117, 254, 117], [322, 78, 383, 78, 385, 117, 324, 117], [397, 77, 495, 77, 495, 120, 398, 120], [4, 117, 50, 117, 51, 153, 4, 153], [67, 116, 181, 116, 183, 152, 68, 153], [190, 115, 251, 115, 252, 150, 191, 151], [253, 114, 324, 114, 326, 151, 255, 151], [324, 114, 383, 114, 384, 150, 326, 150], [398, 113, 494, 113, 494, 154, 400, 155], [1, 150, 53, 149, 53, 187, 1, 187], [73, 150, 179, 149, 180, 187, 73, 187], [188, 150, 254, 149, 255, 186, 189, 187], [253, 149, 326, 149, 328, 187, 255, 187], [325, 150, 383, 149, 385, 187, 327, 187], [393, 148, 493, 148, 493, 187, 394, 187]], 'structure': ['<html>', '<body>', '<table>', '<tr>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '</tr>', '<tr>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '</tr>', '<tr>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '</tr>', '<tr>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '</tr>', '<tr>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '<td></td>', '</tr>', '</table>', '</body>', '</html>'], 'structure_score': 0.9999815}}
使用命令和參數說明的詳細信息,請參考文檔。
管道使用
單個模型的能力是有限的,但由多個模型組成的管道可以提供更強的能力來解決現實場景中的難題。
通用表格識別V2管道
通用表格識別V2管道用於解決表格識別任務,通過從圖像中提取信息並以HTML或Excel格式輸出。該管道包含8個模塊:
- 表格分類模塊
- 表格結構識別模塊
- 表格單元格檢測模塊
- 文本檢測模塊
- 文本識別模塊
- 佈局區域檢測模塊(可選)
- 文檔圖像方向分類模塊(可選)
- 文本圖像去畸變模塊(可選)
運行以下命令快速體驗通用表格識別V2管道:
paddleocr table_recognition_v2 -i https://cdn-uploads.huggingface.co/production/uploads/681c1ecd9539bdde5ae1733c/mabagznApI1k9R8qFoTLc.png \
--use_doc_orientation_classify False \
--use_doc_unwarping False \
--save_path ./output \
--device gpu:0
結果將打印到終端:
{'res': {'input_path': 'mabagznApI1k9R8qFoTLc.png', 'page_index': None, 'model_settings': {'use_doc_preprocessor': False, 'use_layout_detection': True, 'use_ocr_model': True}, 'layout_det_res': {'input_path': None, 'page_index': None, 'boxes': [{'cls_id': 8, 'label': 'table', 'score': 0.86655592918396, 'coordinate': [0.0125130415, 0.41920784, 1281.3737, 585.3884]}]}, 'overall_ocr_res': {'input_path': None, 'page_index': None, 'model_settings': {'use_doc_preprocessor': False, 'use_textline_orientation': False}, 'dt_polys': array([[[ 9, 21],
...,
[ 9, 59]],
...,
[[1046, 536],
...,
[1046, 573]]], dtype=int16), 'text_det_params': {'limit_side_len': 960, 'limit_type': 'max', 'thresh': 0.3, 'box_thresh': 0.6, 'unclip_ratio': 2.0}, 'text_type': 'general', 'textline_orientation_angles': array([-1, ..., -1]), 'text_rec_score_thresh': 0, 'rec_texts': ['部門', '報銷人', '報銷事由', '批准人:', '單據', '張', '合計金額', '元', '車費票', '其', '火車費票', '飛機票', '中', '旅住宿費', '其他', '補貼'], 'rec_scores': array([0.99958128, ..., 0.99317062]), 'rec_polys': array([[[ 9, 21],
...,
[ 9, 59]],
...,
[[1046, 536],
...,
[1046, 573]]], dtype=int16), 'rec_boxes': array([[ 9, ..., 59],
...,
[1046, ..., 573]], dtype=int16)}, 'table_res_list': [{'cell_box_list': [array([ 0.13052222, ..., 73.08310249]), array([104.43082511, ..., 73.27777413]), array([319.39041221, ..., 73.30439308]), array([424.2436837 , ..., 73.44736794]), array([580.75836265, ..., 73.24003914]), array([723.04370201, ..., 73.22717598]), array([984.67315757, ..., 73.20420387]), array([1.25130415e-02, ..., 5.85419208e+02]), array([984.37072837, ..., 137.02281502]), array([984.26586998, ..., 201.22290352]), array([984.24017417, ..., 585.30775765]), array([1039.90606773, ..., 265.44664314]), array([1039.69549644, ..., 329.30540779]), array([1039.66546714, ..., 393.57319954]), array([1039.5122689 , ..., 457.74644783]), array([1039.55535972, ..., 521.73030403]), array([1039.58612144, ..., 585.09468392])], 'pred_html': '<html><body><table><tbody><tr><td>部門</td><td></td><td>報銷人</td><td></td><td>報銷事由</td><td></td><td colspan="2">批准人:</td></tr><tr><td colspan="6" rowspan="8"></td><td colspan="2">單據 張</td></tr><tr><td colspan="2">合計金額 元</td></tr><tr><td rowspan="6">其 中</td><td>車費票</td></tr><tr><td>火車費票</td></tr><tr><td>飛機票</td></tr><tr><td>旅住宿費</td></tr><tr><td>其他</td></tr><tr><td>補貼</td></tr></tbody></table></body></html>', 'table_ocr_pred': {'rec_polys': array([[[ 9, 21],
...,
[ 9, 59]],
...,
[[1046, 536],
...,
[1046, 573]]], dtype=int16), 'rec_texts': ['部門', '報銷人', '報銷事由', '批准人:', '單據', '張', '合計金額', '元', '車費票', '其', '火車費票', '飛機票', '中', '旅住宿費', '其他', '補貼'], 'rec_scores': array([0.99958128, ..., 0.99317062]), 'rec_boxes': array([[ 9, ..., 59],
...,
[1046, ..., 573]], dtype=int16)}}]}}
如果指定了save_path
,可視化結果將保存到save_path
目錄下。可視化輸出如下:
命令行方式適用於快速體驗。對於項目集成,也只需要幾行代碼:
from paddleocr import TableRecognitionPipelineV2
pipeline = TableRecognitionPipelineV2(
use_doc_orientation_classify=False, # 使用use_doc_orientation_classify啟用/禁用文檔方向分類模型
use_doc_unwarping=False, # 使用use_doc_unwarping啟用/禁用文檔去畸變模塊
)
# pipeline = TableRecognitionPipelineV2(use_doc_orientation_classify=True) # 使用use_doc_orientation_classify指定是否使用文檔方向分類模型
# pipeline = TableRecognitionPipelineV2(use_doc_unwarping=True) # 使用use_doc_unwarping指定是否使用文本圖像去畸變模塊
# pipeline = TableRecognitionPipelineV2(device="gpu") # 使用device指定使用GPU進行模型推理
output = pipeline.predict("https://cdn-uploads.huggingface.co/production/uploads/681c1ecd9539bdde5ae1733c/mabagznApI1k9R8qFoTLc.png")
for res in output:
res.print() ## 打印預測的結構化輸出
res.save_to_img("./output/")
res.save_to_xlsx("./output/")
res.save_to_html("./output/")
res.save_to_json("./output/")
如果你想使用SLANet模型進行表格識別,只需更改模型名稱並使用端到端預測模式,如下所示:
paddleocr table_recognition_v2 -i https://cdn-uploads.huggingface.co/production/uploads/681c1ecd9539bdde5ae1733c/mabagznApI1k9R8qFoTLc.png \
--use_doc_orientation_classify False \
--use_doc_unwarping False \
--wired_table_structure_recognition_model_name SLANet \
--use_e2e_wired_table_rec_model True \
--wireless_table_structure_recognition_model_name SLANet \
--use_e2e_wireless_table_rec_model True \
--save_path ./output \
--device gpu:0
from paddleocr import TableRecognitionPipelineV2
pipeline = TableRecognitionPipelineV2(
use_doc_orientation_classify=False,
use_doc_unwarping=False,
wired_table_structure_recognition_model_name=SLANet, ## 用於有線表格識別
wireless_table_structure_recognition_model_name=SLANet, ## 用於無線表格識別
)
output = pipeline.predict(
"https://cdn-uploads.huggingface.co/production/uploads/681c1ecd9539bdde5ae1733c/mabagznApI1k9R8qFoTLc.png",
use_e2e_wired_table_rec_model=True, ## 用於有線表格識別
use_e2e_wireless_table_rec_model=True, ## 用於無線表格識別
)
for res in output:
res.print() ## 打印預測的結構化輸出
res.save_to_img("./output/")
res.save_to_xlsx("./output/")
res.save_to_html("./output/")
res.save_to_json("./output/")
使用命令和參數說明的詳細信息,請參考文檔。
PP-StructureV3
佈局分析是一種從文檔圖像中提取結構化信息的技術。PP-StructureV3包括以下六個模塊:
- 佈局檢測模塊
- 通用OCR管道
- 文檔圖像預處理管道(可選)
- 表格識別管道(可選)
- 印章識別管道(可選)
- 公式識別管道(可選)
運行以下命令快速體驗PP-StructureV3管道:
paddleocr pp_structurev3 -i https://cdn-uploads.huggingface.co/production/uploads/681c1ecd9539bdde5ae1733c/mG4tnwfrvECoFMu-S9mxo.png \
--use_doc_orientation_classify False \
--use_doc_unwarping False \
--wired_table_structure_recognition_model_name SLANet \
--use_e2e_wired_table_rec_model True \
--wireless_table_structure_recognition_model_name SLANet \
--use_e2e_wireless_table_rec_model True \
--use_textline_orientation False \
--device gpu:0
結果將打印到終端。如果指定了save_path
,結果將保存到save_path
目錄下。
只需幾行代碼即可體驗管道的推理。以PP-StructureV3管道為例:
from paddleocr import PPStructureV3
pipeline = PPStructureV3(
wired_table_structure_recognition_model_name=SLANet, ## 用於有線表格識別
wireless_table_structure_recognition_model_name=SLANet, ## 用於無線表格識別
use_doc_orientation_classify=False, # 使用use_doc_orientation_classify啟用/禁用文檔方向分類模型
use_doc_unwarping=False, # 使用use_doc_unwarping啟用/禁用文檔去畸變模塊
use_textline_orientation=False, # 使用use_textline_orientation啟用/禁用文本行方向分類模型
device="gpu:0", # 使用device指定使用GPU進行模型推理
)
output = pipeline.predict(
"mG4tnwfrvECoFMu-S9mxo.png",
use_e2e_wired_table_rec_model=True, ## 用於有線表格識別
use_e2e_wireless_table_rec_model=True, ## 用於無線表格識別
)
for res in output:
res.print() # 打印結構化預測輸出
res.save_to_json(save_path="output") ## 以JSON格式保存當前圖像的結構化結果
res.save_to_markdown(save_path="output") ## 以Markdown格式保存當前圖像的結果
管道中使用的默認模型是SLANeXt_wired
和SLANeXt_wireless
,因此需要通過參數指定為SLANet
。使用命令和參數說明的詳細信息,請參考文檔。
✨ 主要特性
- 表格結構識別:能夠識別表格中行列和單元格的位置,將表格圖像轉換為可編輯的HTML格式。
- 多模塊集成:可與多個模型集成,組成管道解決複雜的表格識別任務。
- 多模式支持:支持正常模式和高性能模式,滿足不同場景需求。
📚 詳細文檔
📄 許可證
本項目採用Apache-2.0許可證。
📊 模型信息
屬性 | 詳情 |
---|---|
模型類型 | SLANet |
準確率(%) | 59.52 |
GPU推理時間(ms) [正常模式 / 高性能模式] |
103.08 / 103.08 |
CPU推理時間(ms) [正常模式 / 高性能模式] |
197.99 / 197.99 |
模型存儲大小(M) | 6.9 |











