【精华】表格识别技术-MI

news2024/10/7 16:22:45

表格识别是指将图片中的表格结构和文字信息识别成计算机可以理解的数据格式,在办公、商务、教育等场景中有着广泛的实用价值,也一直是文档分析研究中的热点问题。围绕这个问题,我们研发了一套表格识别算法,该算法高效准确地提取图片中的表格,转化为可编辑的 Excel 文件。目前算法已经成功落地于小米 10S 系列、MIX Fold 2 等旗舰机型,大家可以从相册-更多-表格识别,或者扫一扫进入体验。

img

▲ 图一雷军在 MIX Fold 2 发布会上介绍小米表格识别算法

一、背景

大多数人日常办公处理的文件,主要是表格和文档,其中表格的重要性毋庸置疑。在各行各业的桌面办公场景中,Excel 和 WPS 是电子表格的事实标准。我们经常遇到这种需求:将一个表格图片的内容导入 Excel。

以前我们只能对着图片一点点把内容录入 Excel,既低效又容易出错。近年来,随着技术的发展,OCR(光学字符识别)的可用性不断提升,用户可以借助 OCR 软件,从图片中自动提取文本信息。

然而对于表格场景,仅提取文字是不够的,用户还需反复手动复制粘贴以还原出电子表格,这仍会耗费大量时间。为此我们实现了一套表格图像提取方案,它能切实提升用户办公效率。图二是我们的识别效果展示:

图二表格识别效果展示
### 二、总体框架

图三展示的是我们目前算法的一个总体框架图,主要包含手机端的表格检测算法和服务端的表格识别算法。

img

▲ 图三表格识别技术框架

表格检测算法主要是从图片中准确的提取表格区域,并对表格进行矫正,得到平整的表格图片以便下一步的表格识别;表格识别算法主要是从图片中提取表格结构和表格文字内容,然后将这些信息有效的结合在一起,输出可编辑的 Excel 表格。下文将详细介绍表格检测算法和表格识别算法。

三、表格检测算法

表格检测有以下难点:一方面是手机上的算法和内存有限,另一方面是对表格检测结果要求非常高,表格周围往往包含其他文字,如果检测结果不准,会对后面的识别结果造成负面影响。我们的表格检测算法会同时检测到表格区域和表格的四个角点,通过透视变换和我们自研的抗扭曲算法得到只有表格区域的平整表格,效果如图四所示。

img

▲ 图四表格检测算法效果

表格检测算法框架如图五所示,由于算法运行在手机端,需要保证运行速度和模型大小,我们采用了一个非常轻便的一阶段检测框架,backbone 采用 shuffleNetV2;在检测出表格框的同时,回归出关键点信息,便于表格的透视矫正,并用 Wing loss 代替 L1 loss 让关键点回归更加准确;数据方面,用算法低成本地从公开数据中挖掘大量表格检测数据,显著性地提高表格检测效果。最终模型大小为 1M 左右,顺畅地运行在小米手机上。

img

▲ 图五表格检测算法框架

四、表格识别算法

表格识别算法如图三所示,该算法在服务端运行,主要包含的模块有:文本检测、文本识别、表格结构预测、单元格匹配、对齐算法、Excel 导出。文本检测识别模块采用了我们之前已经上线的 OCR 服务,这里不再做重点介绍。下面将主要介绍表格结构预测算法和 Cell 坐标聚合算法。数据方面,由于表格数据标注困难,我们完成了一套表格渲染工具,可以合成各种样式的表格数据,极大地降低了标注成本。

表格样式多样,有线的表格、无线的表格、隔段横线表格等,并且表格中有非常多各种复杂的合并单元格出现;另外,图片含有阴影、光照、扭曲、变形等也增大了表格预测的难度。

表格结构预测前人有不少研究:

  • 基于传统算法提取表格线,再由表格线推导行、列、合并单元格的信息;
  • 基于目标检测,检测出单元格,再用后处理方法组织单元格还原表格结构;
  • 基于语义分割,分割出表格线,然后对分割结果进行后处理还原表格结构;

以上算法有一个共同的问题,后处理复杂并且鲁棒性较差,通常需要针对特定表格的算法适配。

目前主流的方法是将表格用 HTML 的超文本表示,然后对 HTML 进行编码,预测 HTML 序列和对应的坐标信息。该方法在开源数据集上取得了不错的效果,中国平安科技和百度也采用了这种方案,但是 HTML 的标签过多导致表格结构识别容易出错。针对该方法的不足,我们对表格采用全新的编码方式,仅用四个标签就能表示任意结构的表格,极大地提高了表格结构识别准确率。

