一、介绍:

表格结构识别,即给定一张图片,检测出图中单元格的物理坐标(四个顶点)以及逻辑坐标(行号列号)。主要用于给输入图片输出图中表格单元格拼接后的物理坐标,具体地,模型输出的框的坐标为单元格的四个角点的坐标,左上角为第一个点,按照顺时针的顺序依次输出各个点的坐标,分别为(x1,y1)(x2,y2)(x3,y3)(x4,y4)。用户可以自行尝试各种输入图片。

模型描述

本模型是以自底向上的方式:

1、基于单元格中心点回归出到4个顶点的距离,解码出单元格bbox;同时基于单元格顶点,回归出到共用该顶点的单元格的中心点距离,解码出gbox。

2、基于gbox(group box),将离散的bbox拼接起来得到精准完整的电子表格;

3、第二步的拼接将单元格从“离散”变为“连续”,因此用后处理算法获得单元格的行列信息。目前上线模型实现前两步的功能,第三步暂时未提供。Cycle-CenterNet模型介绍,详见:Parsing Table Structures in the Wild 。

二、下载模型

三、配置环境

如果您是初学者,对于命令行不太理解,那么请按下键盘上的Win键+R键后,在弹出的新窗口内输入CMD并按下回车,打开CMD窗口,按顺序执行如下的每一条命令。

首先我们需要确认一个工作目录,用来存放Cycle-CenterNet的相关环境依赖文件。本站所选择的目录为E盘的根目录下dataddd文件夹,完整路径为:D:\dataddd\Cycle-CenterNet

检测E盘是否在dataddd目录下有没有cv_effnetv2_video-human-matting文件夹,没有则创建该文件夹。

if not exist E:\dataddd\Cycle-CenterNet mkdir E:\dataddd\Cycle-CenterNet

强制切换工作路径为E盘的dataddd\Cycle-CenterNet文件夹。

cd /e E:\dataddd\Cycle-CenterNet

为不影响电脑中的现有环境,请一定要安装Conda,如果您不知道什么是Conda,或者未安装过Conda,请参考如下文章,安装部署Conda之后再继续以下步骤。

http://dataddd.com/anaconda%ef%bd%9cminiconda/

在CMD中执行下面的命令行,创建Conda虚拟环境至该项目的目录中,方便日后重装系统也能够正常使用,无需重新部署环境。

conda create -p E:\dataddd\Cycle-CenterNet\ENV python=3.7

执行完成上面的命令之后,将会在CMD窗口中看到Proceed ([y]/n)?提示,我们直接按下回车即可。

初始化Conda环境,避免后续可能报错。

conda init cmd.exe

激活已创建的Conda环境,这样我们可以将我们后续所需要的所有环境依赖都安装至此环境下。

conda activate E:\dataddd\Cycle-CenterNet\ENV

执行如下命令,安装阿里达摩院相关依赖。

pip install modelscope

执行如下命令,安装torch依赖。

pip3 install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple

执行如下命令,安装CV2依赖库。

pip install opencv-python

四、使用教程

推荐下载pycharm代码编辑器,然后在代码编辑器器内新建一个Python文件,粘贴如下代码,在代码编辑器的右下角选择Python环境为E:\dataddd\Cycle-CenterNet\ENV

该模型官方并未给出示例,本站已经帮您写好了相关的代码,复制粘贴即可使用。

注意:请自行修改表格像名称和路径为您自己的表格图片名称,然后再执行,否则会报错。



from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
import cv2
import numpy as np

# 表格图片名称
resultIMGName = 'table_recognition'
# 表格图片格式
resultIMGFormat = '.jpg'
# 表格图片路径
resultIMGPath = 'E:\dataddd\Cycle-CenterNet'

# 输出表格图片名称
outputIMGName = 'table_image_final'
# 输出表格图片格式
outputIMGFormat = '.jpg'
# 输出表格图片路径
outputIMGPath = 'E:\dataddd\Cycle-CenterNet'


input_IMG = ('%s/%s%s'%(resultIMGPath,resultIMGName,resultIMGFormat)).replace('\\','/')
output_IMG = ('%s/%s%s'%(outputIMGPath,outputIMGName,outputIMGFormat)).replace('\\','/')

# 定义表格识别 pipeline
table_recognition = pipeline(Tasks.table_recognition, model='damo/cv_dla34_table-structure-recognition_cycle-centernet')

# 读取图片并进行表格识别
result = table_recognition(input_IMG)
# -1 表示保留图片的 alpha 通道信息如果不需要可以改成 0  1。
img = cv2.imread(input_IMG, -1)

# 在图片上绘制表格边框
polygons = result['polygons']
for i in range(len(polygons)):
    x1, y1 = polygons[i][0:2]
    x2, y2 = polygons[i][2:4]
    x3, y3 = polygons[i][4:6]
    x4, y4 = polygons[i][6:8]
    pts = np.array([[x1, y1], [x2, y2], [x3, y3], [x4, y4]], np.int32)
    pts = pts.reshape((-1,1,2))
    cv2.polylines(img,[pts],True,(0,0,255),2)

# 输出绘制后的图片
cv2.imwrite(output_IMG, img)

# 提示输出完成
print( '表格识别结果保存到<%s>'% output_IMG )

五、效果展示

六、总结

模型介绍

预处理和后处理

测试时的主要预处理和后处理如下:

  • Resize Pad(预处理): 输入图片长边resize到1024,短边等比例缩放,并且补pad到长短边相等。同时有减均值除方差等归一化操作。
  • 表格拼接(后处理):基于模型推理的gbox,将离散bbox拼接起来得到完整表格。

模型局限性以及可能的偏差

  • 模型主要用于有线表格,无线表格不支持

训练数据介绍

本模型训练数据为WTW,训练集为10970张。

模型训练流程

本模型利用imagenet预训练参数进行初始化,然后在训练数据集上进行训练。