RapidTable库是专门用来文档类图像的表格结构还原,结合RapidOCR,将给定图像中的表格转化对应的HTML格式。
目前支持两种类别的表格识别模型:中文和英文表格识别模型,具体可参见下面表格:
slanet_plus是paddlex内置的SLANet升级版模型,准确率有大幅提升
模型类型 | 模型名称 | 模型大小 |
---|---|---|
英文 | en_ppstructure_mobile_v2_SLANet.onnx |
7.3M |
中文 | ch_ppstructure_mobile_v2_SLANet.onnx |
7.4M |
slanet_plus 中文 | slanet-plus.onnx |
6.8M |
模型来源:PaddleOCR 表格识别 PaddleX-SlaNetPlus 表格识别
模型下载地址为:link
- 支持gpu推理,适配 rapidOCR 单字识别匹配,支持逻辑坐标返回及可视化
- 补充最新paddlex-SLANet-plus 模型(paddle2onnx原因暂不能支持onnx)
- 优化可视化结果部分
- 添加返回cell坐标框参数
- 完善可视化函数
-
将
rapidocr_onnxruntime
部分从rapid_table
中解耦合出来,给出选项是否依赖,更加灵活。 -
增加接口输入参数
ocr_result
:- 如果在调用函数时,事先指定了
ocr_result
参数值,则不会再走OCR。其中ocr_result
格式需要和rapidocr_onnxruntime
返回值一致。 - 如果未指定
ocr_result
参数值,但是事先安装了rapidocr_onnxruntime
库,则会自动调用该库,进行识别。 - 如果
ocr_result
未指定,且rapidocr_onnxruntime
未安装,则会报错。必须满足两个条件中一个。
- 如果在调用函数时,事先指定了
- 更改传入表格还原中OCR的实例接口,可以传入其他OCR实例,前提要与
rapidocr_onnxruntime
接口一致
- 去掉返回表格的html字符串中的
<thead></thead><tbody></tbody>
元素,便于后续统一。 - 采用Black工具优化代码
TableStructureRec库是一个表格识别算法的集合库,当前有wired_table_rec
有线表格识别算法和lineless_table_rec
无线表格识别算法的推理包。
RapidTable是整理自PP-Structure中表格识别部分而来。由于PP-Structure较早,这个库命名就成了rapid_table
。
总之,RapidTable和TabelStructureRec都是表格识别的仓库。大家可以都试试,哪个好用用哪个。由于每个算法都不太同,暂时不打算做统一处理。
关于表格识别算法的比较,可参见TableStructureRec测评
由于模型较小,预先将slanet-plus表格识别模型(slanet-plus.onnx
)打包进了whl包内。
⚠️ 注意:rapid_table>=v0.1.0
之后,不再将rapidocr_onnxruntime
依赖强制打包到rapid_table
中。使用前,需要自行安装rapidocr_onnxruntime
包。
pip install rapidocr_onnxruntime
pip install rapid_table
#pip install onnxruntime-gpu # for gpu inference
RapidTable类提供model_path参数,可以自行指定上述2个模型,默认是slanet-plus.onnx
。举例如下:
table_engine = RapidTable()
完整示例:
from pathlib import Path
from rapid_table import RapidTable, VisTable
from rapidocr_onnxruntime import RapidOCR
from rapid_table.table_structure.utils import trans_char_ocr_res
table_engine = RapidTable()
# 开启onnx-gpu推理
# table_engine = RapidTable(use_cuda=True)
ocr_engine = RapidOCR()
viser = VisTable()
img_path = 'test_images/table.jpg'
ocr_result, _ = ocr_engine(img_path)
# 单字匹配
# ocr_result, _ = ocr_engine(img_path, return_word_box=True)
# ocr_result = trans_char_ocr_res(ocr_result)
table_html_str, table_cell_bboxes, elapse = table_engine(img_path, ocr_result)
save_dir = Path("./inference_results/")
save_dir.mkdir(parents=True, exist_ok=True)
save_html_path = save_dir / f"{Path(img_path).stem}.html"
save_drawed_path = save_dir / f"vis_{Path(img_path).name}"
viser(img_path, table_html_str, save_html_path, table_cell_bboxes, save_drawed_path)
# 返回逻辑坐标
# table_html_str, table_cell_bboxes, logic_points, elapse = table_engine(img_path, ocr_result, return_logic_points=True)
# save_logic_path = save_dir / f"vis_logic_{Path(img_path).name}"
# viser(img_path, table_html_str, save_html_path, table_cell_bboxes, save_drawed_path,logic_points, save_logic_path)
print(table_html_str)
-
用法:
$ rapid_table -h usage: rapid_table [-h] [-v] -img IMG_PATH [-m MODEL_PATH] optional arguments: -h, --help show this help message and exit -v, --vis Whether to visualize the layout results. -img IMG_PATH, --img_path IMG_PATH Path to image for layout. -m MODEL_PATH, --model_path MODEL_PATH The model path used for inference.
-
示例:
rapid_table -v -img test_images/table.jpg
<html><body><table><tr><td>Methods</td><td></td><td></td><td></td><td>FPS</td></tr><tr><td>SegLink [26]</td><td>70.0</td><td>86d><td.0</td><td>77.0</td><td>8.9</td></tr><tr><td>PixelLink [4]</td><td>73.2</td><td>83.0</td><td>77.8</td><td></td></tr><tr><td>TextSnake [18]</td><td>73.9</td><td>83.2</td><td>78.3</td><td>1.1</td></tr><tr><td>TextField [37]</td><td>75.9</td><td>87.4</td><td>81.3</td><td>5.2</td></tr><tr><td>MSR[38]</td><td>76.7</td><td>87.87.4</td><td>81.7</td><td></td></tr><tr><td>FTSN [3]</td><td>77.1</td><td>87.6</td><td>82.0</td><td></td></tr><tr><td>LSE[30]</td><td>81.7</td><td>84.2</td><td>82.9</td><><ttd></td></tr><tr><td>CRAFT [2]</td><td>78.2</td><td>88.2</td><td>82.9</td><td>8.6</td></tr><tr><td>MCN[16]</td><td>79</td><td>88</td><td>83</td><td></td></tr><tr><td>ATRR</>[35]</td><td>82.1</td><td>85.2</td><td>83.6</td><td></td></tr><tr><td>PAN [34]</td><td>83.8</td><td>84.4</td><td>84.1</td><td>30.2</td></tr><tr><td>DB[12]</td><td>79.2</t91/d><td>91.5</td><td>84.9</td><td>32.0</td></tr><tr><td>DRRG[41]</td><td>82.30</td><td>88.05</td><td>85.08</td><td></td></tr><tr><td>Ours (SynText)</td><td>80.68</td><td>85<t..40</td><td>82.97</td><td>12.68</td></tr><tr><td>Ours (MLT-17)</td><td>84.54</td><td>86.62</td><td>85.57</td><td>12.31</td></tr></table></body></html>
Methods | FPS | |||
SegLink [26] | 70.0 | 86d> | 77.0 | 8.9 |
PixelLink [4] | 73.2 | 83.0 | 77.8 | |
TextSnake [18] | 73.9 | 83.2 | 78.3 | 1.1 |
TextField [37] | 75.9 | 87.4 | 81.3 | 5.2 |
MSR[38] | 76.7 | 87.87.4 | 81.7 | |
FTSN [3] | 77.1 | 87.6 | 82.0 | |
LSE[30] | 81.7 | 84.2 | 82.9 | |
CRAFT [2] | 78.2 | 88.2 | 82.9 | 8.6 |
MCN[16] | 79 | 88 | 83 | |
ATRR[35] | 82.1 | 85.2 | 83.6 | |
PAN [34] | 83.8 | 84.4 | 84.1 | 30.2 |
DB[12] | 79.2 | 91.5 | 84.9 | 32.0 |
DRRG[41] | 82.30 | 88.05 | 85.08 | |
Ours (SynText) | 80.68 | 85 | 82.97 | 12.68 |
Ours (MLT-17) | 84.54 | 86.62 | 85.57 | 12.31 |