计算机视觉的应用10-图片中的表格结构识别与提取实战

大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用10-图片中的表格结构识别与提取实战,表格结构识别在信息处理领域中具有广泛应用,但由于表格的多样性和复杂性,以及难以准确解析的布局和格式,传统的方法往往存在一定的局限性。本项目基于深度学习技术,通过训练神经网络模型,实现了高效准确的表格结构识别。本文将详细介绍该项目的研究背景、方法、实验结果以及应用前景。

目录
表格结构提取项目介绍
表格结构提取论文介绍
表格结构步骤
代码实现
总结
在这里插入图片描述

表格结构提取项目介绍

图片中表格结构提取是一种计算机视觉技术,旨在识别和提取图像中的表格结构、内容和数据。其主要目的是自动化处理包含表格的图像或文档,并将表格数据转换为结构化的形式,以便进行后续的分析和处理。

表格识别的思路:

1.图像预处理:对输入的图像进行预处理,包括图像去噪、二值化、边缘检测等操作,以便更好地提取表格区域。

2.表格定位:通过使用图像分割和特征提取的方法,自动识别和定位出图像中的表格区域。

3.表格行列识别:识别表格中的行和列,并确定它们的边界位置和大小。

4.单元格分割:将表格中的每个单元格分割出来,以便进一步分析和处理。

5.文本识别:使用光学字符识别(OCR)技术,将每个单元格中的文本内容提取出来,并进行识别和字符编码。

6.数据校正和清理:对提取出的表格数据进行校正和清理,包括去除冗余空格、修正错误格式、合并合适的单元格等。

7.结构化输出:将清洗后的表格数据以结构化的形式输出,例如保存为CSV、Excel或数据库等格式。

表格结构提取论文介绍

关于表格结构提取的论文地址:
https://openaccess.thecvf.com/content/ICCV2021/papers/Long_Parsing_Table_Structures_in_the_Wild_ICCV_2021_paper.pdf

论文主要内容:
本论文主要解决了在真实环境中从图像中解析表格结构(Table Structure Parsing,TSP)的问题。与现有研究主要集中在解析来自扫描PDF文件的布局简单、对齐的表格图像不同,我们旨在为拍摄或扫描时出现弯曲、变形或遮挡的现实场景建立实用的表格结构解析系统。为了设计这样一个系统,我们提出了一种名为Cycle-CenterNet的方法,在CenterNet基础上引入了一个新颖的循环配对模块,以同时检测和分组表格单元并形成结构化表格。在循环配对模块中,我们提出了一种新的配对损失函数用于网络训练。除了Cycle-CenterNet,我们还介绍了一个大规模数据集,名为Wired Table in the Wild(WTW),其中包括多种风格的表格在照片、扫描文件、网页等场景下的结构解析的精确注释。实验证明,我们的Cycle-CenterNet在新的WTW数据集上始终以TEDS度量标准衡量的24.6%绝对改进的准确率取得最佳效果。更全面的实验分析也验证了我们提出的TSP任务方法的优势。
在这里插入图片描述

表格结构步骤

关于Cycle-CenterNet的方法,主要是基于CenterNet,并引入了新颖的循环配对模块。其主要步骤:

1.图像预处理:首先,对输入的图像进行预处理,包括去噪、增强对比度和颜色校正等操作,以提升表格区域的清晰度和可读性。

2.表格检测:利用CenterNet进行表格的检测,即定位图像中可能存在的表格区域。CenterNet是一种基于单点目标检测的网络模型,可以高效地识别表格。

3.循环配对模块:在表格检测的基础上,引入循环配对模块。该模块通过同时检测和分组表格中的单元格,将它们组成结构化的表格。循环配对模块采用新的配对损失函数进行网络训练,以提高准确性。

4.数据集:为了验证方法的有效性,研究人员还创建了一个大规模数据集,命名为Wired Table in the Wild(WTW)。该数据集包含了多种风格的表格图像,并对这些表格的结构进行了准确注释。

5.实验分析:通过在WTW数据集上进行实验,研究人员证明Cycle-CenterNet方法相比其他方法在表格结构解析方面具有显著优势。采用TEDS度量标准评估,Cycle-CenterNet的准确率相对提升了24.6%。
在这里插入图片描述

代码实现

这里代码实现过程,主要通过直接加载table_recognition模型,省略了中间辅助的表格识别操作过程,直接开箱即用。

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

table_recognition = pipeline(Tasks.table_recognition)

def draw_box(det_res, image):
    image = Image.fromarray(image)
    draw = ImageDraw.Draw(image)
    for i in range(det_res.shape[0]):
        p0, p1, p2, p3 = order_point(det_res[i])
        draw.line([*p0, *p1, *p2, *p3, *p0], fill='red', width=5)
    image = np.array(image)
    return image

