
Хотя 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
Мобильная версия