基于PP-Structure急速 30行代码实现表格识别

简介: 基于PP-Structure急速 30行代码实现表格识别

1. 安装


快速演示 PP-Structure 预测,首先下载PaddleOCR代码并安装依赖包

# clone PaddleOCR代码
! git  clone https://gitee.com/PaddlePaddle/PaddleOCR --depth=1
# 安装依赖包
! pip install -U pip
! pip install -U https://paddleocr.bj.bcebos.com/whl/layoutparser-0.0.0-py3-none-any.whl
! pip install -r PaddleOCR/requirements.txt
! pip install pandas

安装完成后,通过下面命令即可快速完成表格的识别


2.常见数据表识别并转存excel


# 切换到工作目录
import os
os.chdir('/home/aistudio/PaddleOCR/ppstructure')
# 下载模型
! mkdir inference && cd inference
# 下载超轻量级表格英文OCR模型的检测模型并解压
! wget -P ./inference/ https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_det_infer.tar && cd inference && tar xf ch_PP-OCRv2_det_infer.tar && cd ..
# 下载超轻量级表格英文OCR模型的识别模型并解压
! wget -P ./inference/ https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_rec_infer.tar && cd inference && tar xf ch_PP-OCRv2_rec_infer.tar && cd ..
# 下载超轻量级英文表格英寸模型并解压
! wget -P ./inference/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/table/en_ppocr_mobile_v2.0_table_structure_infer.tar && cd inference && tar xf en_ppocr_mobile_v2.0_table_structure_infer.tar && cd ..
--2022-04-24 17:07:55--  https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_det_infer.tar
Resolving paddleocr.bj.bcebos.com (paddleocr.bj.bcebos.com)... 182.61.200.195, 182.61.200.229, 2409:8c04:1001:1002:0:ff:b001:368a
Connecting to paddleocr.bj.bcebos.com (paddleocr.bj.bcebos.com)|182.61.200.195|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3190272 (3.0M) [application/x-tar]
Saving to: ‘./inference/ch_PP-OCRv2_det_infer.tar’
ch_PP-OCRv2_det_inf 100%[===================>]   3.04M  13.4MB/s    in 0.2s    
2022-04-24 17:07:55 (13.4 MB/s) - ‘./inference/ch_PP-OCRv2_det_infer.tar’ saved [3190272/3190272]
--2022-04-24 17:07:55--  https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_rec_infer.tar
Resolving paddleocr.bj.bcebos.com (paddleocr.bj.bcebos.com)... 182.61.200.229, 182.61.200.195, 2409:8c04:1001:1002:0:ff:b001:368a
Connecting to paddleocr.bj.bcebos.com (paddleocr.bj.bcebos.com)|182.61.200.229|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 8875520 (8.5M) [application/x-tar]
Saving to: ‘./inference/ch_PP-OCRv2_rec_infer.tar’
ch_PP-OCRv2_rec_inf 100%[===================>]   8.46M  12.5MB/s    in 0.7s    
2022-04-24 17:07:56 (12.5 MB/s) - ‘./inference/ch_PP-OCRv2_rec_infer.tar’ saved [8875520/8875520]
--2022-04-24 17:07:56--  https://paddleocr.bj.bcebos.com/dygraph_v2.0/table/en_ppocr_mobile_v2.0_table_structure_infer.tar
Resolving paddleocr.bj.bcebos.com (paddleocr.bj.bcebos.com)... 182.61.200.229, 182.61.200.195, 2409:8c04:1001:1002:0:ff:b001:368a
Connecting to paddleocr.bj.bcebos.com (paddleocr.bj.bcebos.com)|182.61.200.229|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 19667456 (19M) [application/x-tar]
Saving to: ‘./inference/en_ppocr_mobile_v2.0_table_structure_infer.tar’
en_ppocr_mobile_v2. 100%[===================>]  18.76M  8.45MB/s    in 2.2s    
2022-04-24 17:07:59 (8.45 MB/s) - ‘./inference/en_ppocr_mobile_v2.0_table_structure_infer.tar’ saved [19667456/19667456]
# 先是输入图像
import cv2
from matplotlib import pyplot as plt
%matplotlib inline
# 读取表格图像并显示
img = cv2.imread('/home/aistudio/1.jpg')
plt.imshow(img)

