使用Python从图像中提取表格

简介: 使用Python从图像中提取表格

640.jpg


大约一年前,我被分配任务从文件中提取和结构化数据,主要是包含在表格中的数据。我之前对计算机视觉没有了解,并且很难找到一个合适的“即插即用”的解决方案。当时可选的方案要么是基于最新神经网络(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

在文档中识别表格只需调用一个函数:


from img2table.document import Image
# Instantiation of the image
img = Image(src="myimage.jpg")
# Table identification
img_tables = img.extract_tables()
# Result of table identification
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 PDF
from img2table.ocr import TesseractOCR
# Instantiation of the pdf
pdf = PDF(src="mypdf.pdf")
# Instantiation of the OCR, Tesseract, which requires prior installation
ocr = TesseractOCR(lang="eng")
# Table identification and extraction
pdf_tables = pdf.extract_tables(ocr=ocr)
# We can also create an excel file with the tables
pdf.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进行,以实现良好的性能和速度。

相关文章
|
6天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
PYTHON TENSORFLOW 2二维卷积神经网络CNN对图像物体识别混淆矩阵评估|数据分享
PYTHON TENSORFLOW 2二维卷积神经网络CNN对图像物体识别混淆矩阵评估|数据分享
|
6天前
|
存储 NoSQL MongoDB
MongoDB数据库转换为表格文件的Python实现
MongoDB数据库转换为表格文件的Python实现
40 0
|
1天前
|
Python
2024年最全用Python和PIL美化图像:文本覆盖技术实战,Python高级面试题pdf
2024年最全用Python和PIL美化图像:文本覆盖技术实战,Python高级面试题pdf
|
2天前
|
数据采集 存储 数据挖掘
Python DataFrame初学者指南:轻松上手构建数据表格
【5月更文挑战第19天】本文是针对初学者的Pandas DataFrame指南,介绍如何安装Pandas、创建DataFrame(从字典或CSV文件)、查看数据(`head()`, `info()`, `describe()`)、选择与操作数据(列、行、缺失值处理、数据类型转换、排序、分组聚合)以及保存DataFrame到CSV文件。通过学习这些基础,你将能轻松开始数据科学之旅。
|
2天前
|
数据挖掘 数据处理 Python
【Python DataFrame 专栏】Python DataFrame 入门指南:从零开始构建数据表格
【5月更文挑战第19天】本文介绍了Python数据分析中的核心概念——DataFrame,通过导入`pandas`库创建并操作DataFrame。示例展示了如何构建数据字典并转换为DataFrame,以及进行数据选择、添加修改列、计算统计量、筛选和排序等操作。DataFrame适用于处理各种规模的表格数据,是数据分析的得力工具。掌握其基础和应用是数据分析之旅的重要起点。
【Python DataFrame 专栏】Python DataFrame 入门指南:从零开始构建数据表格
|
6天前
|
Serverless Python
Python----图像的手绘效果
Python----图像的手绘效果
8 1
|
6天前
|
存储 数据采集 数据可视化
Python列表到Excel表格第一列的转换技术详解
Python列表到Excel表格第一列的转换技术详解
9 0
|
6天前
|
监控 算法 计算机视觉
探索图像边缘:使用Python进行轮廓检测
探索图像边缘:使用Python进行轮廓检测
30 3
|
6天前
|
机器学习/深度学习 计算机视觉 Python
使用Python改变图像颜色的实用指南
使用Python改变图像颜色的实用指南
11 1
|
6天前
|
机器学习/深度学习 计算机视觉 Python
【Python 机器学习专栏】图像数据的特征提取与预处理
【4月更文挑战第30天】本文探讨了图像数据的特征提取与预处理在机器学习中的重要性。图像数据具有大容量、信息丰富和冗余性高的特点。特征提取涉及颜色、纹理和形状特征;预处理包括图像增强、去噪和分割。Python的OpenCV和Scikit-image库在处理这些任务时非常有用。常见的特征提取方法有统计、变换和基于模型的方法,而预处理应注意保持图像真实性、适应性调整及验证评估。有效的特征提取和预处理能提升模型性能,Python工具使其更高效。