如何在 Python 中从图像中提取表格

大约一年前,我的任务是从文档中提取和构建数据,主要包含在表格中。我没有计算机视觉方面的先验知识,很难找到合适的“即插即用”解决方案。可用的选项要么是基于神经网络 (NN) 的先进解决方案,这些解决方案既繁重又乏味,要么是更简单的基于 OpenCV 的解决方案,但和要的效果不一样

受现有 OpenCV 脚本的启发,我开发了一种简单且一致的方法来提取表格,并将其转换为开源 Python 库:img2table。

Library 介绍

该软件包重量轻(与深度学习解决方案相比),无需培训,参数化最小。它提供:

  • 图像和 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)


最后,对于简单的情况,可以在表格提取方法中通过设置参数来提取“无边框”表格borderless_tables 。这允许检测单元格不需要完全被边框包围的表格。

而且,仅此而已!该库实际上并没有更多内容,因为目标是使其尽可能简单,以避免其他一些可用解决方案可能带来的复杂性。


项目内核

所有图像处理都是使用OpenCV和opencv-python库完成的。然而,它仍然很初级。

该算法的主干是 Hough 变换,用于识别图像中的线条。它使我们能够检测图像的水平线和垂直线。

cv2.HoughLinesP(img, rho, theta, threshold, None, minLinLength, maxLineGap)


之后,进行一些处理以从细胞系中识别细胞,然后从细胞中识别表格。

大多数计算都是使用 Polars 进行的,以实现不错的性能和速度。

结论

该项目旨在为表识别和提取的复杂主题提供现有实现的实用替代方案。


资源:

  • img2table:https://github.com/xavctn/img2table
  • OpenCV:https://opencv.org/
  • Polar:https://www.pola.rs/

点赞关注 二师兄 talk 获取更多资讯,并在 头条 上阅读我的短篇技术文章

相关文章

Python自动生成手绘、证件照、九宫格...太炫酷了

Python像是叮当猫的口袋,几乎什么都能做,适合外行小白们去摸索学习,能极大的增加对编程的兴趣。有些工具用python来实现不一定是技术上的最优选择,但可能是最简洁、最面向大众的。介绍几个不错的处理...

教你使用python编程绘制函数图像

函数公式很抽象,图像更直观,但聪明的我们总不会手画图像吧?来学习一下用Python怎么画函数图像吧。首先打开Visual Studio Code(后面简称VSCode),点击New File(中文版是...

新手必看!如何用Python绘制复杂函数图像

在数据可视化的奇妙世界里,Python 就像是一把万能钥匙,能够帮我们打开一扇扇通往复杂函数图像绘制的大门。今天,就跟着我一起来探索如何用 Python 绘制那些令人惊叹的复杂函数图像吧!对于数学爱好...

怎么做到的?用python制作九宫格图片,太棒了

1. ? 应用场景 ?当初的想法是:想把一张图切割成九等份,发布到微信朋友圈,切割出来的图片,上传到朋友圈,发现微信不按照我排列的序号来排版。这样的结果是很耗时间的。让我深思,能不能有一种,直接拼接成...

python调用 stable diffusion批量生成图片代码解析

文中大多数内容来源github,版权属于原作者,1. 基础环境在windows上做示例,本地要安装了pythonpython的pip模块 安装 webuiapi编辑器 pyCharm 2024.2(c...

python图像处理入门-提取轮廓

提取图像中物体的轮廓,通常用在图像识别中,比如图像像素级分割,应用面比较广。import cv2 import numpy as np from skimage.measure import fi...