如图六所示,将表格定义为 M*N 个单元格组成的矩阵,以及内部合并单元格组成。“0”:代表普通的单元格、“1”:代表向左合并单元格、“2”:表示向上合并单元格;并且每个单元格对应一个坐标框,以便后续把 OCR 识别的结果与之匹配。这样定义的优点:无人为语法规则;数据组织具有天然的二维对齐属性,网络更不容易产生漂移;少量标签可以还原出任意表格结构,无开放集分类问题。

img

▲ 图六表格结构定义

我们采用了如图七所示的表格结构预测框架,该方法基于 cnn+transformer decoder 的图像到序列学习网络,在解码阶段包含两个预测头,分别预测表格序列和表格 Cell 的坐标信息。

img

▲ 图七表格结构预测框架

表格结构效果如图八所示,表格结构识别算法预测出每个单元格的位置信息和每个位置对应的序列信息。图八左右两个图是一一对应的,同一种颜色的检测框对应右边 Cell 单元格,Cell 是有顺序的。

img

​▲ 图八表格结构识别效果展示

表格识别在部署过程中,采用 Fastertransformer 推理框架进行加速,我们的推理速度提升了大约 20 倍,明显改善用户体验。

Cell 坐标聚合算法主要是将文本检测到的内容与表格预测的单元格进行正确匹配,算法流程如图九所示。文本框与单元格框进行匹配,首先匹配 IOU 最大的,如果 IOU=0,则匹配两个框中心距最近的。如果一个单元格中包含多个文本框的结构,还要在单元格内按照阅读顺序输出,并实现智能换行从而改善用户体验。

img

▲ 图九 Cell 坐标聚合算法流程

最终我们的算法在表格结构提取和端到端表格还原的准确率上,均领先业界的主要竞品。

五、对齐算法

上述算法已经基本还原出表格信息,但是同一表格里单元格的对齐方式并不相同,可能同时存在“左对齐” “右对齐” “居中对齐”。我们设计了一套对齐算法,通过分析表格中单元格的位置信息实现自动对齐,完全还原出真实表格,明显改善用户体验。对齐算法效果如图十所示:

img

▲ 图十 对齐算法效果

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

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

相关文章

RabbitMq 的消息可靠性问题(二)---MQ的消息丢失和consumer消费问题

前言 RabbitMq 消息可靠性问题(一) — publisher发送时丢失 前面我们从publisher的方向出发解决了发送时丢失的问题,那么我们在发送消息到exchange, 再由exchange转存到queue的过程中。如果MQ宕机了,那么我们的消息是如何确保可靠性的呢?当消…

SQL的函数

文章目录一、SQL MIN() Function二、SQL SUM() 函数三、SQL GROUP BY 语句四、SQL HAVING 子句五、SQL EXISTS 运算符六、SQL UCASE() 函数总结一、SQL MIN() Function MIN() 函数返回指定列的最小值。 SQL MIN() 语法 SELECT MIN(column_name) FROM table_name;演示数据库 …

Numba witch makes Python code fast

一. 前言:numba,让python速度提升百倍 python由于它动态解释性语言的特性,跑起代码来相比java、c要慢很多,尤其在做科学计算的时候,十亿百亿级别的运算,让python的这种劣势更加凸显。 办法永远比困难多&a…

ASP.NET Core MVC 从入门到精通之接化发(二)

随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生&#xff0c…

4.13实验 加测试题目

今天是个好日子,要搞栈的实验 没啥就是链栈和顺序栈 和出栈入栈,强大都是从最基本开始的 来和我一起写写吧 //顺序栈 typedef struct node{int *base;int *top;int sizer; }shed;//链栈 typedef struct Node{ int data; struct Node* next; }*stact,link; //顺序栈的初始化…

《绝对坦率》速读笔记

文章目录书籍信息概览(第一部分 一种新的管理哲学)建立坦率的关系给予并鼓励指导了解团队中每个人的动机协同创造成果(第二部分 工具和技巧)关系指导团队结果书籍信息 书名:《绝对坦率:一种新的管理哲学》…

北邮22信通:(12)二叉树的遍历书上代码完整版