def order_point(coor):
    arr = np.array(coor).reshape([4, 2])
    sum_ = np.sum(arr, 0)
    centroid = sum_ / arr.shape[0]
    theta = np.arctan2(arr[:, 1] - centroid[1], arr[:, 0] - centroid[0])
    sort_points = arr[np.argsort(theta)]
    sort_points = sort_points.reshape([4, -1])
    if sort_points[0][0] > centroid[0]:
        sort_points = np.concatenate([sort_points[3:], sort_points[:3]])
    sort_points = sort_points.reshape([4, 2]).astype('float32')
    return sort_points


if  __name__ == '__main__':

    image_path = '333.png'
    image = cv2.imread(image_path)
    result = table_recognition(image_path)

    res= draw_box(result['polygons'], image)

    cv2.imwrite('result33.png', res)
    print('finished!')

运行结果:我们打开生成的图片看一下:
在这里插入图片描述
在这里插入图片描述

总结

在这篇论文中,主要通过提出一个新的WTW数据集和一个深度表格结构解析器Cycle-CenterNet,来解决野外环境下的表格结构解析问题。首先,我们的WTW数据集包含约14k张真实场景图像,这些图像是在野外成像条件下拍摄的,将表格结构解析的边界从数字文档图像扩展到了真实场景图像。另一方面,我们提出了一种新的野外场景表格结构识别方法,称为Cycle-CenterNet,解决了现有方法的主要弱点,包括对具有极端物理扭曲的实例的几何预测不准确以及提取不对齐表格的逻辑结构时存在的缺陷。通过全面的实验证明,所提出的方法以原则性的方式解决了上述问题,并在表格结构解析方面取得了最新的研究成果。我们希望我们提出的WTW数据集能进一步改善未来的表格识别研究。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/69929.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PHP最简单自定义自己的框架实现像TP链式sql语句(六)

