Получение ошибки при использовании метода image_to_osd с pytesseract

Вот мой код:

import pytesseract
import cv2
from PIL import Image

pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files (x86)\Tesseract-OCR\tesseract.exe"


def main():
    original = cv2.imread('D_Testing.png', 0)
    # binary thresh it at value 100. It is now a black and white image
    ret, original = cv2.threshold(original, 100, 255, cv2.THRESH_BINARY)
    text = pytesseract.image_to_string(original, config='--psm 10')
    print(text)
    print(pytesseract.image_to_osd(Image.open('D_Testing.png')))


if __name__ == "__main__":
    main()

Для первого выхода я получаю то, что мне нужно, это буква D

D

Что и задумано, но когда он пытается выполнить второй оператор печати, он выплевывает это.

Traceback (most recent call last):
  File "C:/Users/Me/Documents/Python/OpenCV/OpenCV_WokringTest/PytesseractAttempt.py", line 18, in <module>
    main()
  File "C:/Users/Me/Documents/Python/OpenCV/OpenCV_WokringTest/PytesseractAttempt.py", line 14, in main
    print(pytesseract.image_to_osd(Image.open('D_Testing.png')))
  File "C:\Users\Me\Documents\Python\OpenCV\OpenCV_WokringTest\venv\lib\site-packages\pytesseract\pytesseract.py", line 402, in image_to_osd
    }[output_type]()
  File "C:\Users\Me\Documents\Python\OpenCV\OpenCV_WokringTest\venv\lib\site-packages\pytesseract\pytesseract.py", line 401, in <lambda>
    Output.STRING: lambda: run_and_get_output(*args),
  File "C:\Users\Me\Documents\Python\OpenCV\OpenCV_WokringTest\venv\lib\site-packages\pytesseract\pytesseract.py", line 218, in run_and_get_output
    run_tesseract(**kwargs)
  File "C:\Users\Me\Documents\Python\OpenCV\OpenCV_WokringTest\venv\lib\site-packages\pytesseract\pytesseract.py", line 194, in run_tesseract
    raise TesseractError(status_code, get_errors(error_string))
pytesseract.pytesseract.TesseractError: (1, 'Tesseract Open Source OCR Engine v4.0.0.20181030 with Leptonica Warning: Invalid resolution 0 dpi. Using 70 instead. Too few characters. Skipping this page Warning. Invalid resolution 0 dpi. Using 70 instead. Too few characters. Skipping this page Error during processing.'). 

Я не уверен что делать. Я не могу найти слишком много информации об этой ошибке в Интернете. Также я не уверен, что делать. Цель состоит в том, чтобы он просто выплюнул ориентацию моего письма. Заранее благодарим за полезные комментарии!


person Bob Stoops    schedule 04.01.2019    source источник
comment
А что, если передать препроцессированный original image_to_osd?   -  person Dmitrii Z.    schedule 05.01.2019
comment
Это изображение, через которое я прохожу   -  person Bob Stoops    schedule 06.01.2019
comment
Хорошо, а что, если вместо необработанного изображения (Image.open('D_Testing.png'))) вы передадите предварительно обработанное (original ) в image_to_osd?   -  person Dmitrii Z.    schedule 06.01.2019
comment
К сожалению, все еще не работает   -  person Bob Stoops    schedule 07.01.2019
comment
Это потому, что он не может извлечь информацию о точках на дюйм из вашего изображения. github.com/tesseract-ocr/tesseract/issues/1702   -  person alyssaeliyah    schedule 19.06.2019
comment
Возникла аналогичная проблема и решила ее, передав --dpi в config в функции pytesseract. image = Image.open(path) config_str = '--dpi ' + str(image.info['dpi'][0]) text = pytesseract.image_to_string(image , config=config_str)   -  person mbauer    schedule 23.01.2020


Ответы (1)


Одного символа слишком мало, чтобы функция OSD могла надежно определять сценарий и ориентацию. Есть параметр min_characters_to_try, который управляет отсечкой. По умолчанию это 50. Таким образом, ваше изображение должно содержать не менее 50 символов для правильной работы OSD.

> $ tesseract --print-parameters | fgrep characters ...
> min_characters_to_try 50  Specify minimum characters to try during OSD
person Dilshat    schedule 27.01.2020