表提取简介

随着当前技术时代大量应用、工具和在线平台的蓬勃发展,所收集的数据量与日新月之分急剧增加。为了高效处理和访问这些巨大的数据,有必要开发有价值的信息提取工具。信息提取字段中需要注意的子区域之一是从表格窗体中提取和访问数据。

表提取 (TE)是检测和分解文档中的表信息的任务。

为了用一种微妙的方式解释这一点,假设您有很多文件,你会使用表,并且使用相同的文件,你想操纵数据。通常,您可以手动复制它们(在纸上)或将它们加载到 Excel 纸张中。但是,通过表提取,您只要将表作为图片发送到计算机,它就提取所有信息并将它们堆叠到整洁的文档中。这节省了充足的时间,而且不那么错误。


谁将发现表提取有用?

如上一节所述,表经常用于以干净格式表示数据。我们可以经常看到它们跨越多个领域,从跨表构建数据来组织我们的工作,到存储公司的巨大资产。有很多组织每天都要处理数百万个表。为了便于手动完成所有事情的艰巨任务,我们需要采用更快的技术。让我们讨论一些表可能是必不可少的用例:

来源: 帕特里克·托马索, 未飞溅


个人使用案例

表提取过程也可用于小型个人用例。有时,我们会在手机上捕获文档,然后将它们复制到我们的计算机上。我们可以直接捕获文档,并保存为自定义模板中的可编辑格式,而不是使用此过程。以下是一些有关我们如何将表提取放入个人日常操作中的用例 -

将文档扫描到电话:我们经常在手机上捕获重要表的图像并保存它们,但通过表提取技术,我们可以捕获表的图像,并直接将它们存储在表格格式中,无论是 Excel 或 google 工作表。这样,我们不需要搜索图像或将表内容复制到任何新文件,相反,我们可以直接使用导入的表并开始处理提取的信息。

到 HTML 的文档: 在网页中,我们发现使用表格显示的大量信息。它们帮助我们与数据进行比较,并给我们一个有组织的快速记录数字。通过使用表提取过程,我们可以扫描 PDF 文档或 JPG/PNG 图像,并直接将信息加载到自定义自设计的表格式中。我们可以进一步编写脚本,以基于现有表添加其他表,从而使信息数字化。这有助于我们编辑内容并加快存储过程。


工业用例

全球有几个行业在文书工作和文件方面大有作为,尤其是在银行和保险行业。从存储客户的详细信息到照顾客户需求,表被广泛使用。此信息再次作为文档(硬拷贝)传递到不同的分支机构进行审批,有时,沟通不畅会导致错误,同时从表中抓取信息。相反,在这里使用自动化,使我们的生活轻松得多。一旦捕获和批准初始数据,我们可以直接将这些文件扫描到表中,并进一步处理数字化数据。更不用说减少时间消耗和故障了,我们可以通知客户处理信息的时间和位置。因此,这确保了数据的可靠性,并简化了我们处理操作的方式。现在,让我们看看其他可能的用例:

质量控制:质量控制是顶级行业提供的核心服务之一。它通常是在内部和利益相关者完成的。作为其中的一部分,从消费者那里收集了大量反馈表单,以提取有关所提供服务的反馈。在工业部门,他们使用表格记下每日清单和笔记,了解生产线的组成情况。所有这些都可以在单个位置轻松记录,使用表提取。

资产跟踪:在制造业中,人们使用硬编码表来跟踪钢铁、钢铁、塑料等制造实体。每个制造物料都标有唯一的编号,其中它们使用表格来跟踪每天制造和交付的物品。自动化有助于在错位或数据不一致方面节省大量时间和资产。


业务用例

有几个商业行业在 Excel 工作表和脱机窗体上运行。但是,在一个时间点,很难通过这些表格和表格进行搜索。如果我们手动输入这些表,则非常耗时,并且输入错误数据的可能性也会很高。因此,表提取是解决业务用例的更好选择,因为下面的情况很少。

发票自动化:有许多小规模和大规模的行业,其发票仍然以表格格式生成。这些没有提供适当担保的税务报表。为了克服这些障碍,我们可以使用表提取将所有发票转换为可编辑格式,从而将它们升级到较新版本。

表单自动化:在线表单通过帮助企业收集他们需要的信息并同时将其连接到其工作流中内置的其他软件平台,从而中断了这种尝试性且真实的方法。除了减少对手动数据输入和后续电子邮件需求外,表提取还可以消除打印、邮寄、存储、组织和销毁传统纸张替代品的成本。


