从图片或PDF文件识别表格提取内容的简单库img2table

img2table是一个基于OpenCV 图像处理的用于 PDF 和图像的表识别和提取 Python库。由于其设计基于神经网络的解决方案,提供了一种实用且更轻便的替代方案,尤其是在 CPU 上使用时。

该库的特点:

  • 识别图像和PDF文件中的表格,包括在表格单元级别的边界框。

  • 通过支持OCR服务/工具(Tesseract、PaddleOCR、AWS Textract、Google Vision和Azure OCR目前支持)来提取表格内容。

  • 处理复杂的表格结构,如合并单元格。

  • 实现纠正图像的倾斜和旋转的方法。

  • 提取的表格以一个简单的对象形式返回,包括一个Pandas DataFrame表示。

  • 将提取的表格导出为Excel文件的选项,保留其原始结构。

支持的文件格式

图像

    支持的图像格式,不支持多页图像。

PDF格式

    支持本机和扫描的 PDF 文件。

一、安装

pip install img2table#标准安装支持Tesseractpip install img2table[paddle]#用于Paddle OCRpip install img2table[easyocr]#用于 EasyOCRpip install img2table[gcp]#用于 Google Vision OCRpip install img2table[aws]#用于 AWS Textract OCRpip install img2table[azure]#用于 Azure 认知服务 OCR

二、使用

图像文件实例化如下:

from img2table.document import Image
image = Image(src,detect_rotation=False)
"""说明参数src :str或bytes 或pathlib.Path或BytesIO,图片文件格式detect_rotation:bool,可选,默认False,检测并纠正图像的倾斜/旋转"""

PDF文件

​​​​​​​

from img2table.document import PDF
pdf = PDF(src,           pages=[0, 2],          detect_rotation=False,          pdf_text_extraction=True)
"""参数说明src :  str或bytes 或pathlib.Path或BytesIO,PDF文件格式pages : 列表, 可选, 默认None。要处理的 PDF 页面索引列表。如果为 None,则处理所有页面detect_rotation:bool,可选,默认False,检测并纠正从 PDF 中提取的图像的倾斜/旋转pdf_text_extraction:bool,可选,默认True,从原生 PDF 的 PDF 文件中提取文本"""

三、OCR

img2table为多个 OCR 服务和工具提供接口,以便解析表内容。
如果可能(即对于原生 PDF),将直接从文件中提取 PDF 文本,并且不会调用 OCR 服务/工具。以Tesseract为例

from img2table.ocr import TesseractOCR
ocr = TesseractOCR(n_threads=1,                    lang="eng",                    psm=11,                   tessdata_dir="...")

四、表提取

使用文档的方法可以从 PDF 页面/图像中一次提取多个表格。使用类方法extract_tables返回

​​​​​​​

from img2table.ocr import TesseractOCRfrom img2table.document import Image
# Instantiation of OCRocr = TesseractOCR(n_threads=1, lang="eng")
# Instantiation of document, either an image or a PDFdoc = Image(src)
# Table extractionextracted_tables = doc.extract_tables(ocr=ocr,                                      implicit_rows=False,                                      borderless_tables=False,                                      min_confidence=50)"""参数说明ocr :OCRInstance,可选,默认None用于解析文档文本的 OCR 实例。如果为 None,则不会提取单元格内容implicit_rows:bool,可选,默认False指示是否应标识隐式行的布尔值 - 检查相关示例borderless_tables:bool,可选,默认False指示是否在有边框表的顶部提取无边框表的布尔值。min_confidence:int、可选、默认50OCR 处理文本的最低置信度,从 0(最差)到 99(最好)"""                   

​​​​​​​

ExtractedTable 类用于对从文档中提取的表进行建模。
属性bbox:BBox,表边界框title : str,提取的表标题content : OrderedDict,以行索引为键,以对象列表为值的字典TableCelldf : pd.DataFrame,表的 Pandas DataFrame 表示形式html : str,表格的 HTML 表示形式

五、返回提取结果

图像
Image类的extract_tables方法返回ExtractedTable对象的列表。

output = [ExtractedTable(...), ExtractedTable(...), ...]

