html table nei边框线,GitHub - meichuanneiku/TableCell: 在TableBank的基础上,进一步标注到单元格精度,利用目标检测/分割实现单元格定位。...

项目说明

本项目是我2019年7月份的实习工作的**展示与记录**:

把倾斜的表格旋转水平;

制作5000张表格数据集,需要标注每一个单元格,并实现单元格检测

第一项比较简单,仿射变换、透视变换已经很成熟了,关键是第二项。

考虑到人工标注太费时(1张表格图片大概30个单元格,大概3~5分钟一张,一共需2500小时),所以尝试利用常规的图像处理,提取出表格线,自动标注。

涉及代码:图像旋转(仿射变换)、表格线提取、转coco格式、可视化、随机保存文件、根据图片文件名匹配对应的标签文件等

关键代码说明:

表格旋转

table-rotation.py

只需指定输入图像路径,自动计算旋转角度、仿射变换、旋转调整整个图像(不限于表格图像,文字图像也可以)

过程: 1. HoughLines ——> get the rotation angle 2. warpAffine ——>

affine(rotation)

从表格图片提取每个单元格坐标

extract-table-visual.py

输入一张图片,通过腐蚀膨胀等操作去除表格内容,得到表格线,可视化。本代码的参数设置使可视化效果很好,但实际上左边框可能未闭合(肉眼不可见)

extract-table.py

输入一张图片,可视化表格线。为了使表格闭合、得到交点,故意调整参数,使得横线、竖线都更长。

制作coco格式数据集

table-cell-to-coco.py (刚刚修改了多线程处理的bug-12月11日)

table-cell 单元格识别说明文档

任务一:tabel-bank数据集(标注到表格级,coco格式)

数据集下载

该数据集分两块,word文档版和LaTeX文档版,其中word版比较杂,文件命名不规范,文件名有大量的拉丁文、俄文,中文系统下可能会有编码错误。表格识别任务建议使用LaTeX版的数据集。

使用mmdetection目标识别库进行训练时,只需修改config/xxx.py的数据集目录、图片大小、label_name、label种类数(2,表示表格和背景两类)。

表格检测示例图

检测结果示意图(使用最简单的faster rcnn训练12个epoch,准确率达到99%以上):

62e30aed88d4623da7539c84440714cf.png

任务二:tabel-cell 数据集(标注到单元格级,coco格式)

对应代码:

table-cell-to-coco.py

图片来源:

table

bank数据集word版图片,选取以a-c开头的5116张图片(然后从这5116张图片中随机选择1000张做测试集、其余做训练集)。

标签制作:

``` bash

利用opencv库,提取出表格、单元格,然后转成coco格式

#### 分割单元格步骤

# 1. 读取图像;

# 2. 二值化处理;

# 3. 横向、纵向的膨胀、腐蚀操作,得到横线图img_row和竖线图img_col;

# 4. 得到点图,img_row + img_col=img_dot;

# 5. 得到线图,img_row × img_col=img_line(线图只是拿来看看的,后续没有用到);

# 6. 根据点图得到闭合矩形单元格(左上角、右下角坐标)

# 7. 人工设计规则,优化这些坐标

# 8. 利用得到的坐标、可视化、保存可视化结果,人工从中选出结果好的样例,做数据集

# 9. 转化为coco格式

```

示例图

步骤5示例图:

f3edeb885dcb7617bd14eee9e587a93a.png

步骤8示例图:

0b594eba5b576dce0fe7136c3af11b2d.jpg

任务三:倾斜矫正、单元格识别

倾斜矫正

``` bash

# 输入一张倾斜的图像,自动仿射变换、旋转调整整个图像

# 步骤:

# 1. HoughLines ——> get the rotation angle

# 2. warpAffine ——> affine(rotation)

```

对应代码:

table-rotation.py

示例图:

12bf5b36a020426d75c265c154ad7a73.png

示例图2(拍照,也能精准地调整到水平状态,且不影响表格内容):

0c25686327ca6581752d1941e226d857.png

单元格识别

利用mmdetection目标识别库,训练任务二标注的table-cell数据集。

需要修改config文件,如config/cascade_mask_rcnn_r101_fpn_1x.py的字段:

数据集路径data_root = '/home/weidafeng/dataset/coco/TableBank/Word/'

类别数目num_classes=2,#两处

图像大小img_scale=(596,842)

修改label name:

mmdetection/mmdet/core/evaluation/class_names.py

mmdetection/mmdet/datasets/coco.py

python setup.py install

我使用config/cascade_mask_rcnn_r101_fpn_1x.py进行测试,修改后的config文件、训练12个eopch达到99%以上的准确率,该配置文件及模型以上传到云盘(链接:

https://pan.baidu.com/s/1nfGd7s0AMujJ00pCFAOyrA 提取码:

hupu),下载后可进行测试。

