整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

从图像中检测和识别表格,北航&微软提出新型数据集TableBank

研究中,来自北航和微软亚研的研究者联合创建了一个基于图像的表格检测和识别新型数据集 TableBank,该数据集是通过对网上的 Word 和 Latex 文档进行弱监督而建立的。该数据集包含 417K 个高质量标注表格,通过此数据集作者利用深度神经网络 SOTA 模型建立了数个强大的基线,从而助力更多研究将深度学习方法应用到表格检测与识别任务中。目前 TableBank 已开源。

TableBank 开源地址:https://github.com/doc-analysis/TableBank

表格通常以结构化的方式展示基本信息,因而表格检测和识别是诸多文件分析应用中的一项重要任务。如图 1 所示,由于表格的布局和格式不同,其检测和识别是个难题。常规表格分析技术通常以文件的布局分析为基础。但这些技术中的大多数都无法泛化,究其原因,它们依赖于手工构建的特征,而后者对布局变化不具备稳健性。最近,计算机视觉领域深度学习的快速发展极大地推动了数据驱动且基于图像的表格分析方法。基于图像的表格分析的优势体现在其对文件类型的稳健性,并对文件是页面扫描图像还是原始数字文件格式不做任何假设。因此,大型端到端深度学习模型能够取得更好的效果。

图 1:不同布局和格式的表格电子文件。

现有的基于深度学习的表格分析模型通常对使用数千个人工标注训练实例获得的预训练目标检测模型进行微调,但它依然难以在现实世界应用程序中扩展。例如,我们发现,在类似图 1a、1b 和 1c 中的数据上训练出的模型在图 1d 中表现不佳,其原因在于表格布局和颜色大不相同。因此,扩大训练数据是使用深度学习构建开放域表格分析模型的唯一途径。深度学习模型比传统模型复杂得多,现在的很多标准深度学习模型拥有数亿自由参数,且需要更多标注训练数据。在实践中,人工标注大型训练数据成本高昂且缺乏灵活性,这是实际部署深度学习模型的关键瓶颈。众所周知,ImageNet 和 COCO 是两个流行的图像分类和目标检测数据集,两者均以众包的方式构建,但花费高昂且耗日持久,需要数月甚至数年时间来构建大型基准数据集。幸运的是,网络上存在大量数字文件,如 Word 和 Latex 源文件。对这些在线文件进行一些表格标注方面的弱监督则是有益的。

为解决对标准开放域表格基准数据集的需求,该研究提出一种新颖的弱监督方法,可自动创建 TableBank 数据集,TableBank 要比现有的表格分析人工标注数据集大几个量级。与传统弱监督训练集不同,该研究提出的弱监督方法可以同时获得大规模和高质量的训练数据。现在,网络上有大量电子文档,如 Word(.docx)和 Latex(.tex)文件。这些在线文档的源代码中包含表格的 mark-up tag。直观地讲,借助每个文档中的标记语言,研究者可以通过添加边框来操控这些源代码。就 Word 文档而言,内部 Office XML 代码可以在标注每一表格边界的地方进行修改。就 Latex 文档而言,tex 代码同样可以在标注表格边界的地方进行修改。这种方式可以为多个不同域创建高质量的标注数据,如商业文件、官方名录和科研论文等,这些数据对大规模表格分析任务大有裨益。

TableBank 数据集共包含 417,234 个高质量标注表格以及各域中对应的的原始文档。为验证 TableBank 的效果,研究者使用当前最优的端到端深度神经网络模型构建了多个强大的基线。表格检测模型基于不同设置下的 Faster R-CNN 架构(Ren 等人,2015 年),表结构识别模型基于图像-文本(image-to-text)的编码器-解码器框架。实验结果表明,布局和格式变化对表格分析任务的准确率影响很大。此外,在某一特定域训练的模型在另一域中表现不佳。这表明,在 TableBank 数据集上建模和学习还有很大的进步空间。

数据收集

大致上,研究者构建 TableBank 数据集时使用了两种不同的文件类型:Word 文档和 Latex 文档。这两种文件类型的源代码中都包含 mark-up tag。这部分分三步详细介绍了数据收集过程:文档获取、创建表格检测数据集、创建表结构识别数据集。

文档获取

