[英]Why does pytesseract fail to recognise digits from image with darker background?
我有這個 python 代碼,我用來將寫在圖片中的文本轉換為字符串,它確實適用於某些具有大字符的圖像,但不適用於我現在正在嘗試的僅包含數字的圖像。
這是圖片:
這是我的代碼:
import pytesseract
from PIL import Image
img = Image.open('img.png')
pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files (x86)/Tesseract-OCR/tesseract'
result = pytesseract.image_to_string(img)
print (result)
為什么無法識別此特定圖像,我該如何解決此問題?
我有兩個建議。
首先,這是迄今為止最重要的,在 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 中,黑色和白色是對稱處理的,因此黑色背景上的白色數字不是問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.