b7d18fe8c8bce5463d26429bf6981de1.png

测试步骤(详见mmdetection使用说明):

使用提供的inference.py文件替换mmdetection/mmdet/apis/inference.py(我主要添加以文本形式保存预测结果的函数,不替换也能看到可视化效果)

重新编译 python setup.py install

运行测试代码:

``` bash

bash test.sh ~/test_images/ ../mmdetection/config/mask_xxxx.py

../mmdetection/workdir/latest.pth

```

测试结果示例图:

8f140a65e27f94bcc85f0fd72b0d5ce1.png

2072aa36234b9401fa098c7576988a8d.png

测试结果示例图(拍照,结果一样很好):

666ffa53885c7be62da3089fc8807649.jpg

65d04fccbf578a6f546c670657ae4c8e.jpg

43028238b302b8f870aae886b0f4c6d8.png

测试示例图(少部分结果出现漏检、误检):

f9e05cc8e53e6608c7cac688e5b4bd5a.png

a9e18c699f4be54860792c2150385fd5.png

Reference:

TableBank:

制作coco格式数据集:

mmdetection

图像旋转数学原理:

仿射变换与透射变换:

仿射变换和透视变换更直观的叫法可以叫做“平面变换”和“空间变换”或者“二维坐标变换”和“三维坐标变换”.

从另一个角度也能说明三维变换和二维变换的意思,仿射变换的方程组有6个未知数,所以要求解就需要找到3组映射点,三个点刚好确定一个平面.

透视变换的方程组有8个未知数,所以要求解就需要找到4组映射点,四个点就刚好确定了一个三维空间.

傅里叶相关知识:

频率:对于图像来说就是指图像颜色值的梯度,即灰度级的变化速度

幅度:可以简单的理解为是频率的权,即该频率所占的比例

DFT之前的原图像在x y方向上表示空间坐标,DFT是经过x

y方向上的傅里叶变换来统计像素在这两个方向上不同频率的分布情况,

所以DFT得到的图像在x y方向上不再表示空间上的长度,而是频率。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前缀命名

如果您是第一次查看Takes或Cactoos的源代码,则很可能会像其他名称一样被命名约定触发,这意味着大多数类名称都有两个字母的前缀: BkSafe , RqFake , RsWithStatus , TkGzip等。 老实说,我还没有…

再访PMML

嗨伙计! 从今年年初开始,就有了重新设计Drools PMML模块的计划。 在这篇文章中,我将描述我们将如何处理它,目前的状态,未来发展的想法等,等等……敬请期待! 背景 PMML是一个标准,旨…

用计算机怎么弹离人愁数字,拇指琴新手入门曲谱——离人愁

喜欢古风的朋友赶快凑过来啦,最近抖音上超火的离人愁拇指琴教学,喜欢离人愁的小姐姐小哥哥赶快学起来啦!以下琴谱适用于Hugh Tracey G调17键。南非琴出厂调音是G调排列,习惯了C调音阶排列的朋友可能对G调排列不是很适应。因为两者…

jvm7 jvm8_JVM PermGen –您在哪里?

jvm7 jvm8这篇文章介绍了JVM内存结构的一些基础知识,并快速窥视了PermGen,以了解自Java SE 8出现以来它已消失的地方。 裸基础 JVM只是系统上运行的另一个进程,魔术始于java命令。 像任何OS进程一样,它需要内存才能运行。 请记住…

C++类与对象(中)第二篇

前言: C语言中使用运算符是对内置类型的数据进行操作,但是在C中有了对象,导致对象无法通过运算符进行运算,故引入了运算符重载即需要重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特…

ETL万岁

提取转换负载是用于从一个数据系统中提取数据并加载到另一个数据系统中的过程。 涉及的数据系统称为源系统和目标系统。 来自源系统的数据形状与目标系统不匹配,因此需要进行一些转换以使其兼容,该过程称为Transformation 。 转换是由map / filter / re…

云计算机内存不足怎么办,网易云音乐提示内存不足,电脑提示内存不足-

在有些时候我们的手机百度云提示内存不足了,这该怎么办呢?那么下面就由学习啦小编来给你们说说手机百度云提示内存不足的解决方法吧,希望可以帮到你们哦!手机百度云提示内存不足的解决方法一:手机用久了,需要安装杀毒软件&#x…

getter/setter_Getters / Setters。 邪恶。 期。

getter/setter从2003年开始,艾伦霍鲁布(Allen Holub)讨论了为什么吸气和塞特方法是邪恶的著名文章,关于吸气/塞特方法是否是反模式,应该避免使用,还是我们在面向对象中不可避免地需要它,这是一个…

Java / Spring:如何快速生成整个Swagger记录的CRUD REST API

作为开发人员,我们在日常生活中经常面临的最繁琐的任务之一就是编写良好且易于理解的文档。 无论我们的文档只有几行来解释功能的核心功能,还是表明系统的来龙去脉的成熟文章都没关系。 重要的是,我们试图通过文档传达的信息是准确且可理解的…

中的实践 中兴_中兴通讯5G智慧治水业务在千岛湖畔下姜村成功实践

近日,中兴通讯智慧治水业务在千岛湖畔下姜村成功实践。这一业务为实现千岛湖下姜村水域的智能化管理、立体化监控提供了可靠保障,也将浙江电信5G网络、中兴通讯5G端到端解决方案在试商用实践中再推进一步。下姜村曾先后获得“全国创先争优先进基层党组织…

一加7充电_一加真无线耳机曝光,65W快速充电器获认证

一加8系列发布后,曾有消息显示,一加旗下还有一款被称为一加Z的手机将于今年7月登陆市场。现在,距离传言中提到的发布时间越来越近,也再次有消息提到了这一时间点。不过,这次爆料中的新品并不是手机产品。来自爆料人士 …

从工作中清除代码–使用JUnit 5,Mockito和AssertJ编写可执行规范

可执行规范是可以用作设计规范的测试。 通过启用公共语言(在DDD世界中,这也称为无处不在的语言 ),它们使技术和业务团队能够进入同一页面。 它们充当代码的未来维护者的文档。 在本文中,我们将看到一种编写自动测试的…

家用计算机注意哪些参数,电脑小白买内存条要注意哪些?主要看哪些参数?这些知识要掌握...

内存条是电脑的核心硬件之一,它的作用主要是为CPU服务的,电脑运行的时候,CPU从硬盘里调用数据通过总线寻址放在内存里,内存相当于缓冲处理区,处理好信息后再回馈给CPU,然后电脑再根据指令运行。内存没有记忆…

日照职业技术学院计算机怎么样,日照职业技术学院宿舍条件怎么样 住宿环境好不好...

又到了一年一度的新生入学季,今年考上日照职业技术学院的学子们对你们的新学校有没有期待?下文中有途网小编给大家整理了日照职业技术学院的宿舍环境,供参考!日照职业技术学院宿舍环境如何大学宿舍是各位同学们在大学期间会陪伴我…

cam350怎么看顶层_蛋糕胚速学教程大全,适合初学者看哦!

蛋糕胚速学教程大全,适合初学者看哦!烘焙蛋糕最难的还是装饰,对手残星人来说,好不容易切好了蛋糕胚,抹面费了老大劲还是凹凸不平,做出来像狗狗啃过似的~快来看这份蛋糕抹面技巧,教你…

计算机一级上机考试试题题库,2016年计算机一级上机考试题库

2016年计算机一级上机考试题库第1题、 ****** 本套题共有5小题 ******(1)新建文档WDA01.DOC,插入文档WTA01.DOC的内容,将文中所有“星星”替换为“行星”,存储为文档WDA01.DOC。(2)新建文档WDA02.DOC,插入文档WDA01.DOC的内容&…

stc单片机485发送多出一字节_单片机干货!STC8H案例制作分享(内含高清实物动图)...

本期,Lucy制作了九个案例分享给大家,分别为:流水灯、按键LED、数码管、点阵、定时蜂鸣器、NTC温度计、超声波测距仪、光敏RGB灯、氛围灯(红外)Lucy无偿提供全部案例的原理图和部分案例的代码。有需要的朋友先关注并私信我。需要源码私信我&am…

怎么调用获取被创建的预制体_Go 语言 Web 编程系列—— 获取用户请求数据(上)...

0、GET/POST 请求数据在 PHP 中,可以直接通过全局变量 $_GET 和 $_POST 快速获取 GET/POST 请求数据,GET 请求数据主要是 URL 查询字符串中包含的参数,以前面在线论坛项目的群组详情页为例:http://localhost:8080/thread/read?id…

删除表报正在使用_U盘拔出要不要点quot;安全删除USB硬件quot;退出?

小U盘,大用处。U盘不仅可以用来存储各种各样的文件,甚至还可以用来制作电脑启动盘、Win to Go系统盘等。直接拔还是点“安全删除”后再拔U盘呢?在用完U盘后,有的会点击电脑右下角“安全删除”才拔,有的则会不管那么多直…

职业规划测试软件,生涯规划常用测试工具

原标题:生涯规划常用测试工具认识自己测试生涯规划关于生涯规划的几个测试上周我们说到中学生很有必要进行生涯规划,在进行生涯规划前,我们需要对自己有一个更清晰、更全面的认识,随着心理学的发展,很多认识自我的测试…