研究者从网上抓取 Word 文档。这些文档都是 .docx 格式,因此研究者可以通过编辑内部 Office XML 代码来添加边框。研究者并未过滤文档语言,因此这些文档包含英语、中文、日语、阿拉伯语和其他语言。这使得该数据集在实际应用中更多样化、更稳健。

Latex 文档与 Word 文档不同,因为前者需要其他资源来编译成 PDF 文档。因此,研究者不能从网上抓取 tex 文档,而是利用最大预印本数据库 arXiv.org 中的文档以及相应的源代码。借助 arXiv bulk data access,研究者下载了 2014 年至 2018 年论文的 Latex 源代码。

表格检测

直观地讲,借助每个文档中的标记语言,研究者可以通过添加边框来操控源代码。处理流程如图 2 所示。就 Word 文档而言,研究者通过编辑每个文档中的内部 Office XML 代码来添加表格边框。每个 .docx 格式文件有一个压缩包,解压后的文件夹中有一个 document.xml 文件。在 XML 文件中,该代码片段介于标记 <w:tbl> 和 </w:tbl> 之间,通常表示 Word 文件中的表格,如图 3 所示。研究者修改 XML 文件中的代码片段,使表格边框可更改为与文档其他部分不同的颜色。如图 3 所示,研究者在 PDF 文档中添加了一个绿色边框,该表格得到完美识别。最后,研究者从 Word 文档中获得了 PDF 页面。

图 2:数据处理流程。

图 3:通过 Office XML 代码中的 <w:tbl> 和 </w:tbl> 标记来识别和标注表格。

表结构识别

表结构识别旨在确定表格的行列布局结构,尤其适用于扫描图像等非数字化文档格式的表格。现有表结构识别模型通常用于识别布局信息和单元格的文本内容,而文本内容识别并非这一工作的重心。所以,研究者将任务定义为:给定一个图像格式的表格,生成表示表格行列布局和单元格类型的 HTML 标签序列。通过这种方式,研究者可以从 Word 和 Latex 文档的源代码中自动构建表表结构识别数据集。就 Word 文档而言,研究者只需将原始 XML 信息从文档格式转换成 HTML 标签序列即可。而对于 Latex 文档,研究者首先使用 LaTeXML toolkit 从 Latex 中生成 XML,然后将其转换为 HTML 格式。如图 4 中的简单示例,研究者使用 <cell_y> 表示含有文本的单元格,<cell_n> 表示没有文本的单元格。在过滤噪声后,研究者基于 Word 和 Latex 文档创建了 145,463 个训练实例。

图 4:表格转 HTML 示例,其中 <cell_y> 表示含有文本的单元格,<cell_n> 表示没有文本的单元格。

基线

表格检测

该研究使用 Faster R-CNN 作为表格检测基线模型,其架构如下图所示:

图 5:用于表格检测的 Faster R-CNN 模型。

表结构识别

该研究使用图像-文本模型作为表结构识别的基线模型,其整体架构如下图所示:


图 6:用于表结构识别的图像-文本模型。

实验


表 1:TableBank 数据集的统计数据。


表 2:使用 ResNeXt-{101,152} 作为骨干网络对 Word 和 Latex 数据集的评估结果。


表 3:图像-文本模型在 Word 和 Latex 数据集上的评估结果(BLEU)。


表 4:生成 HTML 标注序列和真值序列之间的精确匹配(exact match)数量。



图 7:使用 a)partial-detection、b)un-detection 和 c)mis-detection 进行表格检测的示例。

论文:TableBank: Table Benchmark for Image-based Table Detection and Recognition



论文链接:https://arxiv.org/pdf/1903.01949.pdf

ode-RED 简介

Node-RED 基于web浏览器的可视化拖拽Scada软件

Node-RED Windows系统下安装教程

Node-RED教程 – Windows系统下开机自启

Node-RED教程 – 怎样安装节点插件

Node-RED教程-程序代码的导入导出

Node-RED页面(dashboard)教程

Node-RED 实例

01 – excel表格生成及下载

02 – Modbus读取数据存入csv文件

03 – 三菱MC协议读写

04 – Modbus读写及建立从站示例

05 – ModbusTCP 多个从站读取数据写入MySQL数据库

06 – Modbus从站的建立

07 – 通过网址url链接读写modbus从站

