Cycle-CenterNet|表格结构识别

Cycle-CenterNet表格结构识别模型是一种基于深度学习技术的图像处理模型,用于图中表格单元格拼接后的物理坐标的输出,具体输出的是单元格的四个角点的坐标,按照顺时针的顺序依次输出各个点的坐标。

Cycle-CenterNet表格结构识别模型

表格结构识别,即给定一张图片,检测出图中单元格的物理坐标(四个顶点)以及逻辑坐标(行号列号)。主要用于给输入图片输出图中表格单元格拼接后的物理坐标,具体地,模型输出的框的坐标为单元格的四个角点的坐标,左上角为第一个点,按照顺时针的顺序依次输出各个点的坐标,分别为(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的相关环境依赖文件。本站所选择的目录为D盘的根目录下openai.wiki文件夹,完整路径为:D:\openai.wiki\Cycle-CenterNet

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
if not exist D:\openai.wiki\Cycle-CenterNet mkdir D:\openai.wiki\Cycle-CenterNet
if not exist D:\openai.wiki\Cycle-CenterNet mkdir D:\openai.wiki\Cycle-CenterNet
if not exist D:\openai.wiki\Cycle-CenterNet mkdir D:\openai.wiki\Cycle-CenterNet

强制切换工作路径为D盘的openai.wiki\Cycle-CenterNet文件夹。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
cd /d D:\openai.wiki\Cycle-CenterNet
cd /d D:\openai.wiki\Cycle-CenterNet
cd /d D:\openai.wiki\Cycle-CenterNet

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

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
conda create -p D:\openai.wiki\Cycle-CenterNet\ENV python=3.7
conda create -p D:\openai.wiki\Cycle-CenterNet\ENV python=3.7
conda create -p D:\openai.wiki\Cycle-CenterNet\ENV python=3.7

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

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
conda init cmd.exe
conda init cmd.exe
conda init cmd.exe

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
conda activate D:\openai.wiki\Cycle-CenterNet\ENV
conda activate D:\openai.wiki\Cycle-CenterNet\ENV
conda activate D:\openai.wiki\Cycle-CenterNet\ENV

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pip install modelscope
pip install modelscope
pip install modelscope

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pip3 install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pip install opencv-python
pip install opencv-python
pip install opencv-python

使用教程

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

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

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# 本代码由openai.wiki所提供,转载请注明出处,谢谢。
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
import cv2
import numpy as np
# 表格图片名称
resultIMGName = 'table_recognition'
# 表格图片格式
resultIMGFormat = '.jpg'
# 表格图片路径
resultIMGPath = 'D:\openai.wiki\Cycle-CenterNet'
# 输出表格图片名称
outputIMGName = 'table_image_final'
# 输出表格图片格式
outputIMGFormat = '.jpg'
# 输出表格图片路径
outputIMGPath = 'D:\openai.wiki\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 )
# 本代码由openai.wiki所提供,转载请注明出处,谢谢。 from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasks import cv2 import numpy as np # 表格图片名称 resultIMGName = 'table_recognition' # 表格图片格式 resultIMGFormat = '.jpg' # 表格图片路径 resultIMGPath = 'D:\openai.wiki\Cycle-CenterNet' # 输出表格图片名称 outputIMGName = 'table_image_final' # 输出表格图片格式 outputIMGFormat = '.jpg' # 输出表格图片路径 outputIMGPath = 'D:\openai.wiki\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 )
# 本代码由openai.wiki所提供,转载请注明出处,谢谢。

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

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

# 输出表格图片名称
outputIMGName = 'table_image_final'
# 输出表格图片格式
outputIMGFormat = '.jpg'
# 输出表格图片路径
outputIMGPath = 'D:\openai.wiki\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预训练参数进行初始化,然后在训练数据集上进行训练。

此文章由OpenAI开源维基百科原创发布,如若转载请注明出处:https://openai.wiki/cycle-centernet.html

(0)
上一篇 2023-04-07 12:53
下一篇 2023-04-08 03:10

相关推荐

  • Segment-Anything|万物分割

    分割任何物体(Segment Anything Model),可输入提示生成高质量的对象掩码,用于图像中所有对象的分割任务。该模型有望取代传统的OpenCV,成为未来图像分割抠图领域的主流模型。

    2023-04-10
    0154.5K
  • cv_unet_image-matting|人像抠图

    cv_unet_image-matting是一个自动识别人像AI抠图的模型,可以无需任何额外输入,直接自动推理含有人像的图像,输出四通道人像抠图结果,基于原图和粗语义分割mask预测精细的抠图结果。

    2023-04-05
    0123.1K
  • cv_hrnetocr_skychange|天空图像替换

    cv_hrnetocr_skychange是一个基于hrnet-ocr框架的天空图像替换模型,可实现换天算法,自动获取天空区域的alpha图,并利用融合算法将原天空进行替换,从而改变原图的天空样式。

    2023-04-08
    001.4K
  • CV_ORC-Text-Spotting|多场景文字ORC识别

    CV_ORC-Text-Spotting是一个多场景文字识别模型,可用于提取图片中的文字并输出对应字符串。该模型可适用于多种场景的文字识别,包括手写、自然、车牌和文档印刷,并提供了相应的文本检测模型。

    2023-04-12
    001.7K
  • mPLUG|图像中文描述

    AI根据图片信息生成对应描述自动图像Tag标签,mplug_image-captioning_coco_base_zh模型是生成多模态的基础,基于skip-connections高效跨模态融合框架。

    2023-07-09
    021.2K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

评论列表(5条)

  • 落夜秦雨
    落夜秦雨 2023-05-31 21:03

    用处不大啊图片识别出来输出的还是图片,要是输出的是表格还是有实际用处不过还是谢谢站长让我们这样的小白也能部署操作。站长有识别后输出是表格的吗。

    • PhiltreX
      PhiltreX 2023-06-01 02:45

      @落夜秦雨其实这个模型的功能主要是用来识别单元格的物理坐标,方便后缀做标记,然后将识别到的文本重绘制指定区域内,在特定场景下还是比较有用的哈。
      最后那张图就是站长自己识别输出的

    • B
      B 2024-01-23 17:17

      @PhiltreX站长您好,请问您可以提示一下模型怎么进行训练吗

    • 22222
      22222 2024-12-06 11:55

      @B知道怎么训练的了吗?

  • Открыть учетную запись в binance

    Thank you for your sharing. I am worried that I lack creative ideas. It is your article that makes me full of hope. Thank you. But, I have a question, can you help me?

微信