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

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

大约一年前,我的任务是从文档中提取和构建数据,主要包含在表格中。我没有计算机视觉方面的先验知识,很难找到合适的“即插即用”解决方案。可用的选项要么是基于神经网络 (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自动化办公:一分钟高效搞定Excel所有图片的导入导出

在日常办公中,我们经常需要在Excel表格中插入或导出图片,特别是在制作产品目录、报告或展示数据时。现在有这样一份任务,产品名录表里需要将每个产品的实拍图片插入到D列上,产品有上百个,传统方法需要将图...

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

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

一篇带你实战的Python绘图Turtle库

Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行...

小游戏开发-巧用python代码实现图片的合成

需求:1. 给定底部图片和麻将文字图片,将麻将文字图片合成到底部图片上2. 麻将文字图片有 34 张,每张图片的大小不一样,需要根据底部图片的大小,将麻将文字图片缩放到合适的大小3. 麻将文字图片需要...

苹果M1芯片上运行Stable Diffusion,生成图片只需15秒,几步搞定

机器之心报道机器之心编辑部大火的Stable Diffusion,现在也能在苹果电脑上运行了。最近由慕尼黑大学等机构新出的文本 - 图像模型 Stable Diffusion,可谓是火出了圈,生成的图...