08 – ui界面生成表格

09 – 动态生成图表

10 – 自定义表格

11 – 带有命令的UI表格

12 – HMI示例01

13 – 登录界面及登录自动退出UI

14 – Modbus读取数据写入mysql并可查询显示曲线图

15 – 获取国际空间站的位置并页面地图显示

16 – 页面显示CPU负载率

17 – 文本转语音示例

18 – SCADA画面装配线

19- Test HMI上下料

20 – 带监控画面语音提示的水位控制系统

21 – modbus读取数据写入execl文件中每天一个文件

22 – modbus读取数据写入mysql并可根据日期查询并显示曲线图

23 – Node-RED与欧姆龙 CP1H通讯

24 – Node-RED与汇川H5U通讯

25 – Node-RED与台达PLC AS228T通讯

26 – Node-RED与纬创PLC VC1-0806MAT通讯

27 – Node-RED与西门子S7-1200通讯

28 – Node-RED与信捷XLH-24A16L通讯

37 – Node-RED与欧姆龙PLC进行以太网连接读取地址或多个读取

38 – Node-RED教程-发送电子邮件

39 – Node-RED教程 与MySQL交互示例

40 – Node-RED教程-modbus轮询通讯

常用

catch抓取

01-抓取错误

complete完成的处理

01 – 节点执行完成后的处理

debug调试

01 – 输出payload值

02 – 输出完整消息

03 – 输出到控制台

04 – 输出到节点状态

05 – 使用 JSONata 格式化输出

inject触发

01 – 启动时触发流程

02 – 定时触发流程

03 – 在指定时间触发流程

link链接

01 – 选项卡内的链接

02 – 跨选项卡链接

03 – Link call 调用

status状态

01 – 处理状态消息输出

function功能函数

change更改

01 – 设定payload值

02 – 设置任意属性值

03 – 使用 JSONata 设置值

04 – 使用环境变量赋值

05 – 设置流程上下文

06 – 删除消息属性

07 – 移动消息属性

delay延时

01 – 延迟

02 – 通过消息属性延迟消息

03 – 重置或刷新待处理消息

04 – 减慢消息通过流程的速度

05 – 减慢每个topic的消息传输速率

06 – 带释放的简单队列

exec执行

01 – 从外部命令获取标准输出

02 – 从外部命令获取错误输出

03 – 以spawn模式运行外部命令

function函数

01 – 发送消息到输出端口

02 – 发送多条消息

03 – 异步发送消息

04 – 记录事件

05 – 处理错误

06 – 在上下文中存储数据

07 – 显示状态信息

08 – 使用外部模块

09 – 设置和关闭

10 – 异步设置

range范围

01 – 缩放输入值

02 – 缩放输入值并四舍五入为整数

03 – 限制输入值

04 – 缩放并循环输入值

switch开关节点

01 – 选择输出端口

02 – 检查所有规则

03 – 在第一个匹配后停止

04 – 根据类型选择输出端口

05 – 使用JSONata进行开关规则设定

06 – 使用JSONata设置开关值

07 – 重新创建消息序列

08 – 基于属性路由消息

09 – 基于上下文值路由消息

template格式化

01 – 使用Mustache语法

02 – 将结果解析为JSON

03 – 将结果解析为YAML格式

trigger触发

01 – 间隔输出两个值

02 – 如果在定义的时间内未收到消息则触发一个流程

03 – 在流程停止发送时发送占位符消息

04 – 使用触发节点进行超时处理

network网络

http

01 – 创建HTTP端点

02 – 处理查询参数

03 – 处理URL参数

04 – 访问HTTP请求头部信息

05 – 向流程发送数据

06 – 将文件发布到流程中

07 – 处理Cookie

tcp

01 – 连接到TCP输出服务器

02 – 连接到TCP输入服务器

03 – 向TCP连接的客户端发送回复

udp

01 – 使用UDP协议传输数据

websocket

01 – 连接到WebSocket输入服务器

02 – 连接到WebSocket输出服务器

parser解析

csv

01 – 使用默认列名将CSV解析为消息序列

02 – 使用默认列名将CSV解析为数组

03 – 使用指定的列名将CSV解析为消息序列

04 – 将第一行中的列名解析为消息序列的CSV

