Pytesseract не может прочитать текст с очень простого изображения - PullRequest
0 голосов
/ 18 января 2019

Я прочитал горы сообщений на pytesseract, но я не могу заставить его читать текст с мертвого простого изображения; Возвращает пустую строку.

Вот изображение:

TestImage

Я пытался масштабировать его, регулировать его в градациях серого и настраивать контраст, пороговое значение, размытие, все, что говорится в других сообщениях, но моя проблема в том, что я не знаю, что OCR хочет работать лучше. Это хочет размытый текст? Высокая контрастность?

Код для попытки:

import pytesseract
from PIL import Image

print pytesseract.image_to_string(Image.open(IMAGE FILE))

Как вы можете видеть в моем коде, изображение хранится локально на моем компьютере, следовательно, Image.open()

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Попытка что-то вроде

import pytesseract 
from PIL import Image 
import requests 
import io

response = requests.get('https://i.stack.imgur.com/J2ojU.png') 
text = pytesseract.image_to_string(Image.open(io.BytesIO(response.content)), lang='eng',
                    config='--psm 7')

print(text)

со значениями --psm, равными или большими 6, дали мне «Гм».

Если изображение хранится локально (и в вашем рабочем каталоге), просто отбросьте переменную response и измените определение text со строками

image_name = "J2ojU.png" # or whatever appropriate
text = pytesseract.image_to_string(Image.open(image_name), lang='eng', config='--psm 7')
0 голосов
/ 19 января 2019

Есть несколько причин:

  1. Края не острые и непрерывные (Под острым я подразумеваю гладкие, не с зубами)

  2. Изображение слишком маленькое, вам нужно изменить размер

  3. Шрифт отсутствует (не обязательно, но обученный шрифт невероятно улучшает возможность распознавания)

На основании пунктов 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

...