繁体   English   中英

如何使用 Pytesseract 文本识别提高 OCR?

[英]How to improve OCR with Pytesseract text recognition?

嗨,我希望通过 pytesseract 提高我在数字识别方面的表现。

我将原始图像分成如下所示的部分:

图片1

大小可以变化。

为此,我应用了一些像这样的预处理方法

image = cv2.imread(im, cv2.IMREAD_GRAYSCALE)
image = cv2.GaussianBlur(image, (1, 1), 0)
kernel = np.ones((5, 5), np.uint8)
result_img = cv2.blur(img, (2, 2), 0)
result_img = cv2.dilate(result_img, kernel, iterations=1)
result_img = cv2.erode(result_img, kernel, iterations=1)

我明白了

图片2

然后我将其传递给 pytesseract:

num = pytesseract.image_to_string(result_img, lang='eng',
                                     config='--psm 10 --oem 3 -c tessedit_char_whitelist=0123456789')

然而,这对我来说还不够好,而且经常弄错数字。

我正在寻找改进的方法,我试图保持这种最小化和自给自足,但如果我不清楚,请告诉我,我会详细说明。

谢谢你。

通过在执行 OCR 之前尝试预处理图像但使用了不正确的方法,您走在正确的轨道上。 没有理由扩张或侵蚀图像,因为这些操作主要用于去除小的噪声粒子。 此外,您当前的输出不是二进制图像。 它可能看起来只包含黑白像素,但它实际上是一个 3 通道 BGR 图像,这可能是您得到不正确 OCR 结果的原因。 如果您查看Tesseract 提高质量,您会注意到 Pytesseract 要执行最佳 OCR,需要对图像进行预处理,以便要检测所需文本为黑色,背景为白色 为此,我们可以执行Otsu 阈值以获得二值图像,然后将其反转,使文本位于前景中。 这将产生我们预处理的图像,我们可以将其放入image_to_string 我们使用--psm 6配置选项来假设一个统一的文本块。 查看更多设置的配置选项 结果如下:

输入图像->二进制->反转

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

Pytesseract OCR 的结果

8

代码

import cv2
import pytesseract

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

# Load image, grayscale, Otsu's threshold, invert
image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
invert = 255 - thresh

# OCR
data = pytesseract.image_to_string(invert, lang='eng', config='--psm 6')
print(data)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM