1010</div >
1111
1212### 最近更新
13+
1314- ** 2024.10.15**
1415 - 完成初版代码,包含目标检测,语义分割,角点方向识别三个模块
16+ - ** 2024.11.2**
17+ - 补充新训练yolo11的目标检测模型和边缘检测模型,增加自动下载,轻量化包体积,自由组合各个模块
1518
1619### 简介
20+
1721💡✨ 强大且高效的表格检测,支持论文、期刊、杂志、发票、收据、签到单等各种表格。
1822
19- 🚀 支持高精度 Paddle 版本和量化 ONNX 版本,单图 CPU 推理仅需 1.5 秒,Paddle-GPU(V100) 仅需 0.2 秒。
23+ 🚀 支持来源于paddle和yolo的版本,平衡速度和精度下单图 CPU 推理仅需 1 秒,Paddle-GPU(V100) 仅需 0.2 秒。
2024
2125🛠️ 支持三个模块自由组合,独立训练调优,提供 ONNX 转换脚本和微调训练方案。
2226
2327🌟 whl 包轻松集成使用,为下游 OCR、表格识别和数据采集提供强力支撑。
2428
25- 📚参考项目 [ 百度表格检测大赛第2名方案] ( https://aistudio.baidu.com/projectdetail/5398861?searchKeyword=%E8%A1%A8%E6%A0%BC%E6%A3%80%E6%B5%8B%E5%A4%A7%E8%B5%9B&searchTab=ALL ) 的实现方案,补充大量真实场景数据再训练
29+ 📚参考项目 [ 百度表格检测大赛第2名方案] ( https://aistudio.baidu.com/projectdetail/5398861?searchKeyword=%E8%A1%A8%E6%A0%BC%E6%A3%80%E6%B5%8B%E5%A4%A7%E8%B5%9B&searchTab=ALL )
30+ 的实现方案,补充大量真实场景数据再训练
2631![ img.png] ( readme_resource/structure.png )
2732👇🏻训练数据集在致谢, 作者天天上班摸鱼搞开源,希望大家点个⭐️支持一下
2833
2934### 使用建议
35+
3036📚 文档场景: 无透视旋转,只使用目标检测\
3137📷 拍照场景小角度旋转(-90~ 90): 默认左上角,不使用角点方向识别\
3238🔍 使用在线体验找到适合你场景的模型组合
33- ### 在线体验
3439
40+ ### 在线体验
3541
3642### 效果展示
43+
3744![ res_show.jpg] ( readme_resource/res_show.jpg ) ![ res_show2.jpg] ( readme_resource/res_show2.jpg )
45+
3846### 安装
39- 为简化使用,已经将最小的量化模型打包到 rapid_table_det 中,需要更高精度或gpu推理,请自行下载对应模型
40- 🪜下载模型 [ modescope模型仓] ( https://www.modelscope.cn/models/jockerK/TableExtractor ) [ release assets] ( https://github.com/Joker1212/RapidTableDetection/releases/tag/v0.0.0 )
47+
48+ 🪜模型会自动下载,也可以自己去仓库下载 [ modescope模型仓] ( https://www.modelscope.cn/models/jockerK/TableExtractor )
49+
4150``` python {linenos=table}
4251# 建议使用清华源安装 https://pypi.tuna.tsinghua.edu.cn/simple
4352pip install rapid- table- det
4453```
4554
4655#### 参数说明
47- cpu和gpu的初始化完全一致
48- ```
49- table_det = TableDetector(
50- # 目标检测表格模型
51- obj_model_path="models/obj_det_paddle(obj_det.onnx)",
52- # 边角检测表格模型(从复杂环境得到表格多边形框)
53- edge_model_path="models/edge_det_paddle(edge_det.onnx)",
54- # 角点方向识别
55- cls_model_path="models/cls_det_paddle(cls_det.onnx)",
56- # 文档场景已经由版面识别模型提取设置为False
57- use_obj_det=True,
58- # 只有90,180,270大角度旋转且无透视时候设置为False
59- use_edge_det=True,
60- # 小角度(-90~90)旋转设置为False
61- use_cls_det=True,
62- )
63- ```
56+
57+ 默认值
58+ use_cuda: False : 启用gpu加速推理 \
59+ obj_model_type="yolo_obj_det", \
60+ edge_model_type= "yolo_edge_det", \
61+ cls_model_type= "paddle_cls_det"
62+
63+ | ` model_type ` | 任务类型 | 训练来源 | 大小 | 单表格耗时 |
64+ | :---------------------| :-------| :-------------------------------------| :-------| :----------------------|
65+ | ** yolo_obj_det** | 表格目标检测 | ` yolo11-l ` | ` 100m ` | ` cpu:500ms, gpu:0.2 ` |
66+ | ` paddle_obj_det ` | 表格目标检测 | ` paddle yoloe-plus-x ` | ` 380m ` | ` cpu:500ms, gpu:0.2 ` |
67+ | ` paddle_obj_det_s ` | 表格目标检测 | ` paddle yoloe-plus-x + quantization ` | ` 95m ` | ` cpu:1000ms, gpu:0.2 ` |
68+ | ** yolo_edge_det** | 语义分割 | ` yolo11-l-segment ` | ` 108m ` | ` cpu:500ms, gpu:0.2 ` |
69+ | ` yolo_edge_det_s ` | 语义分割 | ` yolo11-s-segment ` | ` 11m ` | ` cpu:100ms, gpu:0.2 ` |
70+ | ` paddle_edge_det ` | 语义分割 | ` paddle-dbnet ` | ` 99m ` | ` cpu:600ms, gpu:0.2 ` |
71+ | ` paddle_edge_det_s ` | 语义分割 | ` paddle-dbnet + quantization ` | ` 25m ` | ` cpu:500ms, gpu:0.2 ` |
72+ | ** paddle_cls_det** | 方向分类 | ` paddle pplcnet ` | ` 6.5m ` | ` cpu:70ms, gpu:0.2 ` |
73+
74+
75+ 执行参数
76+ det_accuracy=0.7,
77+ use_obj_det=True,
78+ use_edge_det=True,
79+ use_cls_det=True,
6480
6581### 快速使用
82+
6683``` python {linenos=table}
6784from rapid_table_det.inference import TableDetector
85+
86+ img_path = f " images/weixin.png "
6887table_det = TableDetector()
69- img_path = f " tests/test_files/chip.jpg "
88+
7089result, elapse = table_det(img_path)
7190obj_det_elapse, edge_elapse, rotate_det_elapse = elapse
7291print (
7594# 输出可视化
7695# import os
7796# import cv2
78- # from rapid_table_det.utils import img_loader, visuallize, extract_table_img
97+ # from rapid_table_det.utils.visuallize import img_loader, visuallize, extract_table_img
98+ #
7999# img = img_loader(img_path)
80100# file_name_with_ext = os.path.basename(img_path)
81101# file_name, file_ext = os.path.splitext(file_name_with_ext)
@@ -94,68 +114,28 @@ print(
94114# cv2.imwrite(f"{out_dir}/{file_name}-visualize.jpg", img)
95115
96116```
97- ### gpu版本使用
98- 必须下载模型,指定模型位置!
99- ``` python {linenos=table}
100- # 建议使用清华源安装 https://pypi.tuna.tsinghua.edu.cn/simple
101- pip install rapid- table- det- paddle (默认安装gpu版本,可以自行覆盖安装cpu版本paddlepaddle)
102- ```
103- ``` python
104- from rapid_table_det_paddle.inference import TableDetector
105-
106- img_path = f " tests/test_files/chip.jpg "
107-
108- table_det = TableDetector(
109- obj_model_path = " models/obj_det_paddle" ,
110- edge_model_path = " models/edge_det_paddle" ,
111- cls_model_path = " models/cls_det_paddle" ,
112- use_obj_det = True ,
113- use_edge_det = True ,
114- use_cls_det = True ,
115- )
116- result, elapse = table_det(img_path)
117- obj_det_elapse, edge_elapse, rotate_det_elapse = elapse
118- print (
119- f " obj_det_elapse: { obj_det_elapse} , edge_elapse= { edge_elapse} , rotate_det_elapse= { rotate_det_elapse} "
120- )
121- # 一张图片中可能有多个表格
122- # img = img_loader(img_path)
123- # file_name_with_ext = os.path.basename(img_path)
124- # file_name, file_ext = os.path.splitext(file_name_with_ext)
125- # out_dir = "rapid_table_det_paddle/outputs"
126- # if not os.path.exists(out_dir):
127- # os.makedirs(out_dir)
128- # extract_img = img.copy()
129- # for i, res in enumerate(result):
130- # box = res["box"]
131- # lt, rt, rb, lb = res["lt"], res["rt"], res["rb"], res["lb"]
132- # # 带识别框和左上角方向位置
133- # img = visuallize(img, box, lt, rt, rb, lb)
134- # # 透视变换提取表格图片
135- # wrapped_img = extract_table_img(extract_img.copy(), lt, rt, rb, lb)
136- # cv2.imwrite(f"{out_dir}/{file_name}-extract-{i}.jpg", wrapped_img)
137- # cv2.imwrite(f"{out_dir}/{file_name}-visualize.jpg", img)
138-
139- ```
140-
141117
142118## FAQ (Frequently Asked Questions)
143119
1441201 . ** 问:如何微调模型适应特定场景?**
145- - 答:直接参考这个项目,有非常详细的可视化操作步骤,可以得到paddle的推理模型 [ 百度表格检测大赛] ( https://aistudio.baidu.com/projectdetail/5398861?searchKeyword=%E8%A1%A8%E6%A0%BC%E6%A3%80%E6%B5%8B%E5%A4%A7%E8%B5%9B&searchTab=ALL )
121+ -
122+ 答:直接参考这个项目,有非常详细的可视化操作步骤,可以得到paddle的推理模型 [ 百度表格检测大赛] ( https://aistudio.baidu.com/projectdetail/5398861?searchKeyword=%E8%A1%A8%E6%A0%BC%E6%A3%80%E6%B5%8B%E5%A4%A7%E8%B5%9B&searchTab=ALL )
146123
1471242 . ** 问:如何导出onnx**
148- - 答:在本项目tools下,有onnx_transform.ipynb文件,可以照步骤执行(因为pp-yoloe导出onnx有bug一直没修,这里我自己写了一个fix_onnx脚本改动onnx模型节点来临时解决了)
125+ - 答:在本项目tools下,有onnx_transform.ipynb文件,可以照步骤执行(
126+ 因为pp-yoloe导出onnx有bug一直没修,这里我自己写了一个fix_onnx脚本改动onnx模型节点来临时解决了)
149127
1501283 . ** 问:图片有扭曲可以修正吗?**
151129 - 答:本项目只解决旋转和透视场景的表格提取,对于扭曲的场景,需要先进行扭曲修正
152130
153131### 致谢
132+
154133[ 百度表格检测大赛第2名方案] ( https://aistudio.baidu.com/projectdetail/5398861?searchKeyword=%E8%A1%A8%E6%A0%BC%E6%A3%80%E6%B5%8B%E5%A4%A7%E8%B5%9B&searchTab=ALL ) \
155134[ WTW 自然场景表格数据集] ( https://tianchi.aliyun.com/dataset/108587 ) \
156135[ FinTabNet PDF文档表格数据集] ( https://developer.ibm.com/exchanges/data/all/fintabnet/ ) \
157136[ TableBank 表格数据集] ( https://doc-analysis.github.io/tablebank-page/ ) \
158137[ TableGeneration 表格自动生成工具] ( https://github.com/WenmuZhou/TableGeneration )
138+
159139### 贡献指南
160140
161141欢迎提交请求。对于重大更改,请先打开issue讨论您想要改变的内容。
0 commit comments