Нам нравятся структурированные данные и особенно в табличном формате.

«В табличном представлении данные располагаются в столбцах и строках, а расположение данных делает понимание и понимание данных более доступными. Из его представления делаются статистические и логические выводы.

Для наших приложений определенно имеет смысл понимать этот табличный формат и использовать эти реляционные данные для создания более простых, но удобных точек данных. Затем эти точки данных помогут нам автоматизировать процесс принятия обоснованных решений.

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

Можем ли мы использовать только библиотеки с открытым исходным кодом?

На рынке довольно много библиотек с открытым исходным кодом, но наиболее распространенными из них являются OpenCV и Tesseract.

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

Несмотря на то, что OpenCV имеет множество собственных функций, в нем отсутствует ключевая часть уравнения, а именно оптическое распознавание символов (OCR). Tesseract — это довольно зрелый механизм оптического распознавания символов и библиотека, о которой мы будем говорить в этой статье. Чтобы углубиться в детали библиотеки Tesseract, нажмите здесь.

Давайте перейдем к решению.

Tesseract используется для обнаружения текста из цифрового источника. После многочисленных испытаний с рукописным текстом я пришел к выводу, что точность определения текста довольно низкая. Поэтому я хотел увидеть его эффективность в сочетании с OpenCV на отсканированном цифровом документе. Основным преимуществом использования Tesseract является возможность использования его различных параметров конфигурации, таких как режимы механизма OCR, которые могут иметь разные параметры производительности, как показано ниже.

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

Для целей этой статьи мы рассмотрим, как мы можем применить OpenCV и tesseract для примера таблицы ниже.

Сначала мы преобразуем исходное изображение таблицы в изображение в градациях серого. Это будет нашей основой для сегментации изображений. Но чтобы перейти к этому преобразованию, нам нужно выполнить некоторые операции, в которых сначала исходное изображение преобразуется в цветное изображение RGB, а затем в изображение серого цвета:

rgbImage = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
grayImage = cv2.cvtColor(rgbImage, cv2.COLOR_BGR2GRAY)

Вертикальные и горизонтальные ядра помогут обнаружить вертикальные и горизонтальные линии на изображении. Это необходимо для следующего шага — сегментации.

Морфологические операции, такие как Erosion и Dilation, помогут обнаружить линии на изображении. Другими словами, Erosion и Dilation применяют структурирующий элемент к входному изображению и генерируют выходное изображение.

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

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

Более подробную информацию о Морфологической операции можно найти здесь.

#vertical lines
img_template1 = cv2.erode(img_bin, vertical_kernel, iterations=2)
vertical_lines_image = cv2.dilate(img_template1, vertical_kernel, iterations=3)
#horizontal lines
img_template2 = cv2.erode(img_bin, horizontal_kernel, iteration=2)
horizontal_lines_image = cv2.dilate(img_template2, horizontal_kernel, iterations = 3)

Следующим шагом после преобразования изображения в оттенки серого и применения морфологических операций является использование бинарных порогов и порогов Оцу для получения бинарного изображения.

Двоичный порог — применяет одно и то же пороговое значение для каждого пикселя. Если значение пикселя меньше порогового значения, оно устанавливается равным 0, в противном случае оно устанавливается на максимальное значение.

Порог Otsu — позволяет избежать выбора значения и определяет его автоматически.

Более подробную информацию о пороговой обработке изображений можно найти здесь.

(thresh, img_bin) = cv2.threshold(grayImage, 128, 255,
                    cv2.THRESH_BINARY | cv2.THRESH_OTSU)

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

В OpenCV уже есть функция обнаружения контуров, где для большей точности входное изображение представляет собой двоичное изображение:

На этом этапе мы готовы использовать Tesseract для извлечения всей информации из ящиков.

# Cropped box with data
new_img = img[y:y + h, x:x + w]
image_tess_ocr = pytesseract.image_to_string(
new_img, config='--psm 6')
tabledata.append(CellData(x, y, image_tess_ocr.strip()))

Как вы можете видеть выше, режим конфигурации pytessarect, используемый в этом случае, равен psm=6, что означает, что Tesseract предполагает наличие единого унифицированного блока текста в каждом поле.

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

Вывод

Таким образом, OpenCV и Tesseract — отличные библиотеки с открытым исходным кодом для обнаружения и распознавания текста из отсканированных документов. Это огромная область в более широкой дисциплине машинного обучения, где ограничения и лучшие варианты использования все еще изучаются.

Что дальше?

Что, если в документе есть рукописный контент и цифровой контент?
Это другая задача, для решения этой проблемы нам потребуется больше моделей машинного обучения, чем Tesseract.
Чтобы узнать больше, следите за обновлениями в нашей публикации DataPebbles .»

Источники:
https://www.vedantu.com/commerce/tabular-presentation-of-data
https://docs.opencv.org/master/index.html
https://github.com/tesseract-ocr/tesseract