Python 免费超长图片表格文字提取


摘要

本文将介绍如何使用Python进行超长图片中的表格和文字的提取。我们将探讨不同的库和方法,以及表格分割,以实现高效且准确的文字识别。

引言

在数字化时代,我们经常需要从图片中提取信息,尤其是表格数据。Python提供了多种工具和库来帮助我们完成这项任务,例如Pytesseract、CnOcr、OpenCV等。本文将指导你如何使用这些工具来实现超长图片中的文字和表格提取。


正文

一、环境准备

  • Python 3.x
  • Pytesseract 库
  • CnOcr 库
  • OpenCV 库
  • Numpy 库

二、使用步骤

1.安装库

  • 安装库cv2:pip install opencv-python
  • 安装库CnOcr:
    pip install CnOcr
    pip install onnxruntime
    如果安装cnocr库报错需要下载工具VisualCppBuildTools_Full.exe,选择文件mu_visual_cpp_build_tools_2015_update_3_x64_dvd_dfd9a39c.iso,解压后,双击VisualCppBuildTools_Full.exe即可自动进行安装,安装完成后再安装cnocr库和onnxruntime库。

参考相关文章:https://blog.csdn.net/m0_66954933/article/details/132208740

2.引入库

import cv2
import pytesseract
import numpy as np
from cnocr import CnOcr

ocr = CnOcr()

3.OCR文字识别

  • cnocr 识别图片的中文
from cnocr import CnOcr
ocr = CnOcr()
text= ocr.ocr('test.png')
print('识别图片信息为:' + text)
  • pytesseract 识别图片的英文
import pytesseract
from PIL import Image
pytesseract.pytesseract.tesseract_cmd = 'E:/Tesseract-OCR/tesseract.exe'
image = Image.open('test.png')
text= pytesseract.image_to_string(image, lang='eng')#读取文字,此为默认英文
print('识别图片信息为:' + text)

参考相关文章:
https://zhuanlan.zhihu.com/p/384620684
https://zhuanlan.zhihu.com/p/448253254
https://blog.csdn.net/zengbowengood/article/details/104901596

4.完整代码

import cv2
# import pytesseract
import numpy as np
from cnocr import CnOcr

ocr = CnOcr()

# 使用python+opencv处理表格图片,按照表格进行分割,并识别分割后的子图片中的文字
def pic_2_cnocr(path_location = 'C:/Users/Administrator/Desktop/7.jpg'):
    image = cv2.imread(path_location, 1)
    # 灰度图片
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # 二值化
    binary = cv2.adaptiveThreshold(~gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 35, -5)
    # 识别横线
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (binary.shape[1] // 40, 1))
    dilatedcol = cv2.dilate(cv2.erode(binary, kernel, iterations=1), kernel, iterations=1)
    # 识别竖线
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1, binary.shape[0] // 20))
    dilatedrow = cv2.dilate(cv2.erode(binary, kernel, iterations=1), kernel, iterations=1)
    # 识别黑白图中的白色交叉点,将横纵坐标取出
    ys, xs = np.where(cv2.bitwise_and(dilatedcol, dilatedrow) > 0)

    mylisty = []  # 纵坐标
    mylistx = []  # 横坐标

    # 通过排序,获取跳变的x和y的值,说明是交点,否则交点会有好多像素值值相近,我只取相近值的最后一点
    # 这个10的跳变不是固定的,根据不同的图片会有微调,基本上为单元格表格的高度(y坐标跳变)和长度(x坐标跳变)
    myxs = np.sort(xs)
    for i in range(len(myxs) - 1):
        if (myxs[i + 1] - myxs[i] > 10):
            mylistx.append(myxs[i])
    mylistx.append(myxs[-1])  # 要将最后一个点加入

    myys = np.sort(ys)
    for i in range(len(myys) - 1):
        if (myys[i + 1] - myys[i] > 10):
            mylisty.append(myys[i])
    mylisty.append(myys[-1])  # 要将最后一个点加入

    ocr_form = list()
    ocr_forms = list()
    # 循环y坐标,x坐标分割表格
    for i in range(len(mylisty) - 1):
        for j in range(len(mylistx) - 1):
            # 在分割时,第一个参数为y坐标,第二个参数为x坐标
            ROI = image[mylisty[i]:mylisty[i + 1], mylistx[j]:mylistx[j + 1]]
            # 调用cnocr文字识别工具
            res = ocr.ocr(ROI)
            text = "".join([re['text'].replace("\n", "") for re in res])
            ocr_form.append(text)
        ocr_forms.append(ocr_form)
        ocr_form = []
    return ocr_forms

参考相关文章:https://blog.csdn.net/HXiao0805/article/details/90729541


总结

本文介绍了如何使用Python进行超长图片中的文字和表格提取。通过结合Pytesseract、CnOcr和OpenCV等库,我们可以有效地处理和分析图像数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值