Как улучшить возможности Tesseract Automati c вращения текста для распознавания текста? - PullRequest
0 голосов
/ 27 мая 2020

У меня есть набор изображений PIL, где некоторые страницы повернуты правильно, а другие имеют поворот, близкий к 180 °. Это означает, что автоматическое определение ориентации c может не работать, поскольку вместо 178 ° градусов распознается ориентация 2 °.

К сожалению, Tesseract иногда не может понять разницу между ориентацией 2 ° и 178 °, поэтому в последнем В этом случае вывод полностью неверен.

Простой im.rotate(180) автоматически исправляет это, но шаг выполняется вручную, и я хотел бы, чтобы tesseract автоматически понимал, перевернут текст или нет. Рассматривая некоторые подходы, они требуют преобразования Хафа для понимания преобладающей ориентации в документе. В этом случае, однако, они могут выйти из строя из-за особой ориентации этих отсканированных документов.

Какие опции для автоматического c вращения доступны, без использования сторонних скриптов, но оставаясь в пределах Python библиотеки?

1 Ответ

1 голос
/ 08 июля 2020

Я новичок в StackOverflow, поэтому, пожалуйста, простите меня за любые заблуждения или неправильные ответы. В случае, если кто-то все еще ищет ответ, функция pytesseract image_to_osd дает информацию об ориентации. Он определяет только ориентацию как 0 °, 90 °, 180 ° или 270 °, то есть точно определяет ориентацию, если текст выровнен по осям. Но он также выводит любой из этих четырех углов даже для другой ориентации.

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

вот код в python:

while True:
    osd_rotated_image = pytesseract.image_to_osd(image)

    # using regex we search for the angle(in string format) of the text
    angle_rotated_image = re.search('(?<=Rotate: )\d+', osd_rotated_image).group(0)

    if (angle_rotated_image == '0'):
        image = image
        # break the loop once we get the correctly deskewed image
        break
    elif (angle_rotated_image == '90'):
        image = rotate(image,90,(255,255,255)) # rotate(image,angle,background_color)
        continue
    elif (angle_rotated_image == '180'):
        image = rotate(image,180,(255,255,255))
        continue
    elif (angle_rotated_image == '270'):
        image = rotate(image,90,(255,255,255))
        continue    

И для выравнивания текста Deskew python библиотека на мой взгляд лучшая.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...