使用Python从图像中提取表格

发表于:2023-11-17 09:27

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:小R    来源:小白玩转Python

  大约一年前,我被分配任务从文件中提取和结构化数据,主要是包含在表格中的数据。我之前对计算机视觉没有了解,并且很难找到一个合适的“即插即用”的解决方案。当时可选的方案要么是基于最新神经网络(NN)的解决方案,这些解决方案庞大而繁琐,要么是基于OpenCV的较简单的解决方案,但不够一致。
  受现有OpenCV脚本的启发,我开发了一种简单而一致的方法来提取表格,并将其制作成一个开源的Python库:img2table。
  我的库有什么作用?
  与深度学习解决方案相比,这个轻量级的包不需要训练和最小化参数化。它提供了以下功能:
  ·识别图像和PDF文件中的表格,包括在表格单元级别的边界框。
  · 通过支持OCR服务/工具(Tesseract、PaddleOCR、AWS Textract、Google Vision和Azure OCR目前支持)来提取表格内容。
  · 处理复杂的表格结构,如合并单元格。
  · 实现纠正图像的倾斜和旋转的方法。
  · 提取的表格以一个简单的对象形式返回,包括一个Pandas DataFrame表示。
  · 将提取的表格导出为Excel文件的选项,保留其原始结构。
  如何使用它?
  您可以通过pip安装该库,然后就可以使用了:
  pip install img2table
  在文档中识别表格只需调用一个函数:
  from img2table.document import Image
  # Instantiation of the image
  img = Image(src="myimage.jpg")
  # Table identification
  img_tables = img.extract_tables()
  # Result of table identification
  img_tables
  [ExtractedTable(title=None, bbox=(10, 8, 745, 314),shape=(6, 3)),
   ExtractedTable(title=None, bbox=(936, 9, 1129, 111),shape=(2, 2))]
上述示例中使用的图像
  如果我们想提取表格的内容,则需要使用OCR工具,可以按如下方式实现:
  from img2table.document import PDF
  from img2table.ocr import TesseractOCR
  # Instantiation of the pdf
  pdf = PDF(src="mypdf.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)
从PDF中提取的表格示例
  最后,在简单的情况下,可以通过设置`borderless_tables`参数来执行“无边框”表格的提取。这允许检测那些单元格不需要完全被边框包围的表格。
“无边框”表格提取示例
  这就是全部!实际上,库并没有太多复杂的东西,因为目标是尽可能简化,以避免其他可用解决方案可能带来的复杂性。
  有关更详细的文档和示例,请查看项目的GitHub页面:https://github.com/xavctn/img2table
  底层实现
  所有图像处理都使用OpenCV和opencv-python库完成。然而,这仍然相当基础。
  算法的骨架是Hough变换,它能够识别图像中的线条,使我们能够检测图像的水平和垂直线条。
  cv2.HoughLinesP(img, rho, theta, threshold, None, minLinLength, maxLineGap)
  之后,对线条进行一些处理以从线条中识别单元格,然后从单元格中识别表格。
实现算法的简化表示
  大多数计算使用Polars进行,以实现良好的性能和速度。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号