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

liftword4个月前 (01-08)技术文章72

大约一年前,我的任务是从文档中提取和构建数据,主要包含在表格中。我没有计算机视觉方面的先验知识,很难找到合适的“即插即用”解决方案。可用的选项要么是基于神经网络 (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批量生成二维码图片

1、创建一个TXT文本文档,用来存放需要生成二维码的单号,每行一个单号,单号如下:14251564612316sw132132并保存。2、在scewm.py文件中输入代码,代码如下:import qr...

如何使用python裁剪图片?

如何使用python裁剪图片如上图所示,这是一张包含了各类象棋棋子的图片。我们需要将其中每一个棋子都裁剪出来,此时可以利用python的 PIL库 实现。一、 安装PIL库如果此前没有安装过PIL库,...

Python实现图片格式转换

在日常生活和工作中经常遇到需要转换图片格式的情况,网上有很多图片转换工具,但都需要注册登录,还有的要收费,作为一个程序员怎么能花这冤枉钱,于是就想着自己开发一个可以转换图片格式的软件。界面设计虽然只是...

用Python写了一个图像文字识别OCR工具

人生苦短,快学Python!在之前的文章里,我们多次尝试用Python实现文本OCR识别!今天我们要搞一个升级版:直接写一个 图像文字识别OCR工具 !引言最近在技术交流群里聊到一个关于图像文字识别的...