在 Python 中从图像中提取表格
从图像中提取表格可能是一项乏味且耗时的任务,尤其是当您有大量图像需要处理时。但是,使用正确的工具和技术,您可以自动化此过程并快速轻松地从图像中提取表格。
在本文中,我们将探讨如何使用 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 的并发线程数,默认为1
,lang
在 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 都用于所有图像处理。识别图像中的线条的霍夫变换是该算法的基础。它使我们能够识别图像的水平线和垂直线。该库实际上没有更多内容,因为其目的是使其尽可能简单,以避免使用其他方法可能出现的任何潜在复杂性。
- 点赞
- 收藏
- 关注作者
评论(0)