05 – 将JavaScript对象转换为CSV格式

06 – 将JavaScript对象转换为CSV格式

07 – 将JavaScript对象数组转换为带有列名标题的CSV格式

08 – 在输入消息中指定列名

09 – 当设置重置属性时发送列名

10 – 使用连接节点连接解析的CSV消息序列

html

01 – 使用CSS选择器提取HTML元素数组

02 – 通过CSS选择器提取HTML元素序列

03 – 使用消息中指定的CSS选择器提取HTML元素数组

04 – 使用连接节点连接提取的HTML元素序列

json

01 – 将JSON字符串转换为JavaScript对象

02 – 将JavaScript对象转换为JSON字符串

03 – 验证输入的JSON字符串

xml

01 – 将JavaScript对象转换为XML

02 – 将XML转换为JavaScript对象

03 – 使用options属性控制转换

yaml

01 – 将JavaScript对象转换为YAML

02 – 将YAML转换为JavaScript对象

sequence序列

batch批量

01 – 基于数字的分组模式

02 – 基于时间的分组模式

03 – 连接模式

join合并

01 – 自动合并模式

02 – 手动合并模式

03 – 序列递减模式

sort排序

01 – 对数组的 payload进行排序

02 – 对消息序列进行排序

split拆分

01 – 拆分payload消息

storage存储

read file读取文件

01 – 从文本中读取字符串

02 – 使用指定格式读取数据

03 – 按行分割读取数据

04 – 创建消息流程

watch监视

01 – 监视文件的变化

02 – 监视目录中的变化

write file写入文件

01 – 将字符串写入文本文件

02 – 将字符串写入由属性指定的文件

03 – 删除文件

04 – 按指定格式写入数据

教程地址: han-link.cn/3707.html

#工业#

一下html中文件标签和文本标签的使用

目的是学会使用,所以借助工具可以省好多时间

1.文件标签:构成html最基本的标签

html:html文档的根标签

head:头标签。用于引入html文档的一些属性。引入外部的一些资源

title:标题标签

body:体标签

<!DOCTYPE html>:html5中定义该文档是html

2.文本标签:和文本有关的标签

注释:<!-- 注释内容 –->

<h1> 到<h6>:标题标签自带换行的效果

<p>:表示段落的标签

<br>:换行标签<br/>和<br>的写法都不会报错

<hr>:显示一条水平线(也是一个自闭和标签)水平线有一些属性我们可以控制它的样式。hr里面表示高度是size而不是height.对齐方式默认是居中的。

<b>:字体加粗

<i>:斜体

<font>:字体标签(通过属性来修改字体的字号,大小,颜色,以及字体的样式)

<center>:文本居然标签

这里讲下网页下面的版权标签是如何写出来的。

3.图片标签:用来展示图片的(图片也是一个自闭合标签)

属性:src:用来指定图片的位置

什么都不写默认就是./的形式

../表示上一级目录

4.列表标签:

有序列表:ol,li(li表示的是列表的每一项)

无序列表:ul,li

5.链接标签:

a:定义一个超链接

属性:

href:指定访问资源的URL(统一资源定位符,就是路径的表示形式)

target:(是目标的意思)指定打开资源的方式

_self:在当前页面打开

_blank:在空白页面打开

6.表格标签:在HTML中的表格只有行的概念,没有列的概念,将表格以行的形式进行分割,然后再对行进行操作。

table:定义表格

width:表格的宽度

border:边框

cellpadding:单元格内容左对齐(定义内容和单元格的距离)

cellspacing:边框合并(定义单元格之间的距离,如果指定为0,单元格的线会合为一条)

bgcolor:背景色

align:表格的对齐样式

tr:定义行

bgcolor:背景色

align:表格的对齐样式(是用来修改文本的对齐方式的)


td:定义单元格

colspan:合并列

rowspan:合并行

th:定义表头单元格

<caption>:表格标题

<thread>:表示表格的头部分

<tbody>:表示表格的体部分

<tfoot>:表示表格的脚部分

7.块标签:div和span是结合css使用的

span:文本信息在一行显示,行内标签,内联标签(意思就是它不会换行)

div:是会换行的。每一个div占满一整行。块级别的标签

8.语义化标签:html5中为了提高程序的可读性,提高了一些标签

<header>

<footer>