26.04.2024
Подписывайтесь на Telegram-канал по ссылке

Angelina Braille Reader — сервис распознавания шрифта Брайля

Angelina Braille Reader

Проект «Angelina Braille Reader» — это сервис, который позволяет с помощью смартфона или компьютера быстро прочитать рукописный или печатный текст, написанный шрифтом Брайля. Чтобы прочитать текст на Брайле, достаточно его сфотографировать и загрузить в программу. Проект разрабатывается как бесплатное ПО с открытым исходным кодом. Если вы программист и хотите помочь проекту, то можете присоединиться к нему на GitHub.

Основатель проекта Илья Оводов рассказал Берзе про историю создания проекта, какие у него есть сложности и успехи.

Расскажите подробнее, как появилась идея проекта?

Этой темой я начал заниматься весной 2019 года. Дело в том, что за год до этого мы взяли под опеку слепую девочку-сироту Анжелу. Когда стали учить её в школе, то на собственном опыте столкнулись с проблемой чтения шрифта Брайля. Причём мучились не только мы. Было видно, каких трудов стоит работа с такими текстами учительнице. Хотя она профессиональный тифлопедагог и хорошо знает шрифт Брайля, но глаза-то у неё обычные и разглядывать белые точки на белом фоне для неё так же сложно. Год промучились, а потом моя жена сказала: это же твоя профессия — распознавание изображений. Неужели тебе сложно сделать распознавание этих точек?

Разработку первой версии я не то чтобы закончил, но довёл до рабочего состояния осенью того же года. Первыми пользователями была наша семья и наши знакомые, родители слепых детей. Тогда же стало ясно, что этот сервис очень нужен. Весной 2020 года знакомая скинула мне ссылку на конкурс АСИ World AI data Challenge, где, среди прочего, была поставлена и эта задача «Распознавание азбуки Брайля». И, что очень важно, к ней прилагался массив данных. Так что удалось сервис существенно улучшить. В результате моя разработка заняла призовое 2-е место в конкурсе среди всех задач (не только Брайля). Потом АСИ пригласило выступить перед президентом России Владимиром Путиным и очень активно помогло с доведением информации о сервисе до педагогов специализированных школ для слепых.

Я думаю, что сейчас в России те, кому сервис может быть нужен, о нём знают. Признаю, что он всё же не совершенен, иногда работает очень качественно (ни одной ошибки на страницу текста), иногда значительная часть текста распознается криво. Зависит от качества фото и каких-то ещё причин. Также были (и есть) не только положительные, но и настороженные отзывы. Например, что эта техника приведёт к тому, что люди разучатся читать шрифт Брайля глазами. Впрочем, это обычная проблема для любых средств автоматизации.

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

Какие технологии используются в проекте?

Технологически там используется нейронная сеть для поиска объектов (object detection). Конкретно — проект RetinaNet. Это примерно из того же семейства, что YOLO, SSD — нахождение за один проход объектов в виде «ограничивающий прямоугольник + класс объекта». Объектами в данном случае выступают брайлевские символы. Само обучение нейросети не слишком сложное, чисто инженерная задача. Просто были адаптированы некоторые параметры. Использована реализация RetinaNet на PyTorch, весь код написан на Python. Поверх этого было сделано простое веб-приложение на Flask.

А вот что потребовало изобретательности — это создание размеченного обучающего набора данных. Дело в том, что вручную разметить брайлевские страницы в достаточном количестве (а их надо много) — это адский труд. Поэтому пришлось применить подход, развивающий идею Active Learning: итеративный подход к обучению. Потом уже я придумал, как можно на основе того же подхода сделать автоматическое обучение. Основная идея — что мы не просто ищем объекты, а полученные объекты должны быть некоторым образом семантически связаны. Поэтому мы можем оценивать результаты работы нейросети на неразмеченных данных и корректировать эти результаты. Начиная от того, что мы можем использовать очень слабую разметку (тот же текст, написанный плоским шрифтом, без привязки к конкретному положению символов), и кончая общими принципами организации текста — расположением символов по строкам для геометрической составляющей, и частотный анализ — для отбора корректных символов.

Всё это позволило сделать полноценный датасет своими руками за приемлемое время. Он выложен на GitHub. Более подробная статья о том, как всё обучалось, опубликована по ссылке. А вот статья про метод автоматического обучения на основе использованных принципов.

Первоначально всё это работало у меня дома на компьютере. Я получил выделенный IP адрес и имя angelina-reader.ru направил на него. В результате, если у меня в деревне (я живу в частном доме) выключали свет, то весь мир оставался без сервиса. Ну или, если я ещё по какой-то причине остановил компьютер. Потом помог грант, который выделил Яндекс победителям конкурса АСИ. И я перенёс сервис на Yandex Cloud. Так что исчезла необходимость держать дома компьютер включенным 24/7 и пускать на него весь мир.

Какие были и есть сложности у проекта?

У облачного сервиса есть проблема — деньги. Дело в том, что на облаке минимальная конфигурация сервиса с GPU — это Tesla V100. Аренда такого выделенного сервера стоит бешеных денег — более 100 тысяч рублей в месяц. При том, что такой сервер — это явный перебор для моей задачи. Для неё хватило бы сервера с карточкой уровня NVIDIA 2060. Или четвёртой части сервера с Tesla V100. Но таких вариантов на облачном сервисе нет. И это не проблема только Яндекса, на других облачных сервисах та же проблема: или машины только с CPU, или с топовыми GPU. Но даже на 80-ядерном CPU-сервере распознавание одной страницы занимает 15-20 секунд. А сервера с GPU прекрасны для обучения, исследовательских задач (это прекрасно, когда можно запустить столько машин, сколько нужно для эксперимента), но совершенно не рентабельны для небольшого сервиса.

Частично проблема решается тем, что можно использовать прерываемую машину, она стоит около 35 тысяч рублей в месяц. Именно по этому пути я и пошёл, иначе грант Яндекса закончился бы очень быстро. Но иногда бывает, что свободные машины кончаются и прерываемые останавливаются. Прерываемая машина отличается от выделенной тем, что работает только на свободных ресурсах облака. Если ресурсы облака требуются для выделенных машин, прерываемые останавливают и не запускают, пока не появятся свободные ресурсы. Поэтому и стоят они примерно в 4 раза дешевле. В результате было несколько случаев, когда сервис простаивал по полдня, потому что не было свободных ресурсов для прерываемой машины.

У Яндекса есть вариант машины с виртуальным GPU — 1/4 от Tesla V100 32GB. Она бы мне подошла, но там есть ограничения, из-за которых её можно использовать только для определённых проектов. Для своего проекта я не смог использовать эту машину, что очень жаль. В общем, вариантов дешёвых серверов для не очень больших интернет-проектов, в которых все же требуется GPU, рынок облачных сервисов не предлагает, насколько я знаю.

Есть ли какие-то успехи у проекта?

Проект «Angelina Braille Reader» развивается и уже есть пользователи из разных стран. Благодаря рекламе АСИ подключились пользователи из Узбекистана. По их просьбе я сделал узбекский язык. Добрые контрибьюторы на Гитхаб сделали греческий и латышский языки. Мне писали коллеги из Чехии, что используют моё решение. На днях писали из Польши, совместно с ними мы сделали распознавание на польском языке.