当前位置: 首页 > news >正文

AI文档识别技术之表格识别 (一)

AI文档识别技术之表格识别(一)

文章目录

文章目录

  • AI文档识别技术之表格识别(一)
    • 1. 表格识别原理介绍
      • 1.1 表格类型分类
      • 1.2 识别原理
    • 2. 整体识别流程
      • 2.1 流程图
      • 2.2 图像处理部分大致流程
    • 3. 将表格转换为html与json格式输出
      • 3.1 html格式
      • 3.2 json格式
      • 3.3 表格识别实例

前言

此文章主要介绍DocumentAI表格识别的V1版本,通过DocumentAI表格识别实现表格检测并实现表格还原结构

  • 表格检测:检测表格在图片中所处的区域
  • 表格还原结构:通过表格图片还原表格的结构信息,主要包括(行数,列数,合并单元格数)

目前DocumentAI表格识别已实现V2版本,大幅提升标准表格的识别准确率,具体信息会在下一篇blog中再具体说明

1. 表格识别原理介绍

1.1 表格类型分类

在现实生活中,表格大小、种类与样式复杂多样,例如表格中存在不同的背景填充,不同的行列合并方法,不同的内容文本类型等,并且现有文档既包括现代的、电子的文档,也有历史的、扫描的手写文档,它们的文档样式、所处光照环境以及纹理等都有比较大的差异,表格识别一直是文档识别领域的研究难点。

DocumentAI表格识别将表格分为两类,一种为标准表格,另一种为非标准表格:

  • 标准表格:表格边框完整,表格内线完整且清晰,无需人为再添加表格线条做表格内容分割

在这里插入图片描述

标准表格图片

  • 非标准表格:缺少表格边框或者表格内线,表格线条不清晰,需要人为添加表格线条分割表格内容,例如下面的表格就缺少很多的横线与竖线

在这里插入图片描述

​ 非标准图片

1.2 识别原理

DocumentAI通过结合AI与传统算法实现表格识别,主要用到的AI能力与算法有:

  • AI:版面分析能力(通过AI版面分析检测表格在图片内所处的区域)
  • AI:OCR能力(通过OCR实现识别表格内容)
  • 算法:图像处理算法(通过结合图像处理算法辅助获取表格结构信息)

通过以上的AI与算法再结合一些表格识别算法即可实现通用表格识别,同时支持识别标准表格与非标准表格

2. 整体识别流程

2.1 流程图

在这里插入图片描述

2.2 图像处理部分大致流程

图像处理的大致流程为:

  1. 对输入的表格图片进行预处理
  2. 通过形态学算法过滤非线条信息
  3. 检测线条与block得到表格的基础信息

3. 将表格转换为html与json格式输出

3.1 html格式

通过输出表格的html格式更方便用户的结果可视化与调试

3.2 json格式

通过json格式更方便的在各语言之间传输表格数据

3.3 表格识别实例

在这里插入图片描述

​ 原图

在这里插入图片描述

​ html展示结果

{

“type”: “table_with_line”, //表格类型

“angle”: 0, //表格倾斜角度

“width”: 572, //表格宽度

“height”: 93, //表格高度

“rows”: 3, //表格行数

“cols”: 3, //表格列数

“position”: [111, 266, 683, 266, 683, 359, 111, 359], //表格位置

“height_of_rows”: [32, 30, 31], //表格每一行的高度

“width_of_cols”: [190, 190, 191], //表格每一列的宽度

“table_cells”: [ //表格内所有单元格的信息

{

“start_row”: 1, //单元格所在开始行号

“end_row”: 1, //单元格所在结束行号

“start_col”: 1, //单元格所在开始列号

“end_col”: 1, //单元格所在结束列号

“text”: “”, //单元格文本内容

“position”: [0, 0, 190, 0, 190, 32, 0, 32], //单元格位置

“lines”: [] //单元格文本行信息

},

…, // 其余单元格

{

“start_row”: 3,

“end_row”: 3,

“start_col”: 3,

“end_col”: 3,

“text”: “23%”,

“position”: [380, 62, 571, 62, 571, 93, 380, 93],

“lines”: [

​ {

​ “text”: “23%”,

​ “score”: 1,

​ “position”: [458, 70, 491, 70, 491, 93, 458, 93]

​ }

]

}

]

}

