Оптическое распознавание символов (OCR) — это процесс распознавания символов на изображениях с использованием методов компьютерного зрения и машинного обучения. В этом справочном приложении показано, как использовать TensorFlow Lite для распознавания текста. Он использует комбинацию модели обнаружения текста и модели распознавания текста в качестве конвейера OCR для распознавания текстовых символов.
Начать
Если вы новичок в TensorFlow Lite и работаете с Android, мы рекомендуем изучить следующий пример приложения, которое поможет вам начать работу.
Если вы используете платформу, отличную от Android, или уже знакомы с API-интерфейсами TensorFlow Lite , вы можете скачать модели с TF Hub .
Как это работает
Задачи OCR часто разбиваются на два этапа. Во-первых, мы используем модель обнаружения текста для обнаружения ограничивающих рамок вокруг возможных текстов. Во-вторых, мы передаем обработанные ограничивающие рамки в модель распознавания текста, чтобы определить конкретные символы внутри ограничивающих рамок (нам также необходимо выполнить немаксимальное подавление, преобразование перспективы и т. д. перед распознаванием текста). В нашем случае обе модели взяты из TensorFlow Hub и являются квантованными моделями FP16.
Тесты производительности
Показатели производительности генерируются с помощью инструмента, описанного здесь .
Название модели | Размер модели | Устройство | Процессор | графический процессор |
---|---|---|---|---|
Обнаружение текста | 45,9 Мб | Пиксель 4 (Андроид 10) | 181,93 мс* | 89,77 мс* |
Распознавание текста | 16,8 Мб | Пиксель 4 (Андроид 10) | 338,33 мс* | Н/Д** |
* Использовано 4 нити.
** эта модель не может использовать делегат графического процессора, поскольку для ее запуска нам нужны операции TensorFlow.
Входы
Модель обнаружения текста принимает в качестве входных данных четырехмерный тензор float32
со значениями (1, 320, 320, 3).
Модель распознавания текста принимает в качестве входных данных 4-D тензор float32
со значениями (1, 31, 200, 1).
Выходы
Модель обнаружения текста возвращает 4-D тензор float32
формы (1, 80, 80, 5) в качестве ограничивающей рамки и 4-D тензор float32
формы (1,80, 80, 5) в качестве оценки обнаружения.
Модель распознавания текста возвращает двумерный тензор float32
формы (1, 48) в качестве индексов сопоставления со списком алфавитов «0123456789abcdefghijklmnopqrstuvwxyz».
Ограничения
Текущая модель распознавания текста обучается с использованием синтетических данных с английскими буквами и цифрами, поэтому поддерживается только английский язык.
Модели недостаточно универсальны для оптического распознавания символов в реальных условиях (скажем, случайные изображения, сделанные камерой смартфона в условиях низкой освещенности).
Поэтому мы выбрали три логотипа продуктов Google только для того, чтобы продемонстрировать, как выполнять распознавание текста с помощью TensorFlow Lite. Если вы ищете готовый к использованию продукт оптического распознавания символов промышленного уровня, вам следует рассмотреть Google ML Kit . Комплекта ML, в котором используется TFLite, должно быть достаточно для большинства случаев использования OCR, но в некоторых случаях вы можете захотеть создать собственное решение OCR с помощью TFLite. Некоторые примеры:
- У вас есть собственные модели TFLite для обнаружения/распознавания текста, которые вы хотели бы использовать.
- У вас есть особые бизнес-требования (например, распознавание перевернутых текстов) и вам необходимо настроить конвейер оптического распознавания символов.
- Вы хотите поддерживать языки, не поддерживаемые 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/