1、实现效果,链式sql语句封装 order、where、group、limit等封装 2、数据表构造函数入参,ModelBase.php public $table NULL; public function __construct($table){$this->table$table;if(!$this->table){die("no table" );}$this-&…

.NET对象的内存布局

在.NET中,理解对象的内存布局是非常重要的,这将帮助我们更好地理解.NET的运行机制和优化代码,本文将介绍.NET中的对象内存布局。 .NET中的数据类型主要分为两类,值类型和引用类型。值类型包括了基本类型(如int、bool、double、cha…

Gradio:交互式Python数据应用程序的新前沿

一、说明 什么是Gradio以及如何使用Gradio在Python中创建DataApp或Web界面?使用 Gradio 将您的 Python 数据科学项目转换为交互式应用程序。 摄影:Elijah Merrell on Unsplash Gradio是一个Python库,允许我们快速为机器学习模型创建可定制的接…

ChatGPT 的“自定义”功能对免费用户开放,在问题信息不足情况下还会反问来获取必要信息...

“ ChatGPT推出‘自定义’功能并向免费用户开放。即使信息有限,系统也能巧妙地通过反问获取必要细节,进一步提升了用户体验和互动效果。” 01 — 近期 ChatGPT 官方可能也发现绝大多数人用不好 Prompt 提示词,无法发挥彻底发挥大模型的优势&a…

wsl2安装docker引擎(Install Docker Engine on Debian)

安装 1.卸载旧版本 在安装 Docker 引擎之前,您必须首先确保卸载任何冲突的软件包。 发行版维护者在他们的存储库。必须先卸载这些软件包,然后才能安装 Docker 引擎的正式版本。 要卸载的非官方软件包是: docker.iodocker-composedocker-…

网神 SecGate 3600 防火墙任意文件上传漏洞复现(HW0day)

0x01 产品简介 网神SecGate3600下一代极速防火墙(NSG系列)是基于完全自主研发、经受市场检验的成熟稳定网神第三代SecOS操作系统 并且在专业防火墙、VPN、IPS的多年产品经验积累基础上精心研发的高性能下一代防火墙 专门为运营商、政府、军队、教育、大型…

【网络】高级IO

目录 一、五种IO模型 1、阻塞IO 2、非阻塞IO 3、信号驱动 4、IO多路转接 5、异步IO 6、总结 二、高级IO重要概念 1、同步通信与异步通信 2、阻塞 vs 非阻塞 三、非阻塞IO 1、fcntl 2、实现函数SetNoBlock 四、IO多路转接select 1、select 1.1、参数解释 1.2、…

Unity 编辑器资源导入处理函数 OnPostprocessAudio :深入解析与实用案例

Unity 编辑器资源导入处理函数 OnPostprocessAudio 用法 点击封面跳转下载页面 简介 在Unity中,我们可以使用编辑器资源导入处理函数(OnPostprocessAudio)来自定义处理音频资源的导入过程。这个函数是继承自AssetPostprocessor类的&#xff…

前后端分离------后端创建笔记(上)

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论,如有侵权请联系 源码:https://gitee.com/green_vegetables/x-admin-project.git 素材:https://pan.baidu.com/s/…

在Centos环境中搭建Nginx环境

一、Nginx概念简介 Nginx是一个轻量级的高性能HTTP反向代理服务器,同时它也是一个通用类型的代理服务器,支持绝大部分协议,如TCP、UDP、SMTP、HTTPS等。 Nginx与redis相同,都是基于多路复用模型构建出的产物,因此它与R…

Redis心跳检测

在命令传播阶段&#xff0c;从服务器默认会以每秒一次的频率&#xff0c;向主服务器发送命令&#xff1a; REPLCON FACK <rep1 ication_ offset>其中replication_offset是从服务器当前的复制偏移量。 发送REPLCONF ACK命令对于主从服务器有三个作用&#xff1a; 检测主…

Arcgis中直接通过sde更新sqlserver空间数据库失败

问题 背景 不知道有没有人经历过这样一个情况,我们直接在Arcgis中通过sde更新serserver数据库会失败,就是虽然在sde更新sqlserver数据库,但是在Navicat中通过sql语句来查询,发现数据并没有更新,如:上图中,更新数据库后,第一张图是sde打开的sqlserver数据库,它的数据库…

solr迁移到另一个solr中(docker单机)

背景介绍 solr数据迁移&#xff0c;或者版本升级&#xff0c;需要用到迁移&#xff0c;此处记录一下迁移方法以及过程中遇到的问题。我这边使用的是docker环境&#xff0c;非docker部署的应该也是一样的。 solr部署教程 准备工作 ● solrA 版本&#xff1a; 8.11.2 (已有so…

使用 Packet Tracer 查看协议数据单元

练习 2.6.2&#xff1a;使用 Packet Tracer 查看协议数据单元 地址表 本练习不包括地址表。 拓扑图 学习目标 捕获从 PC 命令提示符发出的 ping运行模拟并捕获通信研究捕获的通信从 PC 使用 URL 捕获 Web 请求运行模拟并捕获通信研究捕获的通信 简介&#xff1a; Wiresha…

提升Element UI分页查询用户体验与交互:实现修改未保存提示

我实现的功能是在 element ui 的分页组件中进行分页查询时&#xff0c;如果当前有未保存的修改数据就提示用户&#xff0c;用户可以选择是否放弃未保存的数据。确认放弃就重新查询数据&#xff1b;选择不放弃&#xff0c;不重新查询&#xff0c;并且显示条数选择框保持原样&…

轻装上阵,不调用jar包,用C#写SM4加密算法【卸载IKVM 】

前言 记得之前写了一个文章&#xff0c;是关于java和c#加密不一致导致需要使用ikvm的方式来进行数据加密&#xff0c;主要是ikvm把打包后的jar包打成dll包&#xff0c;然后Nuget引入ikvm&#xff0c;从而实现算法的统一&#xff0c;这几天闲来无事&#xff0c;网上找了一下加密…

时序预测 | MATLAB实现CNN-BiGRU-Attention时间序列预测

时序预测 | MATLAB实现CNN-BiGRU-Attention时间序列预测 目录 时序预测 | MATLAB实现CNN-BiGRU-Attention时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现CNN-BiGRU-Attention时间序列预测&#xff0c;CNN-BiGRU-Attention结合注意力机制时…

uni-app实现图片上传功能

效果 代码 <uni-forms-item name"ViolationImg" label"三违照片 :"><uni-file-picker ref"image" limit"1" title"" fileMediatype"image" :listStyles"listStyles" :value"filePathsL…

UML-类图和对象图

目录 类图概述&#xff1a; 1.类: 2.属性: 3.类的表示&#xff1a; 4.五种方法: 类图的关系&#xff1a; 1.关联 2.聚合 3.组合 4.依赖 5.泛化 6.实现 对象图概述&#xff1a; 1. 对象图包含元素: 2. 什么是对象 3.对象的状态可以改变: 4.对象的行为 5.对象标…

ad+硬件每日学习十个知识点(30)23.8.10 (SDIO端口扩展器TXS02612RTWR,模数转换器ADC121C027)

文章目录 1.cpu->SDIO端口扩展器->SD卡槽->SD卡(当然也可以反向读取)2.SDIO端口扩展器介绍3.SDIO端口扩展器TXS02612RTWR4.SD卡槽5.什么是模数转换器&#xff1f;6.I2C模数转换器ADC121C0277.模数转换方案 1.cpu->SDIO端口扩展器->SD卡槽->SD卡(当然也可以反…