Pytesseract 无法读取简单的数字

Pytesseract can't read simple numbers

我正在尝试使用 pytesseract 读取此数字: 并且当我这样做时打印出 IL:

import pytesseract
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract'
text = pytesseract.image_to_string(Image.open("Number.jpg"))
print(text)

我也尝试过将图像转换为黑色或白色: 但这也没有用。我做错了什么?

我认为您错过了将 pytesseract' 页面分段模式 (psm) 配置设置为 7,它将图像视为单个文本行。 ()

我也应用了阈值,我的结果:

当我将 psm 设置为 7

txt = pytesseract.image_to_string(thr, config="--psm 7 digits")
print(txt)

结果:

14

代码:


import cv2
import pytesseract

img = cv2.imread("d3njD.jpg")
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thr = cv2.adaptiveThreshold(gry, 255, cv2.ADAPTIVE_THRESH_MEAN_C,
                            cv2.THRESH_BINARY_INV, 11, 4)
txt = pytesseract.image_to_string(thr, config="--psm 7 digits")
print(txt)
cv2.imshow("thr", thr)
cv2.waitKey(0)

请注意,对于其他图像,此解决方案可能无效。您可能需要额外的图像处理方法,或者您需要更改参数。

  • pytesseract 版本:4.1.1

pytesseract 效果最佳,并提供白底黑字的准确输出。预处理是获得准确结果的主要部分。但在您的情况下,一个简单的逆二进制阈值处理足以获得正确的输出,因为您的图像根本不包含任何噪声。只有在光线不均匀的情况下才应使用自适应阈值。

>>> image = cv2.imread("14.jpg",0)
>>> thresh = cv2.threshold(image,0,255,cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
>>> data = pytesseract.image_to_string(thresh,config= '--psm 6 digits')
>>> data
'14'

我认为tesseract的版本不会造成任何问题。

Tesseract 版本 tesseract v5.0.0-alpha.20200223 pytesseract 版本 pytesseract Version: 0.3.4