提取表格从图像可能是个费时费力的工作,特别是当你有大量的图像需要处理时更是如此。但是,拥有正确的工具和技术,你可以自动化这个过程,并快速准确地从图像中提取表格。
在这篇文章中,我们将探讨如何使用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_threads
是Tesseract
调用时使用的同时线程数,类型为int
类型,默认值为1
;lang
用于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)可以识别图像中的线,是该算法的基础。它使我们能够识别图像中的水平线和垂直线。这个库其实没有更多的内容,因为目的是尽量保持简单,避免使用其他方法可能会出现的问题。
评论(0)