北邮22信通一枚~ 跟随课程进度每周更新数据结构与算法的代码和文章 持续关注作者 解锁更多邮苑信通专属代码~ 上一篇文章: 下一篇文章: 目录 一.储存最简单数据类型的二叉树 代码部分: 代码效果: 运行结果&#xff1a…

解决JD-GUI-1.6.6 中文乱码

一、背景 在window环境下使用中遇到了乱码问题。 问题有两个: 一、从反编译代码的界面 CTRLC 复制是如果选中内容包含中文,贴到其他编辑器时,中文丢失。 二、打开xml文件、properties文件等包含中文时。中文在反编译界面中显示乱码。用其他工…

java反射教程

反射(Reflection)是 Java中的一种机制,它是一种特殊的面向对象编程技术。在 Java中,反射可以分为静态反射和动态反射两种。静态反射是指在 Java程序运行时才进行的一种反射,它可以保证程序运行时不会出现内存泄漏等错误…

数据分析的作用和意义?

数据分析的作用和意义?在当下数字化转型发展的大环境中,数据也成为企业商业成功与否的重要基础,如何利用好数据分析问题预测未来也成为更多企业面临的首要问题。而随时大数据的不断渗透,数据量和数据类型也越来越多,数…

asp.net车辆管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net车辆管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言开发 asp.net车辆管理系统VS开发sqlserver数…

【CSIG图像图形技术挑战赛-开放世界目标检测竞赛】火热报名中!

竞赛名称:开放世界目标检测竞赛/Few Shot)主办方: 中国图象图形学学会(CSIG)合作方: 360集团竞赛目的与意义:目标检测是计算机视觉中的核心任务之一,主要目的是让计算机可以自动识别图片中目标的类别&#…

Windows File Recovery使用教程

Windows File Recovery简介 Windows File Recovery是微软在2020年发布的命令提示符文件恢复工具,它不仅具有高成功率和高安全性,还适用于不同的文件系统和文件丢失场景。如果你需要从本地硬盘、USB设备、SD卡等设备中恢复意外丢失或删除的JPEG、PDF、…

分析Spring事务管理原理及应用

目录 一、Spring事务管理介绍 (一)基本理论 (二)实际工作中的举例 (三)简单应用举例 二、Spring事务配置介绍 (一)Spring事务属性介绍 传播属性(传播行为&#xff…

车身控制模块BCM(Body Control Module)

1.BCM概述 车身控制模块BCM是高集成度的芯片。BCM的英文全称是Body Control Module。其控制对象是采用高灵敏度带唤醒及睡眠检测的高频收发器,实现车门车窗遥控上锁与开锁、电动后视镜、中控门锁、玻璃升降装置、车灯(远光灯、近光灯、位置灯、制动灯、转向灯、雾灯…

【RocketMQ】主从模式下的消费进度管理

在【RocketMQ】消息的拉取一文中可知,消费者在启动的时候,会创建消息拉取API对象PullAPIWrapper,调用pullKernelImpl方法向Broker发送拉取消息的请求,那么在主从模式下消费者是如何选择向哪个Broker发送拉取请求的? 进…

【Linux】项目自动化构建工具-make/Makefile

文章目录1.make/Makefile的重要性2.规则及使用使用规则3.Makefile编译多文件1.make/Makefile的重要性 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中&#xf…

2023美赛春季赛Z题模型代码

已经完成模型代码,仅供大家参考,需要更多请看文末 一、问题分析 首先需要收集与奥运会举办城市/国家相关的历史数据。这需要涉及诸如经济、土地利用、人类满意度(包括运动员和观众)、旅行、基础设施建设、环境影响等多个方面。数…

(二)【软件设计师】计算机系统—CPU运算器控制器

文章目录一、CPU1.计算机硬件基本组成(了解)2.中央处理单元(了解)3.CPU组成4.例题二、运算器1.运算器有两个主要功能2.简要介绍运算器中各组成部件的功能三、控制器1.例题2.组成部分四、总结一、CPU 1.计算机硬件基本组成&#x…

让chatGPT当我的老师如何? 通过和chatGPT交互式学习,了解在ES中,一条JSON数据是如何写到磁盘上的

最近一直有一个问题,如鲠在喉。争取早一天解决,早一天踏踏实实的睡觉。 问题是:在ES中,一条JSON数据是如何写入到磁盘上的? 如何解决这个问题?我想到了chatGPT,还有lucene的学习资料。这篇文章&…