在 Python 中从图像中提取表格

举报
Q神 发表于 2023/06/23 11:23:44 2023/06/23
【摘要】 从图像中提取表格可能是一项乏味且耗时的任务,尤其是当您有大量图像需要处理时。但是,使用正确的工具和技术,您可以自动化此过程并快速轻松地从图像中提取表格。在本文中,我们将探讨如何使用 Python 从图像中提取表格。我们将介绍一个可用于从图像中识别和提取表格的库,以及示例代码和说明。无论您处理的是扫描文档、照片还是其他类型的图像,本文都将为您提供高效、准确地提取表格所需的工具和知识。img2t...

从图像中提取表格可能是一项乏味且耗时的任务,尤其是当您有大量图像需要处理时。但是,使用正确的工具和技术,您可以自动化此过程并快速轻松地从图像中提取表格。

在本文中,我们将探讨如何使用 Python 从图像中提取表格。我们将介绍一个可用于从图像中识别和提取表格的库,以及示例代码和说明。无论您处理的是扫描文档、照片还是其他类型的图像,本文都将为您提供高效、准确地提取表格所需的工具和知识。

img2table是什么?

Img2Table是一个简单、用户友好的 Python 库,用于表格提取和识别,基于 OpenCV 图像处理,除了大多数流行的图像文件格式之外,还支持 PDF 文件。

由于其设计,它为基于神经网络的解决方案提供了一种有用且重量较轻的替代方案,特别是对于 CPU 使用而言。

它支持以下文件格式:

  • JPEG 文件 - .jpeg、.jpg、*.jpe

  • 便携式网络图形 - *.png

  • JPEG 2000 文件 - *.jp2

  • Windows 位图 - .bmp、.dib

  • WebP - *.webp

  • 便携式图像格式 - .pbm、.pgm、.ppm、.pxm、*.pnm

  • PFM 文件 - *.pfm

  • OpenEXR 图像文件 - *.exr

img2table 特点

  • 图像和 PDF 文件的表格单元格级边界框和表格标识。

  • 处理复杂的表格结构,例如合并单元格。

  • 提取表格标题。

  • 提取表格内容,同时支持 OCR 工具和服务。

  • 返回 Pandas DataFrame 表示形式和表示提取的表的简单对象。

  • 通过将提取的表导出到 Excel 文件来保留其原始结构。

该软件包很简单(与深度学习解决方案相比),并且需要很少的培训或不需要培训。但仍然存在一些限制,因为尚不支持无边界表格更复杂的识别,并且可能需要基于 CNN 的方法。

执行

安装

就像所有其他 Python 包一样,img2table可以通过pip.

pip install img2table

使用图像

from img2table.document import Image

image = Image(src,dpi=200, detect_rotation=False)

我们实例化Image,其中src是图像的路径(必需),dpi用于适配OpenCV算法参数,它是可选的类型int默认为200), detect_rotation检测并纠正图像的倾斜或旋转,它是一个布尔值类型 和 默认情况下False.

让我们举个例子:

from img2table.document import Image

# Instantiation of the image
img = Image(src="image.jpg")

# Table identification
imgage_tables = img.extract_tables()

# Result of table identification
imgage_tables

#output
[ExtractedTable(title=None, bbox=(10, 8, 745, 314),shape=(6, 3)),
 ExtractedTable(title=None, bbox=(936, 9, 1129, 111),shape=(2, 2))]

使用 PDF

from img2table.document import PDF

pdf = PDF(src, dpi=200, pages=[0, 2])

它与我们处理图像的方式相同,只是我们有一个新参数pages,它是要处理的 PDF 页面索引列表。但如果页面列表中没有指定的索引,则所有索引pages都会被处理。

使用 OCR

为了解析表格的内容,img2table为各种 OCR 工具和服务提供接口。

from img2table.ocr import TesseractOCR

ocr = TesseractOCR(n_threads=1, lang="eng", tessdata_dir="...")

其中n_threads是用于调用int类型的 Tesseract 的并发线程数,默认为1lang在 Tesseract 中用于文本提取,它是可选的,最后是tessdata_dir包含 Tesseract 训练数据文件的目录。

注意:使用 Tesseract-OCR 需要事先安装。

让我们看一个例子。

from img2table.document import PDF
from img2table.ocr import TesseractOCR

# Instantiation of the pdf
pdf = PDF(src="tablesfile.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)

提取多个表

文档方法extract_tables允许从 PDF 页面或图像中同时提取多个表格。

from img2table.ocr import TesseractOCR
from img2table.document import Image

# Instantiation of OCR
ocr = TesseractOCR(n_threads=1, lang="eng")

# Instantiation of document, either an image or a PDF
doc = Image(src, dpi=200)

# Table extraction
extracted_tables = doc.extract_tables(ocr=ocr,
                                      implicit_rows=True,
                                      borderless_tables=False,
                                      min_confidence=50)

前面在处理图像和 PDF 时已经讨论过大多数参数,但还有一些新参数。ocr是用于解析文档文本的实例,implicit_rows是一个布尔类型,指示是否应识别隐式行,borderless_tables指示是否提取无边界表,最后min_confidence是 OCR 处理从 0(最差)到 0 之间的文本的最小置信度99(最好)。

结论

OpenCV-python 库和 OpenCV 都用于所有图像处理。识别图像中的线条的霍夫变换是该算法的基础。它使我们能够识别图像的水平线和垂直线。该库实际上没有更多内容,因为其目的是使其尽可能简单,以避免使用其他方法可能出现的任何潜在复杂性。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。