image.png

# https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/ppstructure/table/predict_table.py#L55
from table.predict_table import TableSystem,to_excel
from utility import init_args
# 初始化参数
args = init_args().parse_args(args=[])
args.det_model_dir='inference/ch_PP-OCRv2_det_infer'
args.rec_model_dir='inference/ch_PP-OCRv2_rec_infer'
args.table_model_dir='inference/en_ppocr_mobile_v2.0_table_structure_infer'
args.image_dir='/home/aistudio/1.jpg'
args.rec_char_dict_path='../ppocr/utils/ppocr_keys_v1.txt'
args.table_char_dict_path='../ppocr/utils/dict/table_structure_dict.txt'
args.det_limit_side_len=736
args.det_limit_type='min'
args.output='../output/table'
args.use_gpu=False
# 初始化表格识别系统
table_sys = TableSystem(args)
img = cv2.imread('/home/aistudio/1.jpg')
# 执行表格识别
pred_html = table_sys(img)
# 结果存储到excel文件
to_excel(pred_html,'1.xlsx')
print(pred_html)
[2022/04/24 17:18:05] root DEBUG: dt_boxes num : 153, elapse : 1.0396051406860352
[2022/04/24 17:18:13] root DEBUG: rec_res num  : 153, elapse : 8.226087093353271
<html><body><table><thead><tr><td>日期</td><td>销售商 来源省份</td><td>单价 (元/吨)</td><td>入库量(吨)</td></tr></thead><tbody><tr><td>2018/7/21王五小麦</td><td>陕西</td><td>2900</td><td>41.39</td></tr><tr><td>2018/7/21王五小麦</td><td>山东</td><td>2800</td><td>482</td></tr><tr><td>2018/7/21李四粮食</td><td>河北</td><td>2700</td><td>46.21</td></tr><tr><td>2018/7/21李四粮食</td><td>河北</td><td>2700</td><td>45.39</td></tr><tr><td>2018/7/21张三粮配</td><td>河北</td><td>2700</td><td>48.17</td></tr><tr><td>2018/7/21李四粮食</td><td>河北</td><td>2700</td><td>45.18</td></tr><tr><td>2018/7/21王五小麦</td><td>陕西</td><td>2900</td><td>46.12</td></tr><tr><td>2018/7/21王五小麦</td><td>河北</td><td>2700</td><td>44.55</td></tr><tr><td>2018/7/21赵六麦子专营</td><td>陕西</td><td>2900</td><td>475</td></tr><tr><td>2018/7/21王五小麦</td><td>河北</td><td>2700</td><td>40.87</td></tr><tr><td>2018/7/21赵六麦子专营</td><td>河北</td><td>2700</td><td>40.66</td></tr><tr><td>2018/7/21李四粮食</td><td>河北</td><td>2700</td><td>46.26</td></tr><tr><td>2018/7/21赵六麦子专营</td><td>陕西</td><td>2900</td><td>4848</td></tr><tr><td>2018/7/21王五小麦</td><td>陕西</td><td>2900</td><td>49.01</td></tr><tr><td>2018/7/21王五小麦</td><td>河北</td><td>2700</td><td>40.89</td></tr><tr><td>2018/7/21王五小麦</td><td>山西</td><td>2720</td><td>40.07</td></tr><tr><td>2018/7/21王五小麦</td><td>山西</td><td>2720</td><td>47.71</td></tr><tr><td>2018/7/21张三粮配</td><td>山西</td><td>2720</td><td>42.48</td></tr><tr><td>2018/7/21王五小麦</td><td>河北</td><td>2700</td><td>42.23</td></tr><tr><td>2018/7/21王五小麦</td><td>河北</td><td>2700</td><td>41.99</td></tr><tr><td>2018/7/21王五小麦</td><td>山西</td><td>2720</td><td>42.18</td></tr><tr><td>2018/7/21王五小麦</td><td>山西</td><td>2720</td><td>42.99</td></tr><tr><td>2018/7/21王五小麦</td><td>陕西</td><td>2900</td><td>43.32</td></tr><tr><td>2018/7/21张三粮配</td><td>山东</td><td>2800</td><td>4741</td></tr><tr><td>2018/7/21王五小麦</td><td>河北</td><td>2700</td><td>皖A8</td></tr><tr><td>2018/7/21王五小麦</td><td>河北</td><td>2700</td><td>44.01</td></tr><tr><td>2018/7/21李四粮食</td><td>河北</td><td>2700</td><td>41.81</td></tr><tr><td>2018/7/21王五小麦</td><td>河北</td><td>2700</td><td>48.16</td></tr><tr><td>2018/7/21张三粮配</td><td>山东</td><td>2800</td><td>44.34</td></tr><tr><td>2018/7/21王五小麦</td><td>山西</td><td>2720</td><td>46.09</td></tr><tr><td>2018/7/21王五小麦</td><td>山东</td><td>2800</td><td>皖A669</td></tr><tr><td>2018/7/21王五小麦</td><td>陕陕西</td><td>2900</td><td>4757</td></tr><tr><td>2018/7/21王五小麦</td><td>河北</td><td>2700</td><td>皖A55</td></tr><tr><td>2018/7/21王五小麦</td><td>陕西</td><td>2900</td><td>44.4</td></tr><tr><td>2018/7/21王五小麦</td><td>陕西</td><td>2900</td><td>40.42</td></tr><tr><td>2018/7/21赵六麦子专营</td><td>山西</td><td>2720</td><td>4997</td></tr><tr><td>2018/7/21王五小麦</td><td>山东</td><td>2800</td><td>4525</td></tr></table></body></html>
# 读取excel并显示
import pandas as pd
df = pd.read_excel('1.xlsx').fillna('')
print(df)
日期 销售商 来源省份  单价 (元/吨) 入库量(吨)
0     2018/7/21王五小麦       陕西      2900  41.39
1     2018/7/21王五小麦       山东      2800    482
2     2018/7/21李四粮食       河北      2700  46.21
3     2018/7/21李四粮食       河北      2700  45.39
4     2018/7/21张三粮配       河北      2700  48.17
5     2018/7/21李四粮食       河北      2700  45.18
6     2018/7/21王五小麦       陕西      2900  46.12
7     2018/7/21王五小麦       河北      2700  44.55
8   2018/7/21赵六麦子专营       陕西      2900    475
9     2018/7/21王五小麦       河北      2700  40.87
10  2018/7/21赵六麦子专营       河北      2700  40.66
11    2018/7/21李四粮食       河北      2700  46.26
12  2018/7/21赵六麦子专营       陕西      2900   4848
13    2018/7/21王五小麦       陕西      2900  49.01
14    2018/7/21王五小麦       河北      2700  40.89
15    2018/7/21王五小麦       山西      2720  40.07
16    2018/7/21王五小麦       山西      2720  47.71
17    2018/7/21张三粮配       山西      2720  42.48
18    2018/7/21王五小麦       河北      2700  42.23
19    2018/7/21王五小麦       河北      2700  41.99
20    2018/7/21王五小麦       山西      2720  42.18
21    2018/7/21王五小麦       山西      2720  42.99
22    2018/7/21王五小麦       陕西      2900  43.32
23    2018/7/21张三粮配       山东      2800   4741
24    2018/7/21王五小麦       河北      2700    皖A8
25    2018/7/21王五小麦       河北      2700  44.01
26    2018/7/21李四粮食       河北      2700  41.81
27    2018/7/21王五小麦       河北      2700  48.16
28    2018/7/21张三粮配       山东      2800  44.34
29    2018/7/21王五小麦       山西      2720  46.09
30    2018/7/21王五小麦       山东      2800  皖A669
31    2018/7/21王五小麦      陕陕西      2900   4757
32    2018/7/21王五小麦       河北      2700   皖A55
33    2018/7/21王五小麦       陕西      2900   44.4
34    2018/7/21王五小麦       陕西      2900  40.42
35  2018/7/21赵六麦子专营       山西      2720   4997
36    2018/7/21王五小麦       山东      2800   4525