心中有 OCR 问题吗?想要数字化发票、PDF 或车牌?前往纳米网,免费构建OCR模型!

入门

在行动中进行深度学习

深度学习是基于人工神经网络的机器学习方法的更广泛系列的一部分。

神经网络是一个框架,通过模仿人脑运作方式的过程来识别给定数据中的基本关系。它们具有不同的人工层,通过这些图层数据通过这些图层,从而了解要素。有不同的体系结构,如卷积 NN、循环 NN、自动编码器、生成对抗 NN 来处理不同类型的数据。这些非常复杂,但描绘了高性能,以实时解决问题。现在,让我们来研究一下使用神经网络在表提取领域进行的研究,并且,让我们简要地回顾一下它们。


TableNet

说明:TableNet:用于端到端表检测的深度学习模型,以及从扫描的文档图像中提取表格数据

简介:TableNet 是一个现代深度学习架构,由 TCS 研究年的团队在 2019 年提出。主要动机是通过手机或相机从扫描的表格中提取信息。

他们提出了一个解决方案,其中包括准确检测图像中的表格区域,然后检测和提取检测到表的行和列中的信息。

数据集:使用的数据集是马莫特。它有2000页PDF格式,这是收集与相应的地面真相。这还包括中文页面。链接 - http://www.icst.pku.edu.cn/cpdp/sjzy/index.htm

架构:该体系结构基于 Long 等人,这是用于语义分段的编码器解码器模型。相同的编码器/解码器网络用作用于表提取的 FCN 体系结构。使用 Tesseract OCR 对图像进行预处理和修改。

该模型分两个阶段派生,将输入主题为深度学习技术。在第一阶段,他们使用了预先训练的VGG-19网络的重量。它们已用 1x1 卷积层替换了已使用的 VGG 网络的完全连接层。所有卷积层后跟 ReLU 激活和概率 0.8 的辍学层。他们称第二阶段为解码网络,由两个分支组成。这是根据直觉,列区域是表区域的子集。因此,单个编码网络可以使用表和列区域的特征以更好的精度筛选出活动区域。第一个网络的输出将分发到两个分支。在第一个分支中,应用两个卷积操作,并升级最终要素图以满足原始图像尺寸。在用于检测列的另一个分支中,有一个附加的卷积层,具有 ReLU 激活函数,还有一个与前面提到的相同的辍学概率的辍学层。要素贴图在 (1x1) 卷积层后使用小步卷积进行向上采样。下面是体系结构的图像:

TableNet 的体系结构

输出使用模型处理文档后,将生成表和列的掩码。这些蒙版用于从图像中筛选出表及其列区域。现在使用 Tesseract OCR,从分段区域中提取信息。下面是显示从表中生成和稍后提取的蒙版的图像:

他们还提出了与ICDAR进行微调的相同型号,其性能优于原始型号。微调车型的召回、精度和 F1 得分分别是 0.9628、0.9697 和 0.9662。原始模型的记录指标为 0.9621、0.9547、0.9583。现在,让我们深入探讨一个架构。


深德斯特

论文:DeepDeSRT:文档图像中表检测和结构识别的深度学习

简介:DeepDeSRT 是一个神经网络框架,用于检测和理解文档或图像中的表。它有两个解决方案,如标题中提及:

  1. 它提供了一个基于学习的深度解决方案,用于文档图像中的表检测。
  2. 它提出了一种基于深度学习的表结构识别方法,即识别检测到的表中的行、列和单元格位置。

建议的模型完全基于数据,不需要文档或图像的启发式或元数据。培训的一个主要优点是它们不使用大型培训数据集,而是使用转移学习和域适应的概念来检测表检测和表结构识别。

数据集:使用的数据集是 ICDAR 2013 表竞争数据集,包含 67 个文档,总页数为 238 页。

建筑:

  • 表检测建议的模型使用快速 RCNN 作为检测表的基本框架。该体系结构分为两个不同的部分。在第一部分中,他们根据所谓的区域建议网络 (RPN) 的输入图像生成区域建议。第二部分,他们使用快速RCNN对区域进行分类。为了支持此体系结构,他们使用了ZFNet和 VGG-16 的权重。
  • 结构识别成功检测到表并了解其位置后,了解其内容的下一个挑战是识别和定位构成表物理结构的行和列。因此,他们使用完全连接的网络与 VGG-16 的权重,从行和列中提取信息。以下是 DeepDeSRT 的输出:

输出:

表检测的输出

结构识别的输出 [6]

