pytesseract无法识别图像中的数字

时间:2019-05-05 17:56:09

标签: python python-3.x ocr python-tesseract

我有此python代码,可用于将写在图片中的文本转换为字符串,它确实适用于某些字符较大的图像,但不适用于我现在尝试的仅包含数字的图像

有我的代码:

$ git remote -v
https://github.com/varun9797/BetterWorldUI.git/

$ git remote remove origin

$ git remote add origin https://username@github.com/varun9797/BetterWorldUI.git/

为什么无法识别此特定图像,我该如何解决此问题?谢谢。

有图片:

enter image description here

1 个答案:

答案 0 :(得分:6)

我有两个建议。

首先,这是迄今为止最重要的,在OCR预处理中,图像是获得良好结果的关键。对于您的情况,我建议进行二值化。您的图像看起来非常好,因此您应该不会有任何问题,但是如果这样做,那么也许应该尝试对图像进行二值化:

import cv2
from PIL import Image

img = cv2.imread('gradient.png')
# If your image is not already grayscale :
# img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
threshold = 180 # to be determined
_, img_binarized = cv2.threshold(img, threshold, 255, cv2.THRESH_BINARY)
pil_img = Image.fromarray(img_binarized)

然后使用二进制图像再次尝试ocr。

检查图像是否为灰度图像,并在需要时取消注释。

这是简单的阈值处理。自适应阈值处理也存在,但是它很嘈杂,不会给您带来任何影响。

二元化的图像将更易于Tesseract处理。这已经在内部完成(https://github.com/tesseract-ocr/tesseract/wiki/ImproveQuality),但有时可能会弄乱事情,并且经常需要进行自己的预处理。

您可以通过查看图像来检查阈值是否正确:

import matplotlib.pyplot as plt
plt.imshow(img, cmap='gray')
plt.imshow(img_binarized, cmap='gray')

第二,如果我上面所说的仍然不起作用,我知道这不会回答“为什么pytesseract在这里不起作用”,但我建议您尝试使用tesserocr。它是Tesseract的维护的python包装器。

您可以尝试:

import tesserocr
text_from_ocr = tesserocr.image_to_text(pil_img)

这是来自pypi的tesserocr的文档:https://pypi.org/project/tesserocr/

对于opencv:https://pypi.org/project/opencv-python/

作为旁注,在Tesseract中对黑白进行了对称处理,因此在黑色背景上具有白色数字并不是问题。