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)
# 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>
# 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 放学准备 放学准备 放学准备 放学准备 放学准备