Нам нравятся структурированные данные и особенно в табличном формате.
«В табличном представлении данные располагаются в столбцах и строках, а расположение данных делает понимание и понимание данных более доступными. Из его представления делаются статистические и логические выводы.
Для наших приложений определенно имеет смысл понимать этот табличный формат и использовать эти реляционные данные для создания более простых, но удобных точек данных. Затем эти точки данных помогут нам автоматизировать процесс принятия обоснованных решений.
Повсюду в физическом мире мы окружены данными, и в большинстве случаев мы находим данные в табличном формате. Однако перевод данных из физического мира в цифровой часто является трудоемким и утомительным процессом. Поэтому я хотел бы представить простой способ автоматизации этого процесса.
Можем ли мы использовать только библиотеки с открытым исходным кодом?
На рынке довольно много библиотек с открытым исходным кодом, но наиболее распространенными из них являются 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