​ 表格json结果

相关文章:

AI文档识别技术之表格识别 (一)

AI文档识别技术之表格识别(一) 文章目录 文章目录 AI文档识别技术之表格识别(一)1. 表格识别原理介绍1.1 表格类型分类1.2 识别原理 2. 整体识别流程2.1 流程图2.2 图像处理部分大致流程 3. 将表格转换为html与json格式输出3.1 html格式3.2 json格式3.3 表格识别实例 前言 此文…...

uni-app 支持 app端, h5端,微信小程序端 图片转换文件格式 和 base64

uni-app 支持 app端 h5端,微信小程序端 图片转换文件格式 和 base64,下方是插件市场的地址app端 h5端,微信小程序端 图片转换文件格式 和 base64 - DCloud 插件市场 https://ext.dcloud.net.cn/plugin?id13926...

云计算——存储虚拟化简介 与 存储模式及方法

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 目录 前期回顾 前言 一.存储虚拟化介绍 1.云计算存储基本概念 2.云计算存储模型 3.创…...

数据资产目录建设之数据分类全解

01 数据治理“洗澡论” 其实他们之前做过数据一轮数据资产盘点,做了一个分类,也挂到系统上了,但是后来就没有后来了。治理做一半,等于啥也没干。 我之前在群里开了一个玩笑,数据治理这种事情,就跟洗澡一…...

大模型的数据隐私问题有解了,浙江大学提出联邦大语言模型

