从图片或PDF文件识别表格提取内容的简单库img2table

img2table是一个基于OpenCV 图像处理的用于 PDF 和图像的表识别和提取 Python库。由于其设计基于神经网络的解决方案,提供了一种实用且更轻便的替代方案,尤其是在 CPU 上使用时。

该库的特点:

  • 识别图像和PDF文件中的表格,包括在表格单元级别的边界框。

  • 通过支持OCR服务/工具(Tesseract、PaddleOCR、AWS Textract、Google Vision和Azure OCR目前支持)来提取表格内容。

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

  • 实现纠正图像的倾斜和旋转的方法。

  • 提取的表格以一个简单的对象形式返回,包括一个Pandas DataFrame表示。

  • 将提取的表格导出为Excel文件的选项,保留其原始结构。

支持的文件格式

图像

支持的图像格式,不支持多页图像。

PDF格式

支持本机和扫描的 PDF 文件。

一、安装

复制代码
pip install img2table#标准安装支持Tesseractpip install img2table[paddle]#用于Paddle OCRpip install img2table[easyocr]#用于 EasyOCRpip install img2table[gcp]#用于 Google Vision OCRpip install img2table[aws]#用于 AWS Textract OCRpip install img2table[azure]#用于 Azure 认知服务 OCR

二、使用

图像文件实例化如下:

复制代码
from img2table.document import Image
image = Image(src,detect_rotation=False)
"""说明参数src :str或bytes 或pathlib.Path或BytesIO,图片文件格式detect_rotation:bool,可选,默认False,检测并纠正图像的倾斜/旋转"""

PDF文件

​​​​​​​

复制代码
from img2table.document import PDF
pdf = PDF(src,           pages=[0, 2],          detect_rotation=False,          pdf_text_extraction=True)
"""参数说明src :  str或bytes 或pathlib.Path或BytesIO,PDF文件格式pages : 列表, 可选, 默认None。要处理的 PDF 页面索引列表。如果为 None,则处理所有页面detect_rotation:bool,可选,默认False,检测并纠正从 PDF 中提取的图像的倾斜/旋转pdf_text_extraction:bool,可选,默认True,从原生 PDF 的 PDF 文件中提取文本"""

三、OCR

img2table为多个 OCR 服务和工具提供接口,以便解析表内容。

如果可能(即对于原生 PDF),将直接从文件中提取 PDF 文本,并且不会调用 OCR 服务/工具。以Tesseract为例

复制代码
from img2table.ocr import TesseractOCR
ocr = TesseractOCR(n_threads=1,                    lang="eng",                    psm=11,                   tessdata_dir="...")

四、表提取

使用文档的方法可以从 PDF 页面/图像中一次提取多个表格。使用类方法extract_tables返回

​​​​​​​

复制代码
from img2table.ocr import TesseractOCRfrom img2table.document import Image
# Instantiation of OCRocr = TesseractOCR(n_threads=1, lang="eng")
# Instantiation of document, either an image or a PDFdoc = Image(src)
# Table extractionextracted_tables = doc.extract_tables(ocr=ocr,                                      implicit_rows=False,                                      borderless_tables=False,                                      min_confidence=50)"""参数说明ocr :OCRInstance,可选,默认None用于解析文档文本的 OCR 实例。如果为 None,则不会提取单元格内容implicit_rows:bool,可选,默认False指示是否应标识隐式行的布尔值 - 检查相关示例borderless_tables:bool,可选,默认False指示是否在有边框表的顶部提取无边框表的布尔值。min_confidence:int、可选、默认50OCR 处理文本的最低置信度,从 0(最差)到 99(最好)"""                   

​​​​​​​

复制代码
ExtractedTable 类用于对从文档中提取的表进行建模。
属性bbox:BBox,表边界框title : str,提取的表标题content : OrderedDict,以行索引为键,以对象列表为值的字典TableCelldf : pd.DataFrame,表的 Pandas DataFrame 表示形式html : str,表格的 HTML 表示形式

五、返回提取结果

图像

Image类的extract_tables方法返回ExtractedTable对象的列表。

复制代码
output = [ExtractedTable(...), ExtractedTable(...), ...]

PDF格式

PDF类的extract_tables方法返回一个OrderedDict对象,该对象将页面索引作为键和ExtractedTable对象的列表。

复制代码
output = {    0: [ExtractedTable(...), ...],    1: [],    ...    last_page: [ExtractedTable(...), ...]}

Excel 导出

从文档中提取的表格可以导出为 xlsx 文件。生成的文件由每个提取的表的一个工作表组成。

方法参数在方法中很常见。​​​​​​​

复制代码
from img2table.ocr import TesseractOCRfrom img2table.document import Image
# Instantiation of OCRocr = TesseractOCR(n_threads=1, lang="eng")
# Instantiation of document, either an image or a PDFdoc = Image(src)
# Extraction of tables and creation of a xlsx file containing tablesdoc.to_xlsx(dest=dest,            ocr=ocr,            implicit_rows=False,            borderless_tables=False,            min_confidence=50)

github:https://github.com/xavctn/img2table

相关推荐
for_ever_love__8 分钟前
容器类型全家桶——list、tuple、dict、set 与推导式
python·容器·数据类型·大模型开发
外收内放14 分钟前
Python基础语法练习题(43-44)
开发语言·python
10年前端老司机18 分钟前
LangChain 五种工具定义方式踩坑总结
python·langchain·llm
坤坤子吖18 分钟前
Python基础语法学习:列表和元组
开发语言·笔记·python·学习
可乐鸡翅yeah_23 分钟前
新手梳理:HLS 线上问题,哪些该提给 CDN,哪些该找后端切片服务
开发语言·前端·javascript·vue.js·网络协议·http·m3u8在线
zwd200523 分钟前
Manim arrange 和 arrange_in_grid 用法详解:buff、aligned_edge、rows/cols(0.21.0 实测)
前端·python·edge
外收内放35 分钟前
Python基础语法练习题(拓展2)
python·pygame
“AI国潮设计-小江”40 分钟前
《Python+SDXL实战:用ControlNet批量生成“英歌舞草莓蛋糕”IP,附自动化脚本与商用思路》
开发语言·人工智能·python·prompt·aigc
为啥全要学43 分钟前
大模型流式输出过滤敏感词
开发语言·python
小溪学编程1 小时前
C语言篇:语言结构
c语言·开发语言·算法