2.课表识别并转存excel


# 先是输入图像
import cv2
from matplotlib import pyplot as plt
%matplotlib inline
# 读取表格图像并显示
img = cv2.imread('/home/aistudio/2.jpg')
plt.imshow(img)
<matplotlib.image.AxesImage at 0x7fa1c573d910>

image.png

# https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/ppstructure/table/predict_table.py#L55
from table.predict_table import TableSystem,to_excel
from utility import init_args
# 初始化参数
args = init_args().parse_args(args=[])
args.det_model_dir='inference/ch_PP-OCRv2_det_infer'
args.rec_model_dir='inference/ch_PP-OCRv2_rec_infer'
args.table_model_dir='inference/en_ppocr_mobile_v2.0_table_structure_infer'
args.image_dir='/home/aistudio/2.jpg'
args.rec_char_dict_path='../ppocr/utils/ppocr_keys_v1.txt'
args.table_char_dict_path='../ppocr/utils/dict/table_structure_dict.txt'
args.det_limit_side_len=736
args.det_limit_type='min'
args.output='../output/table'
args.use_gpu=False
# 初始化表格识别系统
table_sys = TableSystem(args)
img = cv2.imread('/home/aistudio/2.jpg')
# 执行表格识别
pred_html = table_sys(img)
# 结果存储到excel文件
to_excel(pred_html,'2.xlsx')
print(pred_html)
[2022/04/24 17:18:18] root DEBUG: dt_boxes num : 48, elapse : 1.665916919708252
[2022/04/24 17:18:21] root DEBUG: rec_res num  : 48, elapse : 2.50986385345459
<html><body><table><thead><tr><td>时间</td><td>周一</td><td>周二</td><td>周三</td><td>周四</td><td>周五</td></tr></thead><tbody><tr><td>8: 40--9: 10</td><td>趣味数学</td><td>趣味数学</td><td>趣味数学</td><td>趣味数学</td><td>趣味数学</td></tr><tr><td>9: 20--9: 50</td><td>早期阅读</td><td>早期阅读</td><td>音乐</td><td>早期阅读</td><td>早期阅读</td></tr><tr><td>10: 00--10: 30</td><td>户外活动</td><td>户外活动</td><td>户外活动</td><td>户外活动</td><td>户外活动</td></tr><tr><td>10: 30--11: 00</td><td>儿童书法</td><td>音乐</td><td>早期阅读</td><td>快乐英语</td><td>美术</td></tr><tr><td>11:10-11:40</td><td>儿童书法</td><td>社会体验</td><td>健康生活</td><td>科学探究</td><td>复习</td></tr><tr><td>2: 50--3: 20</td><td>快乐英语</td><td>美术</td><td>综合课程</td><td>综合课程</td><td>综合课程</td></tr><tr><td>3: 20--3: 40</td><td>放学准备</td><td>放学准备</td><td>放学准备</td><td>放学准备</td><td>放学准备</td></tr></table></body></html>
# 读取excel并显示
import pandas as pd
df = pd.read_excel('2.xlsx').fillna('')
print(df)
时间    周一    周二    周三    周四    周五
0    8: 40--9: 10  趣味数学  趣味数学  趣味数学  趣味数学  趣味数学
1    9: 20--9: 50  早期阅读  早期阅读    音乐  早期阅读  早期阅读
2  10: 00--10: 30  户外活动  户外活动  户外活动  户外活动  户外活动
3  10: 30--11: 00  儿童书法    音乐  早期阅读  快乐英语    美术
4     11:10-11:40  儿童书法  社会体验  健康生活  科学探究    复习
5    2: 50--3: 20  快乐英语    美术  综合课程  综合课程  综合课程
6    3: 20--3: 40  放学准备  放学准备  放学准备  放学准备  放学准备