作者 | 小戏、Python 理想化的 Learning 的理论方法作用于现实世界总会面临着诸多挑战,从模型部署到模型压缩,从数据的可获取性到数据的隐私问题。而面对着公共领域数据的稀缺性以及私有领域的数据隐私问题,联邦学习(Federated Le…...

flask-sqlalchemy使用

# sqlalchemy 集成到flask中 # 第三方: flask-sqlalchemy 封装了用起来,更简洁 安装 pip install flask-sqlalchemy 使用 # 使用flask-sqlalchemy集成1 导入 from flask_sqlalchemy import SQLAlchemy2 实例化得到对象db SQLAlchemy()3 将db注册到app中db.in…...

flask处理token的装饰器

以下是在 Flask 中基于 token 实现的登录验证装饰器的示例代码: import jwt from functools import wraps from flask import request, jsonify, current_appdef login_required(f):wraps(f)def decorated_function(*args, **kwargs):token request.headers.get(A…...

【Express.js】页面渲染

页面渲染 常见的页面分为两种,一种是静态页面,比如用 Vue、React 等写好的静态页面,另一种是动态模板页面,如 Thymeleaf,JSP 等。 本节将简要介绍如何在 express 中渲染静态页面,以及适用于 express 的模…...

2.UE数字人语音交互(UE数字人系统教程)

上一篇:1.Fay-UE5数字人工程导入 2.UE数字人语音交互(UE数字人系统教程) 1、启动ue数字人 2、下载Fay数字人控制器 Fay数字人控制器下载地址 3、依照说明配置运行Fay 4、启动Fay控制器 5、切换到UE界面开始说话 6、完成了&#xf…...

C语言——水仙花数字

//水仙花数字 //每个数位上的数字的 3次幂之和等于它本身 //列如&#xff1a;1531^35^33^3 #include<stdio.h> int main() {int i,x,y,z;for(i100;i<1000;i){xi%10;yi/10%10;zi/100%10;if(i(x*x*xy*y*yz*z*z))printf("%d\n",i);}return 0; } //输出100-1000…...

java中list对象拷贝至新的list对象并保持两个对象独立的方法

在Java中&#xff0c;如果你想拷贝一个List对象到一个新的List对象&#xff0c;并且修改原来的List不影响新的List中的内容&#xff0c;有几种方法可以实现&#xff1a;使用构造函数&#xff1a; 可以使用List的构造函数&#xff0c;传递原始List作为参数来创建一个新的List对象…...

使用AI工具Lama Cleaner一键去除水印、人物、背景等图片里的内容

使用AI工具Lama Cleaner一键去除水印、人物、背景等图片里的内容 前言前提条件相关介绍Lama Cleaner环境要求安装Lama Cleaner启动Lama CleanerCPU方式启动GPU方式启动 使用Lama Cleaner测试结果NO.1 检测框NO.2 水印NO.3 广州塔NO.4 人物背景 参考 前言 由于本人水平有限&…...

瑞数系列及顶像二次验证LOGS

瑞数商标局药监局专利局及顶像二次验证 日期&#xff1a;20230808 瑞数信息安全是一个专注于信息安全领域的公司&#xff0c;致力于为企业和个人提供全面的信息安全解决方案。他们的主要业务包括网络安全、数据安全、应用安全、云安全等方面的服务和产品。瑞数信息安全拥有一支…...

Anaconda版本和Python版本对应关系(持续更新...)

简介 Anaconda是包管理工具,是专注于数据分析的Python发行版本&#xff0c;其包含Python和许多常用软件包&#xff0c;不同的Anaconda版本里面也配备了不同的Python版本&#xff0c;并且Python的出现时间比Anaconda早很多&#xff1b;相对而言&#xff0c;python原生的pip安装方…...

vscode 搭建STM32开发环境

1.需要软件 1.1 vscode 1.2 STM32CubeMX&#xff0c;这个不是必须的&#xff0c;我是为了方便生成STM32代码 2.vscode配置 2.1安装keil Assistant 2.2配置keil Assistant 3.STMCUBE生成个STM32代码 &#xff0c;如果有自己的代码可以忽略 4.代码添加到vscode&#xff0c;并…...

6款好用的思维导图在线制作网站盘点,拒绝低效、探索创意!

思维导图以其直观、系统的特性&#xff0c;成为了我们理清思路、整理信息的强大助手。利用好思维导图&#xff0c;我们可以更好地理解信息、链接概念&#xff0c;进一步提高我们的学习和工作效率。 在众多制作思维导图的软件中&#xff0c;在线思维导图制作网站更是因其…...

js的Promise

目录 异步任务回调地域Promise Promise的三种状态resolve传入值 Promise的实例方法thenthen的返回值返回Promise的状态 catchcatch的返回值 finally Promise的类方法resolverejectallallSettledraceany 异步任务 在js中&#xff0c;有些任务并不是立即执行的&#xff0c;如set…...

2.4g无线芯片G350规格书详细介绍

G350是一款高度集成的2.4GHz无线收发芯片&#xff0c;旨在为各种应用提供低成本、高性能的无线通信解决方案。该芯片通过降低功耗&#xff0c;在保持寄存器值条件下&#xff0c;实现最低电流为5μA&#xff0c;从而显著提高了电池寿命。它内置了发射接收FIFO寄存器&#xff0c;…...

React中使用mobx管理状态数据使用样例

MobX 是一个身经百战的库&#xff0c;它通过运用透明的函数式响应编程&#xff08;Transparent Functional Reactive Programming&#xff0c;TFRP&#xff09;使状态管理变得简单和可扩展。官网地址&#xff1a;关于 MobX | MobX中文文档 | MobX中文网 安装依赖 mobx-react-…...

《HeadFirst设计模式(第二版)》第五章代码——单例模式

代码文件目录&#xff1a; 初始版本&#xff1a; package Chapter5_SingletonPattern.origin;/*** Author 竹心* Date 2023/8/5**/public class Singleton {private static Singleton uniqueInstance;private Singleton(){}public static Singleton getInstance(){if(uniqueIn…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...