评估结果表明,DeepDeSRT在台表检测和结构识别方面优于最先进的方法,在2015年之前,在表检测和结构识别方面分别达到96.77%和91.44%的F1测量。


图形神经网络

论文:使用图形神经网络重新思考表识别

简介:在这项研究中,来自国家人工智能中心(NCAI)深度学习实验室的作者提出了用于从表中提取信息的图形神经网络。他们认为图形网络是这些问题更自然的选择,并进一步探讨了两个基于梯度的图形神经网络。

本建议的模型结合了两者的好处,卷积神经网络用于视觉特征提取和处理问题结构的图形网络。

数据集:作者提出了一个新的大型综合生成数据集,共生成 0.50 万个表,分为四个类别。

  1. 图像是普通图像,没有合并和裁决线
  2. 图像具有不同的边框类型,包括偶尔没有裁决线
  3. 引入单元格和列合并
  4. 摄像机通过线性透视变换捕获图像

架构:他们使用浅卷积网络生成各自的卷积特征。如果输出要素的空间尺寸与输入图像不同,它们会收集根据输入和输出尺寸之间的比率线性缩小的位置,并将其发送到具有两个图形网络(称为 DGCNN 和 GravNet)的交互网络。图形网络的参数与原始 CNN 相同。最后,他们使用运行时对采样对内部使用蒙特卡罗算法提取的内容进行分类。以下是输出:

输出

图形神经网络生成的输出

以下是网络为四个类别的网络生成的表格精度数字,如"数据集"部分所示


CLAN 和遗传算法

论文:使用条件生成对抗网络和遗传算法从文档中提取表

简介:在这项研究中,作者使用自上而下的方法,而不是使用自下而上的方法(将行集成到单元格、行或列中)方法。

在此方法中,他们使用生成对抗网络将表映像映射到标准化的"骨架"表窗体。此骨架表表示没有表内容的近似行和列边框。其次,它们使用遗传算法优化的距离测量将候选潜在表结构的渲染拟合到骨架结构中。

数据集:作者使用自己的数据集,该数据集包含 4000 个表。

架构:提议的模型由两部分组成。在第一部分中,输入图像使用条件生成对抗神经网络抽象为骨架表。GAN 再次有两个网络,即生成随机样本和鉴别器的生成器,它告诉生成的图像是假的还是原始的。生成器 G 是一个编码器解码器网络,其中输入图像通过一系列逐渐向下采样层,直到进程反转的瓶颈层。为了向解码层传递足够的信息,使用具有跳过连接的 U-Net 体系结构,并通过串联在层 i 和 n 之间添加跳过连接,其中 n 是图层总数,而 i 是编码器中的图层编号。PatchGAN 体系结构用于鉴别器 D。这会以补丁的规模惩罚输出图像结构。它们将输出生成为骨架表。

在第二部分中,他们利用每个候选数据与骨架之间的距离的度量,优化候选潜在数据结构与生成的骨架图像的拟合。这是提取图像中文本的一种方法。下面是描述体系结构的图像:

方法的一般示意图

输出通过比较 - 行和列号、左上角位置、行高度和列宽度来评估估计的表结构

遗传算法在从表中提取信息时,在列上给出了95.5%的准确率和96.7%的准确度。


需要数字化单据、收据或发票,但懒得编码?前往纳米网,免费构建OCR模型!

入门

[代码]传统方法

在本节中,我们将学习如何使用深度学习和 OpenCV 从表中提取信息的过程。你可以把这个解释作为介绍,但是,建立最先进的模型将需要大量的经验和实践。这将有助于您了解我们如何用各种可能的方法和算法培训计算机的基本原理。

为了更准确地理解问题,我们定义了一些基本术语,这些术语将在本文中使用:

  • 文本:包含一个字符串和五个属性(顶部、左侧、宽度、高度、字体)
  • :包含假定在原始文件中同一行上的文本对象
  • 单行:只有一个文本对象的行对象。
  • 多行:具有多个文本对象的行对象。
  • 多线:一组连续的多线对象。
  • : 表中的水平块
  • : 表中的垂直块
  • 单元格:行和列的交集
  • 单元格 - 填充:单元格内部填充或空间。

使用 OpenCV 进行表检测

我们将使用传统的计算机视觉技术从扫描的表格中提取信息。这是我们的管道;我们最初使用普通摄像机捕获数据(我们需要从其中提取信息的表),然后使用计算机视觉,我们将尝试查找边框、边缘和单元格。我们将使用不同的滤镜和轮廓,我们将突出显示表的核心特征。

我们需要一张桌子的图像。我们可以在手机上捕获此图像或使用任何现有图像。下面是代码片段,

