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

  1. OpenCV OCR с Tesseract
  2. Восточный текстовый детектор

OpenCV OCR с Tesseract

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

Методы предварительной обработки

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

  1. Устранение перекоса - когда документ не выровнен должным образом при сканировании, может потребоваться наклонить его на несколько градусов по часовой стрелке или против часовой стрелки. Чтобы сделать его идеально горизонтальным или вертикальным.
  2. Despeckle - удаление положительных и отрицательных пятен, сглаживание краев.
  3. Бинаризация - преобразование изображения из цветного или в оттенках серого в черно-белое (так называемое двоичное изображение, потому что существует два цвета). Задача бинаризации выполняется как простой способ отделения текста (или любого другого желаемого компонента изображения) от фона.

4. Удаление строки - удаляет не-глифовые поля и линии.

5. Анализ макета или зонирование - определяет столбцы, абзацы, заголовки и т. Д. Как отдельные блоки.

6. Обнаружение линий и слов - устанавливает базовую линию для форм слов и символов, при необходимости разделяет слова.

7. Изоляция символов или «сегментация» - для посимвольного распознавания символов несколько символов, связанных из-за артефактов изображения, должны быть разделены; отдельные символы, которые разбиты на несколько частей из-за артефактов, должны быть соединены.

8. Нормализовать соотношение сторон и масштаб.

Распознавание персонажей

Существует два основных типа основного алгоритма OCR, который может создавать ранжированный список символов-кандидатов.

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

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

Постобработка

Точность распознавания текста можно повысить, если вывод ограничен лексикой - списком слов, которые могут встречаться в документе. [Здесь] Это могут быть, например, все слова английского языка или более технический лексикон для конкретной области. Этот метод может быть проблематичным, если документ содержит слова, которых нет в лексиконе, Tesseract использует свой словарь, чтобы влиять на шаг сегментации символов, для повышения точности. Знание грамматики сканируемого языка также может помочь определить, может ли слово быть глагол или существительное, например, для большей точности. Алгоритм Расстояние Левенштейна также использовался в постобработке OCR для дальнейшей оптимизации результатов OCR API.

Реализация кода Python

Сначала мы выполним обнаружение текста с использованием модели глубокого обучения EAST. С ее помощью мы сможем обнаруживать и локализовать координаты ограничивающего прямоугольника текста, содержащегося в изображении. Мы возьмем эти области и применим OCR для распознавания символа с помощью OpenCV и Tessaract. .

Установите Opencv 3.4.2 или последнюю версию. Загрузите и установите нужную / желаемую версию OpenCV и OpenCV-contrib в процессе. Установите tesseract 4 в вашу систему Ubuntu.

sudo add-apt-repository ppa:alex-p/tesseract-ocr
sudo apt-get update
sudo apt install tesseract-ocr

Используйте pip для установки Pillow, более удобной для Python версии PIL, за которой следуют pytesseract и imutils:

pip install pillow
pip install pytesseract
pip install imutils

Конвейер Opencv OCR

Обнаружение наличия текста на изображении. Детектор текста EAST выдаст нам координаты (x, y) ограничивающей рамки текстовых областей интереса.

Вы можете увидеть доступные режимы движка OCR, выполнив следующую команду:

$ tesseract — help-oem
OCR Engine modes:
0 Legacy engine only.
1 Neural nets LSTM engine only.
2 Legacy + LSTM engines.
3 Default, based on what is available.

При вызове двоичного файла tesseract нам необходимо указать несколько флагов. Три самых важных: -l, - oem и - psm. Флаг -l управляет языком вводимого текста. В этом примере мы будем использовать (английский). Аргумент - oem или Режим OCR Engine, контролирует тип алгоритма, используемого Tesseract. Мы будем использовать - OEM 1, чтобы указать, что мы хотим использовать только механизм глубокого обучения LSTM.

Последний важный флаг, - psm, управляет автоматическим режимом сегментации страниц, используемым Tesseract. Я обнаружил, что для РИ текста OCR используются эти режимы 6 и 7 работают хорошо, но если вы распаковываете большие блоки текста, вы можете попробовать 3, режим по умолчанию.

Структура каталога проекта

Наши файлы проекта имеют следующую структуру.

  • images /: каталог, содержащий тестовые изображения, содержащие текст сцены.
  • frozen_east_text_detection.pb: детектор текста EAST. Этот CNN предварительно обучен для обнаружения текста.
  • text_recognition.py: сценарий Python для использования детектора текста EAST для поиска областей текста на изображении, а затем использует Tesseract для распознавания.
  1. Функция decode_predictions использует функцию глубокого обучения, которая использует детектор текста на основе глубокого обучения для обнаружения (не распознавания) областей текста в изображении.
  2. Детектор текста создает два массива, один из которых содержит вероятность данной области, содержащей текст, а другой отображает оценку в ограничивающую рамку на входном изображении.
  • rects: это значение основано на геометрии и имеет более компактную форму, поэтому мы можем позже применить NMS.
  • уверенность: значения достоверности в этом списке соответствуют каждому прямоугольнику в прямоугольниках.

Нашему сценарию требуется два аргумента командной строки:

  • - image: путь к входному изображению.
  • - east: путь к предварительно обученному детектору текста EAST.

для дополнительных опций,

  • - минимальная достоверность: минимальная вероятность обнаруженной текстовой области.
  • - width: ширина нашего изображения будет изменена перед прохождением через детектор текста EAST. Нашему детектору требуется число, кратное 32.
  • - высота: такая же, как ширина, но для высоты. Опять же, нашему детектору требуется кратное 32 для изменения высоты.
  • - padding: (необязательно) количество отступов, добавляемых к каждой границе области интереса. Вы можете попробовать значения 0,05 для 5% или 0,10 для 10% (и так далее), если обнаружите, что результат распознавания неверен.
  • Создайте blob-объект и пройдите через нейронную сеть, получив оценки и геометрию, и расшифруйте прогнозы.
  • Примените подавление не максимальных значений с помощью метода imutils, он эффективно берет наиболее вероятные текстовые области, устраняя другие перекрывающиеся области.

Запустить скрипт

Используйте команду ниже для запуска скрипта.

python text_recognition.py — east frozen_east_text_detection.pb \
 — image images/img_01.jpg

Ссылка



Удачного обучения… 😄