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

liftword6个月前 (01-08)技术文章125

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

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

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

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

Python 潮流周刊#51:用 Python 绘制美观的图表

本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进 Python 技术,并增长职...

使用Python将图片转换为字符画并保存到文件

字符画(ASCII Art)是将图片转换为由字符组成的艺术作品。利用Python,我们可以轻松实现图片转字符画的功能。本教程将带你一步步实现这个功能,并详细解释每一步的代码和实现原理。环境准备首先,你...

Python批量重命名照片:让你的照片整理更加高效

Python批量重命名照片:让你的照片整理更加高效在日常生活中,我们经常会拍摄大量的照片,而这些照片的命名往往比较杂乱,甚至无法一眼辨识出每张照片的具体内容。尤其是当你拍摄了成百上千张照片时,整理和查...