Подтвердить что ты не робот

Обработка документов

Я работаю над приложением для обработки образов документов (в основном, счетов-фактур) и в основном, я хотел бы преобразовать определенные области интереса в XML-структуру, а затем классифицировать документ на основе этих данных. В настоящее время я использую ImageJ для анализа изображения документа и Asprise/tesseract для OCR.

Теперь я ищу что-то, чтобы сделать разработку проще. В частности, я ищу что-то, чтобы автоматически сопоставить образ документа и проанализировать структуру документа (например, преобразование изображения в структуру квадрантов для упрощения обработки). Хотя я предпочитаю Java и ImageJ, меня интересуют любые библиотеки/код/​​документы, независимо от языка программирования, на котором он написан.

В то время как система, над которой я работаю, должна, насколько это возможно, автоматически обрабатывать данные, пользователь должен контролировать результаты и, при необходимости, корректировать классификацию, предложенную системой. Поэтому я заинтересован в использовании методов машинного обучения для достижения более надежных результатов. Когда подобные документы обрабатываются, например, счета-фактуры конкретной компании, ее структура обычно одинакова. Когда пользователь ранее исправил данные документов у компании, эти исправления должны быть рассмотрены в будущем. Я имею только ограниченное знание методов машинного обучения и хотел бы знать, как я мог реализовать свою идею.

4b9b3361

Ответ 1

Следующий прототип в Mathematica находит координаты блоков текста и выполняет OCR внутри каждого блока. Возможно, вам придется адаптировать значения параметров в соответствии с размерами ваших реальных изображений. Я не рассматриваю часть машинного обучения в вопросе; возможно, вам даже не понадобится это приложение.

Импортируйте изображение, создайте двоичную маску для отпечатанных деталей и увеличьте их, используя горизонтальное закрытие (расширение и эрозию).

enter image description here

Запрос для каждой ориентации блока, группировка ориентаций и определение общего вращения путем усреднения ориентации самого большого кластера.

enter image description here

Используйте предыдущий угол, чтобы выровнять изображение. В это время OCR возможно, но вы потеряете пространственную информацию для блоков текста, что сделает пост-обработку намного сложнее, чем нужно. Вместо этого найдите капли текста по горизонтальному закрытию.

enter image description here

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

enter image description here

В этот момент у вас есть список строк и их пространственные позиции. Это еще не XML, но это звучит, как хорошая отправная точка, специально предназначенная для ваших нужд.

Это код. Опять же, параметры (структурирующие элементы) морфологических функций, возможно, должны измениться в зависимости от масштаба ваших реальных изображений; также, если счет-фактура слишком наклонена, вам может потребоваться "повернуть" примерно элементы структурирования, чтобы все еще достичь хорошего "перекоса".

img = ColorConvert[[email protected]"http://www.team-bhp.com/forum/attachments/test-drives-initial-ownership-reports/490952d1296308008-laura-tsi-initial-ownership-experience-img023.jpg", "Grayscale"];
b = [email protected][img];
mask = Closing[b, BoxMatrix[{2, 20}]]
orientations = ComponentMeasurements[mask, "Orientation"];
angles = [email protected][[All, 2]]
\[Theta] = Mean[angles[[1]]]
straight = [email protected][ImageRotate[img, \[Pi] - \[Theta], Background -> 1]]
TextRecognize[straight]
boxes = Closing[straight, BoxMatrix[{1, 20}]]
comp = MorphologicalComponents[boxes];
measurements = ComponentMeasurements[{comp, straight}, {"BoundingBox", "Centroid"}];
texts = [email protected][straight, #] & /@ measurements[[All, 2, 1]];
Cases[Thread[measurements[[All, 2, 2]] -> texts], (_ -> t_) /; StringLength[t] > 0] // TableForm

Ответ 2

Бумага, которую мы используем для определения угла наклона, представляет собой: Обнаружение перекоса и определение положения линии текста в оцифрованных документах Gatos et. и др. Единственным ограничением этой статьи является то, что она может обнаруживать перекос до -5 и +5 градусов. После этого нам нужно что-то, чтобы пощекотать пользователя сообщением!:)

В вашем случае, когда есть прежде всего сканирование счета-фактуры, вы можете красиво использовать: Анализ мультирезонансов в извлечении ссылочных строк из документов с фоном на уровне серого с помощью тега и т.д. и др.

Мы написали код в MATLAB, если вам нужна помощь, дайте мне знать!

Ответ 3

Я работал над подобным проектом один раз, и за то, что я долгое время был OpenCV, я снова использовал его. OpenCV - это популярная межплатформенная компьютерная библиотека видения, которая предлагает программные интерфейсы для C и С++.

Я нашел интересный блог, в котором было сообщение как определить угол наклона текста с помощью OpenCV, а затем еще один на как разместить.

Чтобы получить текст документа и передать меньшее изображение в tesseract, я предлагаю взглянуть на ограничивающий прямоугольник.

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