[英]How to improve OCR with Pytesseract text recognition?
嗨,我希望通过 pytesseract 提高我在数字识别方面的表现。
我将原始图像分成如下所示的部分:
大小可以变化。
为此,我应用了一些像这样的预处理方法
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)
我明白了
然后我将其传递给 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.