<span style="color:#000000"><code class="language-python3">file = r’table.png’
table_image_contour = cv2.imread(file, 0)
table_image = cv2.imread(file)
</code></span>

在这里,我们加载了相同的图像图像两个变量,因为我们将在将检测到的table_image_contour绘制到加载的图像时使用模型。以下是我们在程序中使用的表的图像:

表的图像

我们将采用一种称为反向图像阈值的技术,该技术可增强给定图像中存在的数据。

ret, thresh_value = cv2.threshold(table_image_contour, 180, 255, cv2.THRESH_BINARY_INV)

另一个重要的预处理步骤是图像扩张。扩展是应用于二进制图像(黑白)的简单数学操作,它逐渐放大前景像素区域的边界(通常为白色像素)。

kernel = np.ones((5,5),np.uint8)
dilated_value = cv2.dilate(thresh_value,kernel,iterations = 1)

在 OpenCV 中,我们使用该方法,findContours获取当前图像中的轮廓。此方法采用三个参数,第一个参数是扩张图像(用于生成扩张图像的图像为 table_image_contour - findContours 方法仅支持二进制图像),第二个参数是cv2。RETR_TREE,它告诉我们使用等高线检索模式,第三个是cv2。CHAIN_APPROX_SIMPLE轮廓近似模式。findContours 解压缩了两个值,因此我们将再添加一个名为层次结构的变量。当图像嵌套时,轮廓散发出相互依赖性。为了表示这种关系,使用层次结构。

contours, hierarchy = cv2.findContours(dilated_value, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

等高线标记数据在图像中的确切存在。现在,我们迭代我们在上一步中计算的等高线列表,并使用方法 cv2.iningRect 计算矩形框的坐标,如在原始图像中观察到的。在上次迭代中,我们将这些框放在原始图像上table_image方法 cv2.rectangle() 。

for cnt in contours:x, y, w, h = cv2.boundingRect(cnt)# bounding the imagesif y < 50:table_image = cv2.rectangle(table_image, (x, y), (x + w, y + h), (0, 0, 255), 1)

这是我们的最后一步。在这里,我们使用名为Window的方法来呈现我们的表,其中嵌入了提取的内容和轮廓。下面是代码段:

plt.imshow(table_image)
plt.show()
cv2.namedWindow('detecttable', cv2.WINDOW_NORMAL)

输出

在上面的代码段中将 y 的值更改为 300,这将是您的输出:

提取表后,可以通过 tesseract OCR 引擎运行每个轮廓裁剪,教程可在这里找到。一旦我们拥有每个文本的框,我们就可以根据它们的 x 和 y 坐标对它们进行聚类,以派生它们所属的对应行和列。

除此之外,还可以使用 PDFMiner 将 pdf 文档转换为 HTML 文件,我们可以使用正则表达式分析这些文件,以便最终获取表。下面是如何做到这一点。


PDFMiner 和 Regex 解析

要从较小的文档中提取信息,需要配置深度学习模型或编写计算机视觉算法。相反,我们可以使用 Python 中的正则表达式从PDF 文档中提取文本。此外,请记住,此技术对图像不起作用。我们只能用它来从 HTML 文件或 PDF 文档中提取信息。这是因为,当您使用正则表达式时,您需要将内容与源和提取信息相匹配。使用图像时,您将无法匹配文本,正则表达式将失败。现在,让我们使用简单的 PDF 文档,并从中的表中提取信息。下图如下:

在第一步,我们将 PDF 加载到我们的程序中。完成后,我们将 PDF 转换为 HTML,以便可以直接使用正则表达式,从而从表中提取内容。为此,我们使用的模块是pdfminer。这有助于从 PDF 中读取内容并将其转换为 HTML 文件。

下面是代码段:

from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.converter import HTMLConverter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from cStringIO import StringIO
import redef convert_pdf_to_html(path):rsrcmgr = PDFResourceManager()retstr = StringIO()codec = 'utf-8'laparams = LAParams()device = HTMLConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)fp = file(path, 'rb')interpreter = PDFPageInterpreter(rsrcmgr, device)password = ""maxpages = 0 #is for allcaching = Truepagenos=set()for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages,password=password,caching=caching, check_extractable=True):interpreter.process_page(page)fp.close()device.close()str = retstr.getvalue()retstr.close()return str

代码学分:泽夫罗斯

我们导入了很多模块,包括正则表达式和 PDF 相关库。在方法convert_pdf_to_html中,我们发送需要转换为 HTML 文件的 PDF 文件的路径。该方法的输出将是 HTML 字符串,如下所示:

'<span style="font-family: XZVLBD+GaramondPremrPro-LtDisp; font-size:12px">Changing Echoes\n<br>7632 Pool Station Road\n<br>Angels Camp, CA 95222\n<br>(209) 785-3667\n<br>Intake: (800) 633-7066\n<br>SA </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> TX DT BU </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> RS RL OP PH </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> CO CJ \n<br></span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> SF PI </span><span style="font-family: GDBVNW+Wingdings-Regular; font-size:11px">s</span><span style="font-family: UQGGBU+GaramondPremrPro-LtDisp; font-size:12px"> AH SP\n<br></span></div>'

正则表达式是用于模式匹配的最棘手、最酷的编程技术之一。这些应用程序被广泛用于多个应用程序,例如,用于代码格式、Web 刮擦和验证目的。在开始从 HTML 表中提取内容之前,让我们快速了解有关正则表达式的一些内容。

此库提供各种内置方法来匹配和搜索模式。下面是几个:

import re# Match the pattern in the string
re.match(pattern, string)# Search for a pattern in a string
re.search(pattern, string)# Finds all the pattern in a string
re.findall(pattern, string)# Splits string based on the occurrence of pattern
re.split(pattern, string, [maxsplit=0]# Search for the pattern and replace it with the given string
re.sub(pattern, replace, string)

通常在正则表达式中看到的字符/表达式包括:

  • [A-Z] - 任何大写字母
  • \d - 数字
  • \w - 单词字符(字母、数字和下划线)
  • \s - 空白(空格、选项卡和空格)

现在,为了找出 HTML 中的特定模式,我们使用正则表达式,然后相应地编写模式。我们首先拆分数据,以便地址块根据程序名称(天使营地、APPLE VALLEY 等)被隔离成单独的块:

pattern = '(?<=<span style="font-family: XZVLBD\+GaramondPremrPro-LtDisp; font-size:12px">)(.*?)(?=<br></span></div>)'for programinfo in re.finditer(pattern, biginputstring,  re.DOTALL):do looping stuff…

稍后,我们会找到始终遵循相同模式的程序名称、城市、州和 zip(文本、逗号、两位大写字母、5 个数字(或 5 个数字连字符四个数字) - 这些出现在我们认为为输入的 PDF 文件中。检查以下代码段:

# To identify the program name
programname = re.search('^(?!<br>).*(?=\\n)', programinfo.group(0))
# since some programs have odd characters in the name we need to escape
programname = re.escape(programname)citystatezip  =re.search('(?<=>)([a-zA-Z\s]+, [a-zA-Z\s]{2} \d{5,10})(?=\\n)', programinfo.group(0))
mainphone  =re.search('(?<=<br>)\(\d{3}\) \d{3}-\d{4}x{0,1}\d{0,}(?=\\n)', programinfo.group(0))
altphones = re.findall('(?<=<br>)[a-zA-Z\s]+: \(\d{3}\) \d{3}-\d{4}x{0,1}\d{0,}(?=\\n)(?=\\n)', programinfo.group(0))

这是一个简单的示例,说明我们如何使用正则表达式从 PDF 文件中提取信息。提取所有必需的信息后,我们将这些数据加载到 CSV 文件中。

def createDirectory(instring, outpath, split_program_pattern):i = 1with open(outpath, 'wb') as csvfile:filewriter = csv.writer(csvfile, delimiter=',' , quotechar='"', quoting=csv.QUOTE_MINIMAL)# write the header rowfilewriter.writerow(['programname', 'address', 'addressxtra1', 'addressxtra2', 'city', 'state', 'zip', 'phone', 'altphone', 'codes'])# cycle through the programsfor programinfo in re.finditer(split_program_pattern, instring,  re.DOTALL):print ii=i+1# pull out the piecesprogramname = getresult(re.search('^(?!<br>).*(?=\\n)', programinfo.group(0)))programname = re.escape(programname) # some facilities have odd characters in the name

因此,这是一个简单的示例,说明如何将提取的 HTML 推送到 CSV 文件中。首先,我们创建一个 CSV 文件,查找我们所有的属性,然后一个一个推送到各自的列中。下面是一个截图:

使用正则表达式从表中提取的项目的屏幕截图

有时,上述技术似乎很复杂,如果所有表都是嵌套和复杂的,则对程序员构成挑战。在这里,选择 CV 或深度学习模型可以节省大量时间。让我们看看哪些缺点和挑战阻碍了这些传统方法的使用。


传统方法的挑战

在本节中,我们将深入了解表提取过程可能失败的原因,并进一步了解如何使用深度学习中诞生的现代方法克服这些障碍。不过, 这个过程不是蛋糕步道。原因是表通常不保持不变。它们具有不同的结构来表示数据,表内的数据可以是具有各种格式样式(字体样式、颜色、字体大小和高度)的多语言语言。因此,要构建一个强大的模型,人们应该意识到所有这些挑战。通常,此过程包括三个步骤:表检测、提取和转换。让我们一个个确定所有阶段中的问题:


表检测

在此阶段中,我们确定给定输入中表的确切存在。输入可以是任何格式,如图像、PDF/Word 文档,有时还有视频。我们使用不同的技术和算法来检测表,无论是按行还是按坐标。在某些情况下,我们可能会遇到完全没有边界的表,我们需要选择不同的方法。除了这些,还有一些其他的挑战:

  • 图像转换:图像转换是检测标签的主要步骤。这包括增强表中的数据和边框。我们需要根据表中显示的数据选择正确的预处理算法。例如,当我们处理图像时,我们需要应用阈值和边缘检测器。此转换步骤可帮助我们更精确地查找内容。在某些情况下,轮廓可能会出错,算法无法增强图像。因此,选择正确的图像转换步骤和预处理至关重要。
  • 图像质量:当我们扫描表以进行信息提取时,我们需要确保在更明亮的环境中扫描这些文档,以确保图像质量良好。当照明条件较差时,CV 和 DL 算法可能无法检测给定输入中的表。如果我们使用深度学习,我们需要确保数据集是一致的,并且有一组良好的标准图像。如果我们在旧皱褶的表格上使用这些模型,那么首先我们需要预处理并消除这些图片中的噪声。
  • 各种结构布局和模板:所有表并非唯一。一个单元格可以跨越多个单元格,无论是垂直的还是水平的,跨单元格的组合可以产生大量的结构变异。此外,某些强调文本的功能,表行可能会影响表结构的理解方式。例如,水平行或粗体文本可能会强调表的多个标题。表的结构直观地定义了单元格之间的关系。表中的视觉关系使得计算上查找相关单元格并从中提取信息变得困难。因此,构建在处理不同表结构时健壮的算法非常重要。
  • 单元格填充、边距、边框:这些是任何表的基本要素 - 填充、边距和边框并不总是相同的。有些表在单元格中有很多填充,而有些则没有。使用高质量的图像和预处理步骤将有助于表提取过程平稳运行。

表提取

这是标识表后提取信息的阶段。关于内容的结构以及表中存在的内容,有很多因素。因此,在构建算法之前了解所有挑战非常重要。

  • 密集内容:单元格的内容可以是数字的,也可以是文本的。但是,文本内容通常是密集的,包含模糊的短文本块,使用首字母缩略词和缩写。为了理解表格,文本需要消除歧义,缩写和首字母缩略词需要扩大。
  • 不同的字体和格式:字体通常有不同的样式、颜色和高度。我们需要确保这些是通用的,易于识别。很少有字体系列,尤其是那些属于草书或手写的字体家族,是有点难以提取。因此,使用良好的字体和正确的格式有助于算法更准确地识别信息。
  • 多页 PDF 和分页符:表中的文本行对预定义的阈值敏感。此外,跨多个页面跨越单元格,则很难识别表。在多表页上,很难区分不同的表。稀疏和不规则的表很难处理。因此,图形裁决线和内容布局应一起用作发现表区域的重要来源。

表转换

最后一个阶段包括将表中提取的信息转换为在 Excel 中或使用其他软件将其编译为可编辑文档。让我们了解一些挑战。

  • 设置布局:当从扫描文档中提取不同格式的表时,我们需要有一个适当的表布局来推送内容。有时,算法无法从单元格中提取信息。因此,设计适当的布局也同样重要。
  • 各种价值表示模式:单元格中的值可以使用不同的句法表示模式来表示。将表中的文本考虑为 6 ± 2。该算法可能无法转换该特定信息。因此,数值的提取需要了解可能的表示模式。
  • 可视化的表示形式:表的大多数表示格式(如可以描述表的标记语言)都设计用于可视化。因此,自动处理表具有挑战性。

这些是我们使用传统技术在表提取过程中面临的挑战。现在,让我们看看如何克服这些与深度学习的帮助下。它正广泛地在各部门进行研究。


总结

在这篇文章中,我们详细回顾了从表中提取信息。我们已经看到,现代技术(如深度学习和计算机视觉)如何通过构建强大的算法来输出准确结果,实现平凡任务的自动化。在初始部分中,我们了解了表提取在促进个人、行业和业务部门任务方面的作用,并回顾了从 PDF/HTML 提取表、表单自动化、发票自动化等的用例。我们使用计算机视觉对算法进行编码,使用阈值、扩张和等高线检测技术查找表中信息的位置。我们已经讨论了在使用传统技术时在表检测、提取和转换过程中可能面临的挑战,并陈述了深度学习如何帮助我们克服这些问题。最后,我们回顾了一些神经网络体系结构,并了解了它们根据给定的训练数据实现表提取的方法。


带纳米网的 OCR

Nanonets OCR API允许您轻松构建 OCR 模型。您不必担心预先处理图像,也不必担心匹配模板或构建基于规则的引擎以提高 OCR 模型的准确性。

您可以上传数据、注释数据、将模型设置为训练和等待通过基于浏览器的 UI 获取预测,而无需编写一行代码、担心 GPU 或为深度学习模型找到合适的体系结构。您还可以获取每个预测的 JSON 响应,将其与您自己的系统集成,并构建基于最先进的算法和强大基础架构构建的机器学习支持应用程序。

使用 GUI: https://app.nanonets.com/

您还可以按照以下步骤使用 Nanonets-OCR API:

第 1 步:克隆存储库,安装依赖项

<span style="color:#000000"><code class="language-bash"><span style="color:#dd4a68">git</span> clone https://github.com/NanoNets/nanonets-ocr-sample-python.git
<span style="color:#dd4a68">cd</span> nanonets-ocr-sample-python
<span style="color:#dd4a68">sudo</span> pip <span style="color:#dd4a68">install</span> requests tqdm
</code></span>

第 2 步:获取免费 API 密钥
,从您那里获取http://app.nanonets.com/#/keys

第 3 步:将 API 密钥设置为环境变量

<span style="color:#000000"><code class="language-bash"><span style="color:#dd4a68">export</span> NANONETS_API_KEY<span style="color:#9a6e3a">=</span>YOUR_API_KEY_GOES_HERE
</code></span>

第 4 步:创建新模型

<span style="color:#000000"><code class="language-bash">python ./code/create-model.py
</code></span>

注:这将生成MODEL_ID步骤所需的数据

第 5 步:将模型 ID 添加为环境变量

<span style="color:#000000"><code class="language-bash"><span style="color:#dd4a68">export</span> NANONETS_MODEL_ID<span style="color:#9a6e3a">=</span>YOUR_MODEL_ID
</code></span>

注意:您将从YOUR_MODEL_ID步骤中获取一些提示

步骤 6:上传训练数据
训练数据在(图像文件)和(图像文件的注释)中找到imagesannotations

<span style="color:#000000"><code class="language-bash">python ./code/upload-training.py
</code></span>

第 7 步:
训练模型 上传图像后,开始训练模型

<span style="color:#000000"><code class="language-bash">python ./code/train-model.py
</code></span>

第 8 步:获取模型
状态 模型需要 2 小时才能训练。一旦模型经过培训,您将收到一封电子邮件。同时检查模型的状态

<span style="color:#000000"><code class="language-bash">python ./code/model-state.py
</code></span>

第 9 步:训练
模型后进行预测。您可以使用模型进行预测

<span style="color:#000000"><code class="language-bash">python ./code/prediction.py ./images/151.jpg
</code></span>

纳米网和人类在循环

"中等"屏幕有助于更正和进入流程,将手动审阅者的工作减少近 90%,将组织的成本降低 50%。

功能包括

  1. 跟踪正确的预测
  2. 跟踪哪些错误
  3. 对不准确的更正
  4. 删除错误
  5. 填写缺失的预测
  6. 筛选具有日期范围的图像
  7. 获取针对未主持的图像的已审核图像计数

所有字段都构建成易于使用的 GUI,允许用户利用 OCR 技术,并协助使其在运行时变得更好,而无需键入任何代码或了解技术的工作原理。

使用深度学习进行表检测、信息提取和构建相关推荐

  1. 深度学习在目标视觉检测中的应用进展与展望

    作者:张慧,王坤峰,王飞跃 来源:王飞跃科学网博客 摘要:目标视觉检测是计算机视觉领域的一个重要问题,在视频监控.自主驾驶.人机交互等方面具有重要的研究意义和应用价值.近年来,深度学习在图像分类研究中 ...

  2. 基于深度学习的目标检测论文综述Paper Reading:A Survey of Deep Learning-based Object Detection(中文)

    摘要 介绍了文章的大致思路和结构: 1.介绍,经典的目标检测算法,数据集 2.分析比对,各种目标检测算法,包括一阶段和两阶段的 3.介绍,传统和新的应用,以及一些目标检测的其他分支 4.讨论,用目前这 ...

  3. 深度学习在人脸检测中的应用 | CSDN 博文精选

    作者 | 梁志成.刘鹏.陈方杰 责编 | 唐小引 转载自CSDN(ID:csdnnews) 在目标检测领域,可以划分为人脸检测与通用目标检测,往往人脸这方面会有专门的算法(包括人脸检测.人脸识别.人脸 ...

  4. 综述 | 基于深度学习的目标检测算法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:计算机视觉life 导读:目标检测(Object Det ...

  5. 基于深度学习的目标检测的研究进展2

    普通的深度学习监督算法主要是用来做分类,如图1(1)所示,分类的目标是要识别出图中所示是一只猫.而在ILSVRC(ImageNet Large Scale Visual Recognition Cha ...

  6. 基于深度学习的目标检测算法综述(一)

    基于深度学习的目标检测算法综述(一) 基于深度学习的目标检测算法综述(二) 基于深度学习的目标检测算法综述(三) 本文内容原创,作者:美图云视觉技术部 检测团队,转载请注明出处 目标检测(Object ...

  7. 深度学习用于视频检测_视频如何用于检测您的个性?

    深度学习用于视频检测 视频是新的第一印象! (Videos are the New First Impressions!) Think about the approximate number of ...

  8. 独家总结| 基于深度学习的目标检测详解

    欢迎关注微信公众号[计算机视觉联盟] 获取更多前沿AI.CV资讯                                                基于深度学习的目标检测 基于深度学习的目 ...

  9. 人机交互系统(4.1)——深度学习在人脸检测中的应用

    1 人脸检测 在目标检测领域可以划分为了人脸检测与通用目标检测,往往人脸这方面会有专门的算法(包括人脸检测.人脸识别.人脸其他属性的识别等等),并且和通用目标检测(识别)会有一定的差别,着主要来源于人 ...

  10. 深度学习图像处理目标检测图像分割计算机视觉 02--图像特征与描述

    深度学习图像处理目标检测图像分割计算机视觉 02--图像特征与描述 摘要 一.图像特征与描述 1.1.颜色特征 1.2.几何特征提取 1.3.基于特征点的特征描述子 1.3.1.几何特征:关键点 1. ...

最新文章

  1. 2万人同时访问 nodejs_Nodejs 与 Python 的使用对比
  2. Tomcat配置虚拟主机的两种方式
  3. HTTP 数据包头解析
  4. 【华为云技术分享】鲲鹏开发套件:让应用软件迁移调优So Easy
  5. 中国网吧 20 年往事,端游式微、手游主宰
  6. html选中然后显示到表格,如何将数据从html表单显示到表格中?
  7. Event 事件对象 (target)帆软修改提示框样式
  8. ie为什么那么垃圾(不是ie垃圾,是ie用的人太多了,很多在用低版本)
  9. 采集新浪微博数据建设网络舆情监测系统
  10. Win10 查看开/关机历史记录、 删除管理员账户密码
  11. MySQL安装失败的原因
  12. 键盘fn键常亮(一直亮),解决办法
  13. 2021年江阴各高中高考成绩查询,江阴高考,全市12所高中高考成绩比较
  14. 申请《App电子版权认证证书》或纸质《计算机软件著作权证书》
  15. 52-20210322华为海思Hi3516DV300的linux系统编译(eMMC模式)1
  16. Mysql基础入门篇(二)
  17. 零基础怎样学IT难吗?新手如何快速入门?
  18. 如何重置Photoshop首选项?ps重置首选项的方法
  19. 思杰桌面虚拟化---------- 为什么我们仍然坚持MCS
  20. tomcat注册windows服务-歪解

热门文章

  1. 如何用计算机计算一元三次方程,计算器如何解一元三次方程?
  2. 外卖系统源码,搭建同城点餐配送服务平台
  3. 车载电源的ISO7637处理
  4. iphone配置实用工具iPhone Configuration Utility
  5. 汽车故障诊断技术【7】
  6. 均值cvar模型matlab代码,VAR和cvar模型的matlab代码
  7. python 通达信k线_通达信自定义数据采集,使用python在通达信里面选股
  8. matlab freqz m,freqz(freqz和freqs区别)
  9. btsync同步文件+linux,利用BTSync 实时同步文件
  10. C#实现个人理财软件小项目