В данной статье представлен способ максимально быстро получить результат используя Google Colab в качестве платформы для обучения модели HTR.   OCR задачи периодически упираются в распознавание рукописного текста, когда самая важна информация в документе написана именно человеком. На момент написания статьи популярные инструменты OCR, такие как FineReader, Tesseract и EasyOCR не имеют полноценного функционала, обеспечивающего решение задачи распознавания рукописного текста – в лучшем случае, его можно видеть в описании будущих обновлений. Распознавание рукописного текста (handwritten text recognition, HTR) - это автоматический способ расшифровки записей с помощью компьютера. Оцифрованный вид рукописных записей позволило бы автоматизировать многие бизнес процессы, упростив работу человека. Отметим следующие сложности в разработке инструментов HTR, как общие, так и локальные кириллические: -        почерк каждого человека до некоторой степени уникален, более того, один и тот же человек может писать одну букву по-разному, с разными наклонами и т.д.; -        проблема «русского курсива» известна, в том числе, зарубежом - например, фраза «лишишь лилии» написанная курсивом вводит в ступор многих; -        соединения между буквами очень трудно обработать; -        свободные датасеты рукописных букв для кириллицы трудно найти. Однако, использование существующих инструментов (таких как нейросети) и свободных данных (датасетов) позволяет в кратчайшие сроки (пара часов, включая обучение модели) создать прототип инструмента HTR, обеспечивающий точность распознавания выше чем случайное предположение. К тому же, дальнейшее развитие прототипа может позволить создать действительно рабочий инструмент HTR с высокой точностью распознавания, который можно будет использовать в работе. В разработке использован подход, описанный в статье на Хабр. Суть подхода в следующем: 1.       Разбить входное изображение на отдельные символы исходя из промежутков между буквами; 2.       Классифицировать каждый отдельный символ предварительно обученной моделью. Исходя из данного подхода, возникают ограничения на входные данные, а именно – рукописный текст должен быть написан буквами без соединений. В данной статье представлен способ максимально быстро получить результат используя Google Colab в качестве платформы для обучения модели HTR. Для создания прототипа нам понадобится датасет с рукописными символами, например, CoMNIST. Загрузим его, распакуем и удалим ненужные символы: Также, нужна модель для классификации символов рукописного текста: Желательно после переустановки keras и tensorflow перезапустить среду. Данные виртуальной машины при этом останутся. Далее, функции для обучения: Функции для работы с изображениями и аугментации: Следует отметить, что изображения в датасете CoMNIST представляют собой PNG RGBA, причём, полезная информация хранится только в альфа-канале, поэтому, необходимо «прокинуть» альфа-канал на RGB: Предобработка: Обучение: У автора обучение в Google Colab на ВМ без TPU заняло ~40 минут. Далее, можно протестировать модель на примерах текста, написанных вручную, например: Далее, представлен код для разбития изображения на отдельные символы. Принцип его работы основывается на увеличении жирности отдельно стоящих (не связанных друг с другом) символов и нахождении их контуров: Демонстрация результата работы алгоритма разбиения изображения на символы: Обученная модель будет возвращать цифры – порядковые номера классов, поэтому удобно будет, например, сделать словарь для облегчения интерпретации (здесь – y_num), однако, следует помнить, что буква «Ё», по непонятной причине, не входит в основной алфавит и идёт первой. Далее, код для вывода результата: Результат работы для пары изображений: На рисунке 3 продемонстрированы результаты работы инструмента. Красным отмечены явные ошибки, жёлтым – проблемное место, о котором далее. Следует отметить, что точность распознавания удовлетворительная, однако, из-за особенностей алгоритма разбития изображения буква «Ы» представлена как два отдельных символа «Ь» и «I» и именно в таком виде подаётся модели классификации. Также, нет распознавания пробелов между словами. Таким образом, за минимальное время удалось получить прототип инструмента HTR, обеспечивающий удовлетворительное качество распознавания. Стоит добавить, что данный прототип можно сильно улучшить, например: -        сменить/расширить датасет букв используя шрифты с сервиса handwritter.ru; -        использовать методы аугментации и распознавания, описанные в статье «Первое место на AI Journey 2020 Digital Петр», в том числе, метод разбития на отдельные символы строк текста, написанных с соединениями; -        разработать и подключить алгоритм коррекции орфографических ошибок; -        использовать скрытую марковскую модель для предсказания следующего символа/слова; -        обучить модель на распознавание отдельных слов/фраз, которые можно так же сгенерировать с помощью шрифтов Handwriter. Профессиональное сообщество