首页
Preview

使用Python提取图像中的表格

提取表格从图像可能是个费时费力的工作,特别是当你有大量的图像需要处理时更是如此。但是,拥有正确的工具和技术,你可以自动化这个过程,并快速准确地从图像中提取表格。

在这篇文章中,我们将探讨如何使用Python从图像中提取表格。我们将涵盖一个库(img2table),它可以用来识别和提取图像中的表格,并提供示例代码和解释。无论你是处理扫描文档、照片还是其他类型的图像,这篇文章都会提供你需要的工具和知识,帮助你高效准确地提取表格。

什么是img2table?

Img2Table是一个直观易用的Python库,用于表格提取和识别,它基于OpenCV图像处理,并支持PDF文件,除了大多数流行的图像文件格式。

由于其设计,它提供了一个有用且不至于太重的替代方案,尤其是对CPU使用而言。

它支持以下文件格式:

  • JPEG files — .jpeg, .jpg, *.jpe
  • Portable Network Graphics — *.png
  • JPEG 2000 files — *.jp2
  • Windows bitmaps — .bmp, .dib
  • WebP — *.webp
  • Portable image format — .pbm, .pgm, .ppm .pxm, *.pnm
  • PFM files — *.pfm
  • OpenEXR Image files — *.exr

img2table 提供的功能:

用于图像和PDF文件的单元格边界框和表格识别。 处理复杂的表格结构,如合并单元格。 提取表格标题。 支持OCR工具和服务,提取表格内容。 将返回Pandas DataFrame表示法和简单的对象表示提取的表格。 通过将它们导出到Excel文件来保留提取表格的原始结构。 该软件包简单(与深度学习解决方案相比),无需训练或很少训练。但是仍然存在一些限制,因为尚不支持无边框表格的更复杂的识别,可能需要基于CNN的方法。

实施:

安装

就像其他Python包一样,img2table可以通过pip安装

pip install img2table

使用Image

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_threadsTesseract调用时使用的同时线程数,类型为int类型,默认值为1lang用于Tesseract文本提取,可选;最后tessdata_dir是包含Tesseract traineddata文件的目录。

注意:使用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)

结论

OpenCV-python库和OpenCV都用于图像处理。霍夫变换(Hough Transform)可以识别图像中的线,是该算法的基础。它使我们能够识别图像中的水平线和垂直线。这个库其实没有更多的内容,因为目的是尽量保持简单,避免使用其他方法可能会出现的问题。

版权声明:本文内容由TeHub注册用户自发贡献,版权归原作者所有,TeHub社区不拥有其著作权,亦不承担相应法律责任。 如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

点赞(0)
收藏(0)
dust05
贪财好色 吃肉喝酒 做个俗人

评论(0)

添加评论