Есть несколько причин:
Края не острые и непрерывные (Под острым я подразумеваю гладкие, не с зубами)
Изображение слишком маленькое, вам нужно изменить размер
Шрифт отсутствует (не обязательно, но обученный шрифт невероятно улучшает возможность распознавания)
На основании пунктов 1) и 2) я смог распознать текст.
1) Я изменил размер изображения в 3 раза и 2) Я размыл изображение, чтобы сделать края более гладкими
import pytesseract
import cv2
import numpy as np
import urllib
import requests
pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files (x86)/Tesseract-OCR/tesseract'
from PIL import Image
def url_to_image(url):
resp = urllib.request.urlopen(url)
image = np.asarray(bytearray(resp.read()), dtype="uint8")
image = cv2.imdecode(image, cv2.IMREAD_COLOR)
return image
url = 'https://i.stack.imgur.com/J2ojU.png'
img = url_to_image(url)
retval, img = cv2.threshold(img,200,255, cv2.THRESH_BINARY)
img = cv2.resize(img,(0,0),fx=3,fy=3)
img = cv2.GaussianBlur(img,(11,11),0)
img = cv2.medianBlur(img,9)
cv2.imshow('asd',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
txt = pytesseract.image_to_string(img)
print('recognition:', txt)
>> recognition: Gm
Примечание:
Этот скрипт хорош для тестирования любого изображения в сети
Примечание 2:
Вся обработка основана на вашем изображении
Примечание 3:
Распознавание текста не так просто. Каждое признание требует специальной обработки. Если вы попытаетесь выполнить эти шаги с другим изображением, оно может вообще не работать. Важно попробовать много распознавания изображений, чтобы вы понимали, чего хочет tesseract