使用 Pytesseract OCR 识别表格图像中的特定数字

Posted

技术标签:

【中文标题】使用 Pytesseract OCR 识别表格图像中的特定数字【英文标题】:Recognize specific numbers from table image with Pytesseract OCR 【发布时间】:2020-05-18 07:09:48 【问题描述】:

我想从附加图像(png 文件)中读取一列数字。

我的代码是

import cv2
import pytesseract
import os

img = cv2.imread(os.path.join(image_path, image_name), 0)
config= "-c 
        tessedit_char_whitelist=01234567890.:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

pytesseract.image_to_string(img, config=config)

这段代码给了我输出字符串:'n113\nun\n1.08'。我们可以看到,有两个问题:

    1.13 无法识别小数点(见附图)。 它完全无法读取 1.11(见附图)。它只是返回“修女”。

解决这些问题的方法是什么?

最佳

【问题讨论】:

【参考方案1】:

您需要对图像进行预处理。一个简单的方法是调整图像大小,转换为灰度,并使用 Otsu 的阈值获得二值图像。从这里我们可以应用轻微的高斯模糊,然后反转图像,以便提取的所需文本为白色,背景为黑色。这是准备好进行 OCR 处理的图像

OCR 的结果

1.13
1.11
1.08

代码

import cv2
import pytesseract
import imutils

pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

# Resize, grayscale, Otsu's threshold
image = cv2.imread('1.png')
image = imutils.resize(image, width=400)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

# Blur and perform text extraction
thresh = 255 - cv2.GaussianBlur(thresh, (5,5), 0)
data = pytesseract.image_to_string(thresh, lang='eng',config='--psm 6')
print(data)

cv2.imshow('thresh', thresh)
cv2.waitKey()

【讨论】:

只是想知道 (1) 为什么您必须调整图像的大小以使宽度 = 400? (2) 为什么你将 GaussianBlur 中的 ksize 参数设置为 (5, 5)? 图像被放大以帮助OCR处理,您放大图像的量是任意的。高斯模糊内核设置为(5,5),以帮助平滑图像并在阈值化之前去除微小的点。它只是一个典型的内核大小。其他可以使用的尺寸是 (3,3)(7,7),具体取决于图像和存在的噪声量

以上是关于使用 Pytesseract OCR 识别表格图像中的特定数字的主要内容,如果未能解决你的问题,请参考以下文章

自动化拦路虎之验证码OCR图像识别技术大揭秘(视频教程+安装包)

基于 OpenCV 的表格文本内容提取

使用Pytesseract+Tesseract-OCR识别图片的简单步骤

ubuntu 安装 pytesseract 模块进行图片内容识别

Python有啥好的库可以识别验证码

技术分享python验证码识别