目录
相关文章
|
5天前
|
存储 弹性计算 缓存
阿里云服务器租赁费用:新版租赁收费标准及活动报价参考
本文更新了2026年阿里云全系列云服务器租赁活动报价,所有特惠资源均可前往阿里云活动中心选购,整体覆盖从个人入门到企业级高性能场景的全梯度需求。其中轻量应用服务器主打极致性价比,2核2G峰值200M带宽配置每日10点、15点限时抢购价仅38元/年,2核4G配置379元/年起;高性价比的经济型e实例、通用算力型u2i实例覆盖2核4G至4核32G全档位,适配开发测试与中小型企业业务;搭载英特尔至强6处理器的第九代c9i企业级实例算力较上代提升20%,支撑高并发生产环境,不同实例规格价差清晰,用户可根据自身业务负载与预算灵活选型。
1571 111
|
12天前
|
云安全 人工智能 运维
阿里云联动百位企业安全专家,共识Agent防御最佳实践
当Agent成为新员工,你的安全边界在哪里?
1939 8
阿里云联动百位企业安全专家,共识Agent防御最佳实践
|
6天前
|
人工智能 程序员 API
Codex 接入 DeepSeek-V4-Flash:还能补上识图,提供两套方案
Codex 接入 DeepSeek-V4-Flash 怎么配?本文覆盖 CLI 与桌面端,再用 qwen3-vl-flash 补识图,两套方案可直接照做
|
6天前
|
编解码 人工智能 安全
2核4G/4核8G/8核16G阿里云服务器如何选择实例?经济型e、通用算力型u2i与计算型c9i选哪个?
本文介绍了阿里云2核4G、4核8G、8核16G三档主流配置下经济型e、通用算力型u2i和计算型c9i三种实例的最新活动价格与适用场景。同配置下三者价差显著,以2核4G为例,经济型e低至599.93元/年,计算型c9i则高达1742.08元/年。文章详细解析了各实例的性能定位:经济型e适合轻负载入门场景,u2i兼顾稳定算力与性价比,c9i凭借第9代至强处理器与芯片级安全能力支撑高性能业务。同时提示用户可叠加满减优惠券享受折上折,建议根据业务负载与预算综合决策。
526 112
|
18天前
|
人工智能 前端开发 Linux
Codex 桌面版安装 + CC Switch 接入第三方 API 完整教程(2026 最新)
2026最新教程:手把手教你安装Codex桌面版,通过CC Switch v3.17.0一键接入Fenno等国产API(兼容OpenAI Responses格式),跳过账号登录,完整启用代码审查、多步任务与上下文感知功能。零基础友好,全程图文实操。(239字)
2558 4
|
10天前
|
存储 人工智能 关系型数据库
阿里云AI产品与云产品最新组合套餐:Token Plan、AI coding及云服务器和建站等组合优惠价
阿里云推出全新“算力+模型+应用”一站式云与AI组合套餐活动,覆盖从个人开发者到中大型企业的全场景需求。核心亮点为分三档定价的Token Plan订阅服务,支持Qwen3.8-Max-Preview大模型调用,错峰时段最低可享0.2折优惠。活动同步推出AI Coding、智能体部署、云电脑托管、0代码建站等十余类场景化组合,搭配99元/年的普惠云服务器、88元/年的入门数据库等经典特惠产品,还为企业提供1V1定制化AI转型方案,大幅降低了不同用户群体拥抱AI的技术门槛与采购成本。
720 111
|
20天前
|
人工智能 JSON 安全
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
阿里云AI安全产品联动防御Fastjson攻击
2634 13
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
|
6天前
|
人工智能 JSON Shell
2026AI漫剧本地全开源方案(附各个软件模型链接),8G显卡也能流畅运行
这是一套完全本地化部署的AI漫剧生成技术链路:涵盖LLM剧本分镜生成、FLUX文生图(IP-Adapter人脸锁定)、StoryDiffusion时序连贯控制、LTX-2.3唇形同步视频生成,及ComfyUI全流程调度。零云端费用,仅耗硬件算力,单集2–4小时可产出竖屏短视频,适配抖音/B站分发。
|
7天前
Qoder 一周年 × Qwen3.8-Max 正式上线,多重好礼限时领
8月3日,Qwen3.8-Max 正式上线Qoder,迎来Qoder一周年。新老用户可领800次免费调用,下单再赠2000次;夜间(22:00–08:00)调用5折;邀请好友双方得积分与调用额度。
445 1

热门文章

最新文章