Оптическое распознавание символов (OCR) — это процесс распознавания символов на изображениях с использованием компьютерного зрения и методов машинного обучения. В этом справочном приложении показано, как использовать TensorFlow Lite для распознавания текста. Он использует комбинацию модели обнаружения текста и модели распознавания текста в качестве конвейера OCR для распознавания текстовых символов.
Начать
Если вы новичок в TensorFlow Lite и работаете с Android, мы рекомендуем изучить следующий пример приложения, который поможет вам начать работу.
Если вы используете платформу, отличную от Android, или уже знакомы с API TensorFlow Lite , вы можете скачать модели с TF Hub .
Как это работает
Задачи OCR часто разбивают на 2 этапа. Во-первых, мы используем модель обнаружения текста для обнаружения ограничивающих рамок вокруг возможных текстов. Во-вторых, мы передаем обработанные ограничивающие рамки в модель распознавания текста, чтобы определить конкретные символы внутри ограничивающих рамок (нам также необходимо выполнить немаксимальное подавление, преобразование перспективы и т. д. перед распознаванием текста). В нашем случае обе модели взяты из TensorFlow Hub и являются квантованными моделями FP16.
Тесты производительности
Цифры эталонных показателей производительности генерируются с помощью описанного здесь инструмента.
Название модели | Размер модели | Устройство | Процессор | графический процессор |
---|---|---|---|---|
Обнаружение текста | 45,9 Мб | Пиксель 4 (Андроид 10) | 181,93 мс* | 89,77 мс* |
Распознавание текста | 16,8 Мб | Пиксель 4 (Андроид 10) | 338,33 мс* | Н/Д** |
* Использованы 4 нити.
** эта модель не может использовать делегат GPU, так как нам нужны операции TensorFlow для ее запуска
Входы
Модель обнаружения текста принимает в качестве входных данных четырехмерный тензор float32
(1, 320, 320, 3).
Модель распознавания текста принимает в качестве входных данных четырехмерный тензор с float32
(1, 31, 200, 1).
Выходы
Модель обнаружения текста возвращает четырехмерный тензор float32
формы (1, 80, 80, 5) в качестве ограничивающей рамки и четырехмерный тензор float32
формы (1,80, 80, 5) в качестве оценки обнаружения.
Модель распознавания текста возвращает двумерный тензор float32
формы (1, 48) в качестве индексов сопоставления со списком алфавитов «0123456789abcdefghijklmnopqrstuvwxyz».
Ограничения
Текущая модель распознавания текста обучается на синтетических данных с английскими буквами и цифрами, поэтому поддерживается только английский язык.
Модели недостаточно универсальны для оптического распознавания символов в естественных условиях (скажем, случайные изображения, снятые камерой смартфона в условиях низкой освещенности).
Поэтому мы выбрали 3 логотипа продукта Google только для того, чтобы продемонстрировать, как выполнять распознавание текста с помощью TensorFlow Lite. Если вы ищете готовый к использованию продукт OCR производственного уровня, вам следует рассмотреть Google ML Kit . Комплекта ML, в котором используется TFLite, должно быть достаточно для большинства случаев использования OCR, но в некоторых случаях вам может понадобиться создать собственное решение OCR с TFLite. Некоторые примеры:
- У вас есть собственные модели обнаружения/распознавания текста TFLite, которые вы хотели бы использовать
- У вас есть особые бизнес-требования (например, распознавание перевернутого текста), и вам необходимо настроить конвейер OCR.
- Вы хотите поддерживать языки, не поддерживаемые ML Kit
- На ваших целевых пользовательских устройствах не обязательно установлены сервисы Google Play.
использованная литература
- Пример обнаружения/распознавания текста OpenCV: https://github.com/opencv/opencv/blob/master/samples/dnn/text_detection.cpp
- Проект сообщества OCR TFLite от участников сообщества: https://github.com/tulasiram58827/ocr_tflite
- Обнаружение текста OpenCV: https://www.pyimagesearch.com/2018/08/20/opencv-text-detection-east-text-detector/
- Обнаружение текста на основе глубокого обучения с использованием OpenCV: https://learnopencv.com/deep-learning-based-text-detection-using-opencv-c-python/