Обнаруживать только горизонтальный текст с Tesseract

У меня есть изображение с горизонтальным и вертикальным текстом. И я обнаруживаю текст с помощью tesseract OCR. А вот массив, который возвращает тессеракт

'text': ['', '', '', '', 'Some', 'other', 'text', 'horizontal', '', '', '', 'JEDIY9A', ']xO]', 'WOPUeI', 'BWOS', 'SI', 'SIUL']

Как видите, он правильно определяет только горизонтальный текст. Так есть ли способ заставить tesseract обнаруживать только горизонтальный текст? Позже я поверну изображение на 90 и снова передам изображение для обнаружения вертикального текста (который теперь стал горизонтальным).

Или есть простое решение?

Изображение с горизонтальным и вертикальным текстом


person Usama    schedule 26.12.2020    source источник


Ответы (2)


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

Page segmentation modes:
  0    Orientation and script detection (OSD) only.
  1    Automatic page segmentation with OSD.
  2    Automatic page segmentation, but no OSD, or OCR.
  3    Fully automatic page segmentation, but no OSD. (Default)
  4    Assume a single column of text of variable sizes.
  5    Assume a single uniform block of vertically aligned text.
  6    Assume a single uniform block of text.
  7    Treat the image as a single text line.
  8    Treat the image as a single word.
  9    Treat the image as a single word in a circle.
 10    Treat the image as a single character.
 11    Sparse text. Find as much text as possible in no particular order.
 12    Sparse text with OSD.
 13    Raw line. Treat the image as a single text line,
                        bypassing hacks that are Tesseract-specific.

попробуйте --psm 6 или 12

или вы можете попробовать этот ответ, вот решение, которое может сработать для вас Как определить вертикальный текст с помощью OpenCV для извлечения

person Sachin Rajput    schedule 26.12.2020
comment
Сообщите мне, если у вас все еще есть проблемы - person Sachin Rajput; 26.12.2020
comment
Для psm 6 и 12 он по-прежнему возвращает массив обнаруженных текстов, подобных тем, которые я опубликовал в вопросе. - person Usama; 27.12.2020

pytesseract не зависит от вращения. Поэтому вам необходимо выполнить дополнительную предварительную обработку, чтобы прочитать вертикальный текст.

Например: поворот текста на 90 градусов по часовой стрелке.

img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)

Когда ты читаешь

print(pytesseract.image_to_string(gry).split("\n")[0])

Результат:

This is some random text vertical

Итак, как вы можете читать оба текста одновременно?

  • Сначала прочтите горизонтальный текст

    • import cv2
      import pytesseract
      
      img = cv2.imread("7IIrb.jpg")
      gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
      txt = pytesseract.image_to_string(gry).split("\n")[0]
      print(txt)
      
    • Затем поверните изображение на 90 градусов по часовой стрелке.

      • gry = cv2.rotate(gry, cv2.ROTATE_90_CLOCKWISE)
        txt = pytesseract.image_to_string(gry).split("\n")[0]
        print(txt)
        
    • Результат:

      Some other text horizontal
      This is some random text vertical
      

Код:


import cv2
import pytesseract

img = cv2.imread("7IIrb.jpg")
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
txt = pytesseract.image_to_string(gry).split("\n")[0]
print(txt)
gry = cv2.rotate(gry, cv2.ROTATE_90_CLOCKWISE)
txt = pytesseract.image_to_string(gry).split("\n")[0]
print(txt)
person Ahx    schedule 27.12.2020
comment
Но если у вас есть большое изображение с несколькими строками текста, этот метод не сработает. - person Usama; 27.12.2020
comment
Вы пробовали? Или вы делаете предположение? - person Ahx; 27.12.2020
comment
Да, я пробовал. - person Usama; 27.12.2020
comment
опубликуйте это в вопросе, чтобы я мог посмотреть - person Ahx; 27.12.2020
comment
Попробуйте свой код с этим изображением - person Usama; 27.12.2020
comment
Не существует универсального шаблона для решения проблем ocr. Это изображение отличается от текущего изображения. Поэтому вам необходимо изменить код и решить эту проблему. - person Ahx; 27.12.2020