Механизм OCR, который мы реализуем, разбит на два основных компонента — обнаружение текста и распознавание текста. API TFOD (Tensorflow Object Detection) будет использоваться для обнаружения текста, а EasyOCR — для распознавания текста.

Что такое ОКР?

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

OCR преобразует текст в изображении в машиночитаемый текстовый формат.

Варианты использования OCR

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

Далее мы рассмотрим реализацию механизма OCR, который включает в себя ssd_mobilenet для определения ROI (область интереса) и модель EasyOCR для распознавания текста. Полный код для этого сообщения размещен здесь в моей учетной записи Github. Пожалуйста, наслаждайтесь!

Выполнение

Мы начнем с создания и аннотирования нашего набора данных. Отличным инструментом для аннотирования нашего набора данных является labelImg.

Цель этого проекта — использовать OCR для извлечения «главы» и «названия» из учебника. Эта умеренная реализация проекта продемонстрирует функции и инновации в платформах и инструментах, которые мы собираемся использовать.

Основные программные технологии, используемые в этом проекте:

А теперь приступим!

Шаг 1 — Соберите и аннотируйте набор данных изображения

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

Я выбрал набор данных в формате PascalVOC, который позже будет преобразован в формат TFRecord, а затем загружен в конвейер обучения TFOD. Поскольку я выбрал формат PascalVOC, labelImg создал файл XML для каждого изображения. Формат файла XML показан ниже.

После этого у меня был скрипт, который разделил мой набор данных на папки «обучение/тестирование». Скрипт находится в моей учетной записи Github. Чтобы использовать его, выполните следующую команду на своем терминале в каталоге, где у вас есть скрипт и ваш набор данных в одном месте.

partition_dataset.py [-h] [-i IMAGEDIR] [-o OUTPUTDIR] [-r RATIO] [-x]

шаг 2 — Подготовьте набор данных и обучите.

Я подробно описал, как сделать этот шаг, в этой записи блога.

Я обучил свою пользовательскую модель на 2000 эпох.

Я решил обучить свой набор данных модели «SSD MobileNet V2 FPNLite». Я передал обучение (используя функции и веса уже обученных моделей, чтобы изучить особенности моего набора данных). Я переделал модель для своего варианта использования.

Шаг 3. Запустите обнаружение на обученной модели.

Полный код см. в моем репозитории GitHub.

Я обучался работе с Google Colab.

Обучение длилось 2000 эпох. Учебные контрольные точки сохранены. Эти контрольные точки являются весами и деталями модели. Контрольная точка отмечает наилучшее состояние модели по сравнению с ее предыдущим состоянием.

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

Давайте восстановим последнюю контрольную точку обученной модели. мой "CKPT-3"

ckpt = tf.compat.v2.train.Checkpoint(model=detection_model)
ckpt.restore(os.path.join(paths['CHECKPOINT_PATH'], 'ckpt-3')).expect_partial()

Теперь мы передаем изображение документа модели. Ниже я создал служебную функцию для выполнения вывода по модели.

def detect_fn(image):
    image, shapes = detection_model.preprocess(image)
    prediction_dict = detection_model.predict(image, shapes)
    detections = detection_model.postprocess(prediction_dict, shapes)
    return detections

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

detections = detect_fn(input_tensor)

шаг 4 — Передайте обнаружение в нашу модель EasyOCR

EasyOCR выполняет распознавание на 80+ языках. Его реализация основана на Pytorch.

Сначала мы устанавливаем EasyOCR в нашу рабочую среду.

!pip install easyocr

Создайте экземпляр объекта читателя.

reader = easyocr.Reader(['en'])

А потом делаем выводы.

ocr_result = reader.readtext(region)

Пожалуйста, есть небольшие шаги, выполненные между основными шагами в этом посте. Репозиторий кода содержит полный конвейер. Проверьте это!

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

EasyOCR интерпретировал результаты выходных данных моделей как «блок 6» и «иммунизация» с точностью 0,99 (99%) и 0,77(77%) соответственно.

Наблюдения

Точность модели TFOD можно значительно повысить, просто добавив в набор данных больше обучающих изображений. Мы также можем увеличить количество эпох, чтобы дать нашей модели достаточно времени, чтобы изучить больше функций из набора данных.

EasyOCR по-прежнему активен и поддерживается. Мы могли бы выжать из него больше производительности, передав ему качественные и обработанные изображения. Компонент промежуточной обработки изображения может быть добавлен к этому механизму OCR между компонентами обнаружения текста и распознавания текста.

Заключение

Оптическое распознавание символов (OCR) — технология с огромными перспективами. В результате неудивительно, что он быстро набирает обороты в отрасли!

Технология OCR лежит в основе растущей тенденции модернизации рабочих процессов.

Свяжитесь со мной

Твиттер — https://twitter.com/DNnamaka

Гитхаб — https://github.com/Nnamaka

Электронная почта — [email protected]