PDF格式
PDF类的extract_tables方法返回一个OrderedDict对象,该对象将页面索引作为键和ExtractedTable对象的列表。

output = {    0: [ExtractedTable(...), ...],    1: [],    ...    last_page: [ExtractedTable(...), ...]}

Excel 导出
从文档中提取的表格可以导出为 xlsx 文件。生成的文件由每个提取的表的一个工作表组成。
方法参数在方法中很常见。​​​​​​​

from img2table.ocr import TesseractOCRfrom img2table.document import Image
# Instantiation of OCRocr = TesseractOCR(n_threads=1, lang="eng")
# Instantiation of document, either an image or a PDFdoc = Image(src)
# Extraction of tables and creation of a xlsx file containing tablesdoc.to_xlsx(dest=dest,            ocr=ocr,            implicit_rows=False,            borderless_tables=False,            min_confidence=50)

图片

github:https://github.com/xavctn/img2table

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ 详解

文章目录 MQ 简介1、简介2、MQ优缺点3、MQ应用场景4、AMQP 和 JMS5、常见的 MQ 产品 RabbitMQ 工作原理Linux 环境安装 RabbitMQ1、rmp安装法1.1 安装1.2 开启管理界面1.3 启动与停止1.4 创建新用户 2、docker安装法2.1 安装2.2 下载rabbitmq_delayed_message_exchange插件 Rab…

学习pytorch17 pytorch模型保存及加载

pytorch模型保存及加载 代码 import torch import torchvisionvgg16 torchvision.models.vgg16(pretrainedFalse)# 1. save model 1 保存模型结构及模型参数 torch.save(vgg16, ./vgg16_save1.model)# 2. save model 2 只保存模型参数 比第一种保存方法保存的文件要小 t…

微信小程序云开发报错

微信小程序云开发报错 起因是云开发报了个错误: fail: Error: cloud.callFunction:fail Error: errCode: -501000 | errMsg: [100003] env not exists (f8c78dea-9f77-43cf-9e7f-88c85f2a0795) (callId: 1701747734223-0.895078767368265) (trace: 11:42:14 star…

在eclipse中安装python插件:PyDev

在eclipse中安装插件PyDev,就可以在eclipse中开发python了。 PyDev的官网:https://www.pydev.org/ 不过可以直接在eclipse中用Marketplace安装(备注:有可能一次安装不成功,是因为下载太慢了,多试几次&…

golang开发之个微机器人开发

请求URL: http://域名地址/sendFile 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型说明wId是string登录实例标识wcId是string接收…

InST论文复现

论文地址:https://arxiv.org/abs/2211.13203 论文git:https://github.com/zyxElsa/InST 遇到的问题: 1.requests.exceptions.SSLError: HTTPSConnectionPool(hosthuggingface.co, port443): Max retries exceeded with url: /openai/clip-…

万兆光模块:单模光纤和多模光纤的选择指南

随着网络技术的不断发展,数据传输的速度也越来越快。在这样的背景下,万兆光模块逐渐成为了数据中心和网络设备的必备组件。而在选择万兆光模块时,用户通常会面临一个难题:选择单模还是多模?本文易天光通信将为您解析。…

鸿蒙原生应用/元服务开发-新版本端云一体化模板体验反馈

一、前言 云端一体化模板是基于Serverless服务构建的一套模板,提供了应用生态常见场景需求的代码实现,开发者可将所需能力快速部署和集成到自己的应用中。 二、准备 体验最新的远端一体化模板,需要将云模板替换掉。为此,我们需要做…

浅谈Python+requests+pytest接口自动化测试框架的搭建

框架的设计思路 首先要明确进行接口自动化需要的步骤,如下图所示: ​然后逐步拆解需要完成的工作: 1)了解分析需求:了解接口要实现的功能 2)数据准备:根据开发文档确定接口的基本情况&#x…

【SSM源码】基于JAVA的高校竞赛和考级查询系统

该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等学习内容。 目录 一、项目介绍: 二、文档学习资料: 三、模块截图: 四、开发技术与运行环境: 五、代码展示: 六、数据库表截图&#xff1a…

