Как получить текст изображения с помощью Tesseract

Я получил это обрезанное изображение из своего pdf-файла:  обрезанное пятнистое изображение после преобразования PDF в JPEG

После предварительной обработки я передаю его в Tesseract OCR.

text = pytesseract.image_to_string(img, lang='eng')

Но ocr'ed text пуст.

Редактировать:

Я загружаю полное изображение и обрезаю его до этого. Как только он обрезан, я применяю к нему фильтр для повышения резкости, а затем удаляю соль и перец.

pages = convert_from_path("../data/2.pdf", fmt='JPEG',
                          poppler_path=r"D:\poppler-0.68.0\bin")

reader = easyocr.Reader(['en']) # need to run only once to load model into memory
for page in pages:

      page.save('image.jpg', 'JPEG')
      image = cv2.imread('image.jpg')
        
      img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
      img = img[cord[2]:cord[3], cord[0]:cord[1]]
      kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]])
      img = cv2.filter2D(img, -1, kernel)
      img = cv2.medianBlur(img, 3)
      text = pytesseract.image_to_string(img)

Это изображение является частью PDF. PDF конвертируется в jpg, а затем загружается снова, а затем этот раздел обрезается с указанием координат BB.

Изменить: используя приведенный ниже пример, это результат предварительной обработки:  Предварительно обработанное изображение после предложенного ответа

Но распечатанный text вывод по-прежнему выключен:

AQ@O FCI

person Fatima Arshad    schedule 27.01.2021    source источник
comment
Этот вопрос обсуждается на Meta Stack Overflow cc @GinoMempin   -  person Heretic Monkey    schedule 27.01.2021
comment
Ваш код вызовет ошибку IndentationError - так что это не то, что вы выполняете.   -  person Patrick Artner    schedule 29.01.2021
comment
Это не совсем хороший вопрос для SO. Ваш код работает - просто OCR, выполняемое tesseract, не соответствует тому, что может сделать ваш мозг - большой сюрприз. Выбор предварительной обработки сильно зависит от ввода - то, что работает для одного изображения, может или не может работать для других. Обсуждение того, что нужно сделать для предварительной обработки, - это скорее учебное пособие, чем то, что можно / нужно сделать здесь. Я предлагаю изучить методы предварительной обработки изображений - есть даже более старые сообщения, которые делают это: tesseract ocr   -  person Patrick Artner    schedule 29.01.2021
comment
Некоторые другие вопросы ocr, которые могут вам помочь: stackoverflow.com/questions/54940022/, stackoverflow.com/questions/60624019/, stackoverflow.com/questions/64099248/, stackoverflow.com/questions/9480013/, ... (Google с: ocr dilatate erode улучшить сайт: stackoverflow.com)   -  person Patrick Artner    schedule 29.01.2021
comment
Отредактировано: обратно вставлено пятнистое изображение (без этого Q не имеет смысла) и исправлена ​​ошибка IndentationError (в более ранних версиях ее не было - вероятно, вызвано редактированием)   -  person Patrick Artner    schedule 29.01.2021


Ответы (1)


У меня есть двухэтапное решение


    1. Apply Dilation followed by Erosion (Closing)
    1. Apply thresholding.

Теперь почему мы применяем дилатацию с последующей эрозией?

Как мы видим, входное изображение состоит из артефактов вокруг каждого символа. Применение операции закрытия уменьшит количество артефактов.

введите описание изображения здесь

Артефакты уменьшились, но не исчезли полностью. Поэтому, если мы применим adaptive-threshold, результат будет:

введите описание изображения здесь

Теперь изображение пригодно для чтения:

AOF CIF

Код:


import cv2
from pytesseract import image_to_string

img = cv2.imread("7UGLJ.png")
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
(h, w) = gry.shape[:2]
gry = cv2.resize(gry, (w*2, h*2))
cls = cv2.morphologyEx(gry, cv2.MORPH_CLOSE, None)
thr = cv2.adaptiveThreshold(cls, 255, cv2.ADAPTIVE_THRESH_MEAN_C,
                            cv2.THRESH_BINARY, 41, 10)
txt = image_to_string(thr)
print(txt)
person Ahx    schedule 27.01.2021
comment
Этот вопрос может быть не по теме, но как выбрать конкретные шаги обработки изображений для применения? Это удар и испытание? или узнал на собственном опыте - person Fatima Arshad; 28.01.2021
comment
Изображение более четкое, но ничего не распечатывает - person Fatima Arshad; 28.01.2021
comment
Какая у вас версия pytesseract? Может тебе стоит обновить - person Ahx; 28.01.2021
comment
Пожалуйста, обновите его до последней версии и попробуйте еще раз - person Ahx; 28.01.2021
comment
@ahx pypi.org/project/pytesseract = ›актуальная версия - 0.3.7? - person Patrick Artner; 29.01.2021
comment
@PatrickArtner Извините, я ожидал, что на выходе будет print(pytesseract.get_tesseract_version()), то есть 4.1.1. Вы правы, спасибо за предупреждение. В следующий раз я буду поосторожнее. - person Ahx; 29.01.2021