Как вернуть правильно выровненный текст из перекошенного изображения?Python

Программы на Python
Ответить
Anonymous
 Как вернуть правильно выровненный текст из перекошенного изображения?

Сообщение Anonymous »

Я использую doctr для распознавания перекошенного изображения. Что-то вроде:
Изображение

Хотя OCR точно распознает слова, возвращаемый текст организуется по координатам перекошенного изображения. В результате, когда я пытаюсь объединить слова в связную строку, результат становится полной тарабарщиной.
Основная проблема в строках:
World War ml or the
was a global conflict Second World War (1
the world's
between two coalitions: September 1939 - 2

Вместо того, чтобы извлекать реальные линии в том виде, в каком они появляются на изображении, я думаю, требуется горизонтальное выравнивание.
Я пробовал сортировать разными способами, и используют разные параметры, но все они не оправдывают ожиданий.
Что я нашел, так это исправить искажение изображения с помощью другой библиотеки, а затем распознать результат.
< img alt="введите здесь описание изображения" src="https://i.sstatic.net/M4OyD6pB.jpg" />
И теперь я получаю правильные строки:
World War ml or the Second World War (1 September 1939 - 2 September 1945)
was a global conflict between two coalitions: the Allies and the Axis powers. Nearly all
the worid's countres--including all the great powers--particpated, with many investing
all available economic, industrial, and scientific capabilities in pursuit of total war,

Это работает, но я уверен, что должен быть способ сделать это напрямую из doctr без предварительного устранения перекоса.
Код:
def read_pdf(file_path):
model = ocr_predictor(
det_arch='db_resnet50',
reco_arch='crnn_vgg16_bn',
pretrained=True,
export_as_straight_boxes=True,
detect_orientation=True
)

doc = DocumentFile.from_pdf(file_path)
result = model(doc)

full_text = []
for page in result.pages:
page_text = []
for block in page.blocks:
for line in block.lines:
line_text = ' '.join([word.value for word in sorted(line.words, key=lambda w: w.geometry[0][0])])
page_text.append("\n" + line_text)

full_text.append(' '.join(page_text))

return ' '.join(full_text)


Подробнее здесь: https://stackoverflow.com/questions/792 ... ewed-image
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»