el-table全部选择和全部取消

el-table实现全部选择和全部取消 其实非常简单&#xff0c;el-table自带的都有方法toggleAllSelection()和clearSelection() 具体代码如下&#xff1a; <el-button typesuccess clickcheckAll sizesmall>全选</el-button> <el-button typesuccess clickcancel…

亲测体验Go语言PGO

本文是对官方 Profile-guided optimization in Go 1.21[1] 的学习与实践. 对于PGO的思路,之前就有过类似的想法,有些许差异. 但本质都是通过对以往运行情况的"学习",优化以后程序的运行(有点以史为鉴和鉴于往事,资于治道的感觉) 过程很简单: 收集程序运行过程中的数据…

js选中起始时间使用标准时间毫秒值计算一年后的当前少一天的日期(并考虑闰年)

js选中起始时间使用标准时间毫秒值计算一年后的当前少一天的日期 实际代码里面带入默认日期’20230301’这个特殊日期&#xff0c;因为下一年的当前日期少一天为闰年的2月会有29天&#xff0c;使用特殊值校验代码效果图 HTML部分代码 <el-button click"chengTime()&q…

微信聊天窗口测试用例

以前没测过客户端的测试&#xff0c;昨天面试被问到聊天窗口测试场景设计&#xff0c;感觉自己答的不好&#xff0c;结束后上网查了一下客户端/app测试的要点&#xff0c;按照测试策略来分&#xff0c;主要涉及到如下测试类型&#xff1a; 1、功能测试 2、性能测试 3、界面测试…

第73讲:深入理解MySQL数据库InnoDB存储引擎:内存结构、磁盘结构与后台线程全面解析

文章目录 1.InnoDB存储引擎的架构2.InnoDB存储引擎的内存结构2.1.Buffer Pool缓冲池2.2.Change Buffer更改缓冲区2.3.自适应Hash索引2.4.Log Buffer日志缓冲区 3.InnoDB存储引擎的磁盘结构3.1.System Tablespace系统表空间3.2.File-Per-Table Tablespaces每个表都有单独的表空间…

ROS话题通信基本操作(C++)

目录 一、发布 1、实现步骤 2、代码实例 二、接收 1、实现步骤 2、代码实例 三、配置运行 1、修改CMakeLists.txt 2、运行结果 一、发布 1、实现步骤 1.包含头文件 2.初始化 ROS 节点:命名(唯一) 3.实例化 ROS 句柄 4.实例化 发布者 对象 5.组织被发布的数据&#…

大学里面转专业介绍

目录 个人情况转专业过程中的经验分享转专业后的学习建议和心态调整转专业后的时间平衡 个人情况 信息科学与工程学院计算机科学与技术专业2019级本科生&#xff0c;曾从物理与微电子科学学院后转入信息科学与技术学院。学习成绩连续三年专业前10% 项目&#xff1a;爬虫项目、…

AIGC+医疗专题:生成式人工智能于医疗健康

今天分享的是AI系列深度研究报告&#xff1a;《AIGC医疗专题&#xff1a;生成式人工智能于医疗健康》。 &#xff08;报告出品方&#xff1a;AREFACT&#xff09; 报告共计&#xff1a;23页 医疗保健中生成性人工智能的崛起: 在承诺与控制之间导航 Generative Al已经历了大规…

【开源】基于Vue.js的实验室耗材管理系统

文末获取源码&#xff0c;项目编号&#xff1a; S 081 。 \color{red}{文末获取源码&#xff0c;项目编号&#xff1a;S081。} 文末获取源码&#xff0c;项目编号&#xff1a;S081。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 耗材档案模块2.2 耗材入库模块2.3 耗…

NowCoder | KY11 二叉树遍历

NowCoder | KY11 二叉树遍历 OJ链接 简单来说就是构建这个二叉树定义结构体通过递归方式根据输入的字符串构建二叉树。对于输入字符串中的每个字符&#xff0c;如果是 ‘#’ 表示空节点&#xff0c;否则创建一个新节点&#xff0c;并递归地构建左右子树。 #include <limit…