Распознавание рукописного текста
В данном проекте создано web-приложение, которое распознает рукописный текст на кириллице или латинице. Приложение использует созданную и обученную в рамках проекта сверточно рекуррентную нейронную сеть с 7 298 263 параметрами по алгоритму CTC (Connectionist Temporal Classification). Проект является исследовательским масштабируемым прототипом. В настоящее время в нем не используется декодирование beamsearch (wordbeamsearch) с использованием словарей для коррекции текста при распознавании.
Данные для обучения взяты из открытых источников:
1) Handwritten Kazakh and Russian (HKR) database for text recognition (набор данных не содержит изображений рукописных цифр)
2) IAM Words
Здесь можно посмотреть работу Web-приложения данного проекта (скорость работы приложения невелика, т.к.приложение развернуто на собственном “домашнем” сервере).
Проект создан без коммерческой выгоды. Он не содержит в себе затрат каких-либо материальных средств кроме затрат на потребляемую нетбуком электроэнергию и личного времени разработчика. Проект носит исследовательский характер и не преследует цель разработки готового программного продукта. Он был создан для тренировки навыков программирования, методов обработки и аугментации данных, создания и исследования различных моделей нейронных сетей глубокого обучения, проверки некоторых инструментов и платформ разработки ПО в области ИИ.
Проект включает в себя следующее.
1. Создание обучающих датасетов на латинице и кириллице из упомянутых выше источников. Сначала аннотированные базы изображений рукописного текста были разделены на тестовую часть и тренировочно-валидационную. Из тренировочно-валидационной части слов и словосочетаний при помощи аугментации были созданы по 4-6 дополнительных варианта каждого изображения с измененными яркостью/контрастностью и проекционными искажениями. Затем все изображения были перемешаны и объединены в изображения предложений по 3-10 объектов (слов, словосочетаний или символов) в каждом предложении с добавлением пробелов между объектами. В результате получились два набора данных для обучения, содержащие порядка 350000 аннотированных изображений на кириллице и латинице каждый.
2. Создание и обучение модели нейронной сети с архитектурой CNN-RNN. Создание и обучение проводилось в бесплатной версии Google Colab с использованием TPU + 35 Gb RAM (лайфхак), либо GPU T4 15Gb VRAM + 12 GB ОЗУ. На тестовом датасете средняя edit distance порядка 3,5 на, в среднем, 36,5 символов.
3. Созданы фронтэнд и бэкенд вэб-приложения, которое впоследствиии развернуто на хостинге. Фронтенд включает в себя код, написанный GPT-3.5 и GPT-4. Бэкенд содержит следующие модули:
1) код серверной части вэб-приложения;
2) модуль детектирования текста «craft text detector»;
3) модуль сортировки детектированных текстовых изображений;
4) модуль преобразования изображения в серо-белое с нахождением оптимального порога и удаления «шума»;
5) модуль изменения толщины текстовых линий перед выполнением подгонки размеров текстовых изображений;
6) модуль подгонки размеров текстовых изображений под заданный размер на входе в нейронную сеть;
7) обученные модели для распознавания рукописного текста, написанного на кириллице и латинице;
8) модуль сборки распознанных текстовых изображений в файл текста.
Принцип работы приложения
Вэб-приложение позволяет загрузить готовое изображение или сфотографировать рукописный текст. Далее приложение предлагает выделить на изображении область с рукописным текстом. В случае прекционных искажений текста для их устранения приложение выполняет четырехточечное преобразование перспективы, придавая изображению вид сканированного документа. Затем преобразованное изображение текста предлагается распознать. Результат распознавания, который можно скачать в виде текстового файла, выводится в окно приложения.
Внешний вид приложения
Список информационных источников
- Николенко С., Кадурин А., Архангельская Е.- Глубокое обучение (Библиотека программиста) - 2018 г.
- Рашка С., Мирджалили В. - Puthon и машинное обучение. 3-е издание - 2020 г.
- Hannun - “Sequence Modeling with CTC”, Distill, 2017 - Статья
- Keras - документация
- Keras.Handwriting recognition - пример архитектуры нейронной сети на Keras
- Albumentations - документация
- CyberLympha/Examples - примеры архитектур нейронных сетей
- Handwritten Kazakh and Russian (HKR) database for text recognition - набор рукописных слов на кириллице
- IAM Words - набор рукописных слов на латинице
- Craft text detector - детектор текста
- ChatGPT - генеративный предобученный трансформер
Цитаты
- @article{nurseitov2021handwritten, title={Handwritten Kazakh and Russian (HKR) database for text recognition}, author={Nurseitov, Daniyar and Bostanbekov, Kairat and Kurmankhojayev, Daniyar and Alimova, Anel and Abdallah, Abdelrahman and Tolegenov, Rassul}, journal=, pages={1–23}, year={2021}, publisher= }
- @article{Abdallah_2020, title=, volume={6}, ISSN={2313-433X}, url={http://dx.doi.org/10.3390/jimaging6120141}, DOI={10.3390/jimaging6120141}, number={12}, journal=, publisher=, author={Abdallah, Abdelrahman and Hamada, Mohamed and Nurseitov, Daniyar}, year={2020}, month=, pages={141} }
- @article{DaniyarNurseitov2020, author = {{Daniyar Nurseitov, Kairat Bostanbekov, Maksat Kanatov, Anel Alimova, Abdelrahman Abdallah}, Galymzhan Abdimanap}, doi = {10.25046/aj0505114}, file = {:D$\backslash$:/ASTESJ/ASTESJ{_}0505114.pdf:pdf}, journal = {Advances in Science, Technology and Engineering Systems Journal}, keywords = {CNN,CTC,Convolutional neural networks,RNN,Recurrent neural networks}, number = {5}, pages = {934–943}, title = {}, volume = {5}, year = {2020} }
- @article{hannun2017sequence, author = {Hannun, Awni}, title = , journal = , year = {2017}, note = {https://distill.pub/2017/ctc}, doi = {10.23915/distill.00008} }
Описание
Web-приложение по распознаванию рукописного текста с использованием глубокого обучения нейронной сети