使用Python从图像中提取表格
来源:51CTO.COM
时间:2023-11-15 15:36:01 416浏览 收藏
怎么入门科技周边编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《使用Python从图像中提取表格》,涉及到,有需要的可以收藏一下
大约一年前,我被分配任务从文件中提取和结构化数据,主要是包含在表格中的数据。我之前对计算机视觉没有了解,并且很难找到一个合适的“即插即用”的解决方案。当时可选的方案要么是基于最新神经网络(NN)的解决方案,这些解决方案庞大而繁琐,要么是基于OpenCV的较简单的解决方案,但不够一致。
受现有OpenCV脚本的启发,我开发了一种简单而一致的方法来提取表格,并将其制作成一个开源的Python库:img2table
需要被重写的内容是:链接:https://github.com/xavctn/img2table
我的库有什么作用?
与深度学习解决方案相比,这个轻量级的包不需要训练和最小化参数化。它提供了以下功能:
- 识别图像和PDF文件中的表格,包括在表格单元级别的边界框。
- 通过支持OCR服务/工具(Tesseract、PaddleOCR、AWS Textract、Google Vision和Azure OCR目前支持)来提取表格内容。
- 处理复杂的表格结构,如合并单元格。
- 实现纠正图像的倾斜和旋转的方法。
- 提取的表格以一个简单的对象形式返回,包括一个Pandas DataFrame表示。
- 将提取的表格导出为Excel文件的选项,保留其原始结构。
如何使用它?
可以使用pip来安装这个库,安装完成后就可以使用了
pip install img2table
在文档中识别表格只需调用一个函数:
从img2table.document导入Image类# 图像实例化 img = Image(src="myimage.jpg")# 表格识别 img_tables = img.extract_tables()# 表格识别结果 img_tables[ExtractedTable(title=None, bbox=(10, 8, 745, 314),shape=(6, 3)), ExtractedTable(title=None, bbox=(936, 9, 1129, 111),shape=(2, 2))]
需要被改写的内容是:上述示例中使用的图像
如果我们想要提取表格的内容,就需要使用OCR工具。可以按照以下步骤来实现:
from img2table.document import PDFfrom img2table.ocr import TesseractOCR# Instantiation of the pdfpdf = PDF(src="mypdf.pdf")# Instantiation of the OCR, Tesseract, which requires prior installationocr = TesseractOCR(lang="eng")# Table identification and extractionpdf_tables = pdf.extract_tables(ocr=ocr)# We can also create an excel file with the tablespdf.to_xlsx('tables.xlsx',ocr=ocr)
示例表格是从PDF文件中提取出来的样本
最后,在简单的情况下,可以通过设置`borderless_tables`参数来执行“无边框”表格的提取。这允许检测那些单元格不需要完全被边框包围的表格。
无需更改原始意思,需要重写的内容是:“无边框”表格提取示例
这是全部内容!事实上,仓库并不复杂,因为我们的目标是尽可能简化,避免引入其他可能带来复杂性的解决方案
请访问项目的GitHub页面以获取更详细的文档和示例:https://github.com/xavctn/img2table
底层实现
所有图像处理都使用OpenCV和opencv-python库完成。然而,这仍然相当基础。
算法的核心是Hough变换,它能够识别图像中的直线,使我们能够检测图像中的水平和垂直线条
需要重写的内容是:cv2.HoughLinesP(img, rho, theta, threshold, None, minLinLength, maxLineGap)
在这之后,我们需要对线条进行一些处理,以便从中识别出单元格,并从单元格中进一步识别出表格
简化算法表示的实现方式
大多数计算使用Polars进行,以实现良好的性能和速度。
理论要掌握,实操不能落!以上关于《使用Python从图像中提取表格》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
219 收藏
-
215 收藏
-
275 收藏
-
210 收藏
-
431 收藏
-
335 收藏
-
230 收藏
-
189 收藏
-
291 收藏
-
399 收藏
-
358 收藏
-
193 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习