В 2018 году мы взяли из детдома в семью слепую девочку Анжелу. Тогда я думал, что это чисто семейное обстоятельство, никак не связанное с моей профессией разработчика систем компьютерного зрения. Но благодаря дочери через два года появилась программа и интернет-сервис для распознавания текстов, написанных шрифтом Брайля - Angelina Braille Reader.

Сейчас этот сервис используют сотни людей и в России, и за ее пределами. Тема оказалась хайповой, сюжет о программе даже показали в федеральных новостях на ТВ. Но что важнее - за свою многолетнюю карьеру в ИТ ни в одном проекте я не получал столько искренних благодарностей от пользователей.

Ниже расскажу о том, как делалась эта разработка и с какими трудностями пришлось столкнуться. Более развернутое описание приведено в публикациях [1,2].

Возможно, кто-то захочет внести в проект свой вклад.

Лень — двигатель прогресса

Вы все видели брайлевские символы в лифте и в поликлинике. Каждая буква задана выпуклыми точками. Брайль разработал свою азбуку в 1824 году, и ничего лучше для чтения и письма с тех пор не придумали.

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

Но слепые школьники до сих пор читают и пишут на Брайле. Все как у обычных людей. Когда вы последний раз писали страницу текста от руки? А школьники делают это ежедневно, и пропустить этот этап нельзя.

Когда мы отдавали дочь в первый класс, то думали, что будет непросто выучить шрифт Брайля. Но это оказалось ерундовой задачей, не труднее, чем выучить любой незнакомый язык в объеме «алфавит в совершенстве».

А вот дальше сложнее. Дело в том, что брайлевские книги - это выдавленные на белой бумаге пупырышки ("точки"), никак не выделенные цветом. Слепые тратят год начальной школы на то, чтобы научиться их нащупывать. У нас такая чувствительность пальцев не развивается за ненадобностью, поэтому 99% брайлевских педагогов и родителей читают это глазами.

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

Фрагмент брайлевской книги с двусторонней печатью (вверху). На нижнем фото отмечены те точки, которые надо читать. Остальные точки - это текст с обратной стороны страницы, на них можете не обращать внимание (если сможете).
Фрагмент брайлевской книги с двусторонней печатью (вверху). На нижнем фото отмечены те точки, которые надо читать. Остальные точки - это текст с обратной стороны страницы, на них можете не обращать внимание (если сможете).

Рукописный брайлевский текст обычно односторонний, читать его несколько легче, но все равно непросто. В Союзе педагоги приспособились тереть работы школьников копиркой, чтобы сделать точки заметнее, но это решает проблему только отчасти.

Вставка для любопытных: как пишут брайлевским шрифтом вручную

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

За время обучения дочки в первом классе мы, оба родителя, так замучились таким чтением, что стали весьма мотивированы что-то с этим делать. Мы решили, что приспособить к чтению Брайля компьютер - намного более полезное занятие для папы в свободное время, чем решать конкурсы на Каггле. Потом оказалось, что это нужно не только моей семье, а буквально всем, кто работает со слепыми.

Хочешь сделать хорошо - сделай сам

Разумеется, я был не первым человеком, который занялся компьютерным распознаванием шрифта Брайля на изображении. Есть даже устойчивый термин: OBR (Optical Braille Recognition). Поэтому для начала я попытался найти готовое решение. Напрасно! В открытом доступе имеются только экспериментальные поделки, непригодные для практического применения. Из коммерческих разработок существует специализированный аппаратно-программный комплекс компании ЭлекЖест размером со стол. Это явно не то решение, о котором я мечтал, цену я даже не уточнял.

Система оптического распознавания Брайля от компании ЭлекЖест
Система оптического распознавания Брайля от компании ЭлекЖест

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

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

В обычном письме буквы представлены связанными линиями, а в письме по Брайлю - комбинацией от 1 до 6 точек, расположенных в узлах воображаемой сетки. Группировка точек в буквы определяется привязкой к этой сетке.

Кодирование букв латинского алфавита шрифтом Брайля
Кодирование букв латинского алфавита шрифтом Брайля

Вне привязки к сетке, образуемой всеми брайлевскими буквами в целом, точки не имеют смысла. Так, если мы видим на пустом листе бумаги букву А, то мы легко понимаем, что это буква А. Если мы видим одинокую брайлевскую точку, нельзя определить, что это такое: буква А, запятая (она обозначается единственной точкой, но в другом узле сетки) или просто дефект бумаги.

Вследствие этого, для описанных в литературе алгоритмов OBR практически стандартом оказывается следующий набор шагов (см. обзоры [3,4]):

  1. Найти брайлевские точки.

  2. Восстановить воображаемую сетку.

  3. Сопоставить найденные точки с узлами сетки.

  4. Распознать брайлевские символы.

  5. Конвертировать последовательность брайлевских символов в обычный текст.

Разные авторы используют разные методы нахождения точек и, главное, отделения точек лицевой и обратной стороны: динамический порог, детектор окружностей на основе преобразования Хафа, HOG, LBP, SVM, признаки Хаара и алгоритм Виолы-Джонса, - в общем, практически весь джентльменский набор методов классического компьютерного зрения. В более поздних работах нейросетки тоже применяют.

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

Не буду приводить подробный обзор литературы (его можно найти в [1,3,4]). Важно, что при таком подходе требуется единая на весь лист воображаемая сетка, к которой привязаны брайлевские точки. Именно поэтому страница должна быть не просто сфотографирована, а отсканирована. Только в этом случае на всем листе точки расположены на параллельных линиях сетки. На случай, если страница при сканировании покосилась, описаны методы нахождения необходимого поворота страницы в исходное положение.

Я не нашел никаких методов для компенсации перспективных искажений (а без них фотографию не сделаешь). Еще сложнее, если сфотографирован не одиночный лист, а страница раскрытой книги. Брайлевские книги толстые и плотные, полностью расправить страницу невозможно. Линии сетки превращаются в дуги. Так что по всему выходило, что для применения опубликованных методов нужен сканер, причем специальный — обычный бытовой мал.

А хотелось сделать так, чтобы достаточно было сделать фото на смартфон и - вжух! - получить расшифрованный текст. Пришлось делать самому.

У нее внутре нейронка

Когда я начинал эту работу (2019г), нейронные сети уже вовсю покоряли задачи компьютерного зрения. В литературе по распознаванию Брайля тоже говорилось об их использовании. Но весьма ограниченном, не выходя за пределы описанного выше шаблона: или для поиска точек, или для разделения точек лицевой и обратной стороны, или для распознавания отдельного символа после того, как будет восстановлена сетка и точки поделены на символы.

И это при том, что уже несколько лет как были опубликованы one step детекторы типа YOLO[5] и SSD[6], которые решали задачу поиска объектов на изображении за один шаг, совмещая одновременно несколько функций - детекции, классификации, регрессии ограничивающего прямоугольника. Можно было ожидать, что нейросеть справится одновременно с задачей поиска точек, восстановления брайлевской сетки в окрестности каждого символа и распознавания символа за один проход. Это позволяло отойти от требования наличия единой сетки для всего листа и, соответственно, обрабатывать изображения искривленных листов и изображения с небольшими перспективными искажениями.

За основу я взял RetinaNet[7] с некоторыми изменениями по сравнению с исходными настройками: с учетом того, что мы ищем символы примерно известного размера и пропорций, был изменен набор "якорей" и другие параметры.

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

Где взять данные, или Мойдодыр спешит на помощь.

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

Сделать фотографии сотни-другой страниц в разных условиях - несложно. А вот разметка... Как выглядят эти страницы, было показано на рисунке выше, трудоемкость разметки можете себе представить. Идея разметить прямоугольниками каждую букву на сотнях таких страниц совсем не вызывала энтузиазма.

В сети удалось найти единственный публично доступный подходящий датасет: DSBI, опубликованный китайскими товарищами. Он включает 114 размеченных страниц брайлевских текстов. Тексты там на китайском, но это как раз неважно (сами по себе брайлевские символы одинаковы во всех языках). Хуже то, что изображения получены с помощью сканера с идеально плоского листа (это позволило авторам упростить процедуру разметки) и очень мало отличаются друг от друга. Поэтому качественно обучить на нем нейросеть для решения поставленной задачи было невозможно. RetinaNet, обученная на этих данных, выдала на реальных фотографиях брайлевских книг более чем скромный результат — от четверти до половины правильно распознанных символов.

Лучшего я и не ждал. Однако надо же было с чего-то начать! А дальше на помощь пришел подход Active Learning[8].

Идея традиционного Active Learning состоит в том, что мы обучаем нейросеть на имеющихся данных, применяем ее к неразмеченным данным, оцениваем результат (вручную или автоматически с помощью какого-либо критерия), отбираем неразмеченные примеры, которые распознались хуже всех, размечаем их вручную и повторяем обучение на расширенной выборке. И так несколько раз. Тем самым экономятся трудозатраты на разметку тех примеров, с которыми нейросеть и так справляется. Однако в этой задаче я применил полностью противоположный подход. Дело в том, что разметить страницу, состоящую сплошь из ошибок, гораздо сложнее, чем исправить несколько ошибок там, где существенная часть текста внятно распознана.

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

Поэтому первыми русскими текстами, на которых обучалась нейронная сеть, оказались сказки про Мойдодыра, Телефон, Чудо-дерево. Мысль, что иногда автор относится к своему проекту как к собственному ребенку, заиграла новыми красками.

Когда после нескольких итераций активного обучения качество распознавания достаточно повысилось, можно было включить в обучающий набор прозаические тексты. Сопоставлять их с оригинальным текстом так же, как стихи, было уже слишком сложно, но результаты распознавания можно было преобразовать в плоский текст и проверить спелл-чекером. Большая часть ошибок распознавания при этом подсвечивается, так что разметка радикально облегчается.

Описанный подход привел к идее сделать дальнейший процесс полностью автоматическим. Есть известный метод дообучения нейросети на неразмеченных данных - pseudo labeling[9]. Основная идея метода состоит в том, что результаты распознавания тех неразмеченных данных, где нейросеть показала высокую степень уверенности, включают в обучающий набор в дополнение к исходным размеченным данным, и обучение повторяется.

В описываемой работе в этот цикл я включил этап, на котором учитывается, что найденные нейросетью символы существуют не сами по себе, а должны подчиняться определенным правилам. В первую очередь, можно скорректировать положения символов так, чтобы символы образовывали ровные строки, а также проверить получившиеся слова спелл-чекером и исключить те результаты, которые такую проверку не проходят. Такой подход я предложил назвать "семантически усиленной псевдо-разметкой". В общем случае это - включение в процедуру псевдо-разметки этапа, когда автоматически полученная разметка оценивается и корректируются, используя внешние соображения о допустимости полученных результатов. Это дает существенное улучшение результатов по сравнению с обычной псевдо-разметкой (см. [2]). Возможность вытаскивать самого себя за волосы, обучая нейросеть на ее собственных результатах, заканчивается достаточно быстро и ограничена примерами из того же домена, что и исходные размеченные данные. При семантически усиленной псевдо-разметке в процесс обучения включается дополнительная объективная информация. Это не только позволяет использовать больший объем неразмеченных данных, но и дообучить сеть на неразмеченных данных из домена, отличного от того, к которому относятся исходная размеченная обучающая выборка [2].

Обычная (а) и семантически-усиленная (б) псевдо-разметка.
Обычная (а) и семантически-усиленная (б) псевдо-разметка.

В результате применения описанных подходов получалось программное решение, дающее менее 0.5% ошибочных символов при использовании достаточно качественных изображений (хорошая камера, правильное освещение). Я написал простенький сервис на Flask и развернул на домашнем компьютере сервис, которым стал пользоваться я сам и некоторые наши знакомые по сообществу родителей слепых детей.

Кроме того, в результате этой работы получился "наш ответ Китаю": датасет Angelina Braille Dataset из 240 размеченных фотографий брайлевских текстов. Существенно более сложный и разнообразный по сравнению датасетом DSBI, опубликованным китайскими разработчиками.

Искусство - в массы

Итак, первое время сервис работал на моем домашнем компьютере и количество пользователей прибывало методом сарафанного радио.

В 2021 описываемый сервис стал одним из победителей конкурса World AI & Data Challenge, который проводит Агентство Стратегических Инициатив. В конкурсе участвуют решения самых разных социльных проблем, построенные с помощью AI и Data science. То, что мой проект занял 2-е место в этом конкурсе, привело к двум важным практическим результатам.

Во-первых, АСИ обеспечило информационную поддержку: в специализированные школы по обучению слепых было направлено официальное письмо с поручением ознакомиться с сервисом и дать отзыв. Организовало несколько zoom-конференций с преподавателями-тифлопедагогами. В результате я получил множество очень мотивирующих отзывов. Самый короткий и емкий прозвучал на одной из видеовстреч: "мы ждали эту программу всю жизнь". Но, самое важное - потенциальные пользователи узнали о программе, преодолели "порог вхождения". Только сарафанным радио достичь такого результата было бы невозможно.

Во-вторых, компания Яндекс выделила победителям конкурса грант на использование вычислительных мощностей Яндекс-облака. Я мог больше не держать сервис на своем домашнем компьютере, а разместить его на выделенной машине Яндекса.

Подробное описание опыта работы с облачной структурой Яндекса заслуживает отдельной статьи. Приведу основной вывод, к которому я пришел. Облачная структура Яндекса очень хороша для масштабных вычислений. Возможность запустить сразу несколько серверов с Tesla V100 - это прекрасно. Однако пока там нет возможности развернуть бюджетный слабонагруженный сервис, если для работы требуется GPU. Выделенная машина с Tesla V100 для данной задачи - сильный "оверкилл за оверпрайс". Надеюсь, что со временем и для этой ниши будет предложено подходящее решение.

Решить проблему помог грант Фонда Президенских Грантов, предоставленный АНО "Ангелина" (для эксплуатации сервиса была создана некоммерческая организация). Такие гранты выделяются на различные социальные проекты. В данном случае грант был выдан на приобретение выделенного сервера и размещение его в дата-центре. Пока это оказывается более доступным способом развертывания малонагруженного интернет-сервиса, требующего GPU, чем облачная структура.

Так что, проблема решена?

До сих пор я говорил о проблеме оптического распознавания письма на Брайле. И за кадром осталась задача преобразования шрифра Брайля в обычный текст.

Дело в том, что в брайлевской азбуке всего 63 символа. Нет привычных зрячим людям подчеркиваний, курсива, верхних и нижних индексов и т.п. Буквы разных языков, цифры, математические знаки кодируются одними и теми же символами. Например, символы б, Б, b, β, 2 - это один и тот же брайлевский символ ⠃. Значение зависит от контекста. Например, перед числом ставится специальный числовой знак ⠼. Т.е. ⠼⠃⠃ - это "22". Другие правила сложнее. А полное описание использования шрифта Брайля, включая математические уравнения, дроби, использование различных языков, символов №, %, $, синтаксический и грамматический разбор предложения и т.п. занимает десятки страниц и очень напоминает Драконий Покер Р.Асприна. Кроме того, в английском языке существует система сокращений, когда длинные распространенные слова заменяются более короткими (вместо immediate пишут imm, а вместо friend - fr и т.д.).

Сейчас в сервисе эти правила реализованы в минимальном объеме, достаточно прямолинейно: в виде проверки различных условий и переключения в зависимости от них на на различные словари трансляции. Вряд ли разумно дальше развивать этот подход. И не только потому, что исходный код станет совсем нечитаемым. Многие соглашения используются неформально, предполагают контекст. Так, есть специальный символ, обозначающий переход с русского языка на английский. Но иногда он может применяться к отдельному слову, иногда ко всему следующему тексту, пока не встретится знак перехода на русский. Иногда его не ставят вовсе, если фразы вроде «O, yes, - только и смог сказать сыщик» читают интуитивно.

Существует open source библиотека Liblouis для конвертации между Брайлем и обычным плоским письмом, но в основном она применяется для преобразования плоского письма в Брайль, эта задача намного проще. Обратный перевод там реализован плохо, особенно для русского языка.

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

Так что проблем еще хватает. Описанная - главная, но не единственная. Есть что улучшить и в оптическом распознавании, и в веб-интерфейсе. Проект открытый, буду рад сотрудничеству. Репозитории на GitHub:

Литература

1. Ovodov I. G. Optical Braille Recognition Using Object Detection Neural Network //Proceedings of the IEEE/CVF International Conference on Computer Vision. – 2021. – С. 1741-1748.

2. Ovodov I. G. Semantic-based annotation enhancement algorithm for semi-supervised machine learning efficiency improvement applied to optical Braille recognition //2021 IEEE Conference of Russian Young Researchers in Electrical and Electronic Engineering (ElConRus). – IEEE, 2021. – С. 2190-2194.

3. A review on software algorithms for optical recognition of embossed braille characters / V. Udayashankara [и др.] // International Journal of computer applications. — 2013. — Т. 81, № 3. — С. 25—35.

4. Isayed, S. A review of optical Braille recognition / S. Isayed, R. Tahboub //2015 2nd World Symposium on Web Applications and Networking (WSWAN). — IEEE. 2015. — С. 1—6.

5. Joseph Redmon, Santosh Divvala, Ross Girshick, and Ali Farhadi. You only look once: Unified, real-time object detection. In Proceedings of the IEEE conference on computer vision and pattern recognition, pages 779–788, 2016

6. Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng-Yang Fu, and Alexander C Berg. Ssd: Single shot multibox detector. In European conference on computer vision, pages 21–37. Springer, 2016

7. Tsung-Yi Lin, Priya Goyal, Ross Girshick, Kaiming He, and Piotr Dollar. Focal loss for dense object detection. In ´ Proceedings of the IEEE international conference on computer vision, pages 2980–2988, 2017

8. Settles B. Active learning literature survey. University of Wisconsin //Computer Science Department. – 2010.

9. Lee D. H. et al. Pseudo-label: The simple and efficient semi-supervised learning method for deep neural networks //Workshop on challenges in representation learning, ICML. – 2013. – Т. 3. – №. 2. – С. 896.

Комментарии (23)


  1. Tavrid
    31.05.2022 14:34
    +9

    Очень хороший проект, но мир ушел в сторону аудиоформата книг, и титрофлешплееров продвигаемых той самой компанией ЭлекЖест по цене нового Самсунга (в принципе за счет госбюджета и фонда соцстраха). Там такая убогая программная начинка, что даже зрячий не может добавить правильно книгу в каталог на флешке.

    Добавить больше фотографий и сканов книг шрифтом Брайля в Датасет можно в читальном зале Российской государственной библиотеки для слепых http://rgbs.ru

    В регионах есть региональные библиотеки, но выбор в разы меньше - каталог библиотек для слепых по регионам РФ http://www.rusblind.ru/

    Удивился, что библиотечная система не выкладывает в публичный доступ книги для слепых, люди сами все ведут и обмениваются к примеру на сайте http://av3715.ru/ (аудиоформат).

    Я думаю путем переговоров можно получить и исходные верстки (pdf) новых книг их библиотечного издательства (думаю это может помочь в машинном обучении - как должно быть распознано и какие искажения появляются в реальной бумаге).


  1. MAvedov
    31.05.2022 16:40
    +5

    Отличное решение, думаю что невероятно полезно людям связанным с работой со слепыми!

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


  1. ifap
    31.05.2022 18:21
    +1

    Хм, а каков все-таки реальный use case для Вашей программы? Вот знаете Вы, что дочка сейчас читает "Мойдодыр", и хотите читать его вместе. Вы же можете найти текст уже в электронном виде...


    1. iovodov Автор
      31.05.2022 19:01
      +19

      Для родителя:

      1. Имеется учебник (на Брайле). Ей задали "упр. 24 на стр.35". Надо помочь разобраться в условии, прочитать что там было на уроке по этой теме.

      2. Имеется сделанная домашка (на Брайле, естественно). Ну, например, сочинение "как я провела выходные". Надо проверить. Ну тут понятно, что некоторые ошибки - это ошибки программы, но посмотреть на конкретную ошибку всяко проще, чем читать весь текст целиком.

      3. Имеется книжка. Уже не Мойдодыр, понятно. Конкретно, вот прям щас - "Рассказы Люси Синициной". На Брайле, естественно. - Пап, а что это за слово? Ну, допустим, слово "канделябр". - А что такое "канделябр"? Вот тут уже хорошо бы прочитать хотя бы страницу целиком, чтобы понять, при чем тут канделябр...

      Ко всему этому добавим, что когда человек читает брайль, то руками закрывает текст. Убрать руки - потеряешь строчку.

      Для учителя:

      1. Имеется учебник (на Брайле). Надо подготовиться к уроку. В нужный момент помочь, типа: "упражнение 24 находится здесь". Если по этому учебнику работаешь много лет, то, возможно, учителя уже помнят, на какой странице что находится. А если первый год?

      2. Тебе сдали 20 сочинений "как я провел выходные" (на Брайле, естественно). Все надо прочитать и проверить. Брайль ты знаешь, конечно, пару страниц прочитаешь легко. А 40? Можно, конечно, листочки копиркой потереть, будет проще. Но такое...

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

      4. Перекликается с предыдущим. Инклюзия. Можно, конечно, ребенка сдать в интернат (примерно по одному интернату на субъект РФ). Там классно, много чему могут научить. Ценой жизни без семью. Для ребенка, которого только что взяли из детдома, такой вариант вообще не подходит, по крайней мере долгое время (это отдельная тема почему, но это так). Так с ребенком может заниматься учитель, который не профессионал тифлопедагог. В принципе, брайль можно выучить, но сделать так, чтобы чтение брайля не составляло проблемы - это уже другой уровень. А так может заниматься учитель, который освоит основы брайля.

      5. Перекликается с предыдущим. ВУЗ. Специализированных вузов, в отличие от школ, нет. У нас знакомая закончила ВШЭ. Там несколько преподавателей выучили ради нее брайль. Подвиг, я считаю. Может, можно сделать, чтобы подвиг не требовался?

      6. Есть в Москве Центр Педагогического мастерства. Проводит Турнир Ломоносова и другие олимпиады. Эта программа позволяет им принимать работы слепых участников. Ну и в ту же тему. Упомянутая выше знакомая ходила писать Тотальный Диктант. С брайлевским планшетом. Потом перевела с помощью программы, сдала.

      Слепые пользователи:

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


      1. ifap
        31.05.2022 19:23
        +1

        Агась, я-то по статье подумал, что речь идет о распознавании типографского брайля, а не рукописного. Тогда вопрос снимается. Кстати, странно, почему в брайлевских книгах не печатают "подстрочник" обычным шрифтом - снимало бы половину проблем.


        1. iovodov Автор
          31.05.2022 19:32
          +2

          Из перечисленных юзкейсов значительная часть - про типографские книжки, не про рукописные.
          Подстрочник бы да, не помешал. Думаю, не печатают, потому что для этого надо в брайлевский принтер засунуть еще и обычный, сделать 2 в 1.
          Подстрочник я видел только в некоторых детских книжках, например [вот](https://github.com/IlyaOvodov/AngelinaDataset/blob/master/books/telefon/IMG_20190715_123123.labeled.jpg). Там, похоже, сначала на каждой странице печатали плоский текст, потом вставляли в брайлевский принтер. Заниматься таким массажем для каждой книжки, полагаю никто не будет.


          1. ifap
            31.05.2022 22:14
            +2

            Да, похоже сперва через обычный принтер прогнали, потом через брайлевский. В домашних условиях морока, в типографских - вряд ли, типографии и не такое умеют. Интересно, а как "у них", неужели тоже не печатают два варианта текста?


            1. iovodov Автор
              31.05.2022 23:30
              +2

              Если "у них" это за рубежом, то тоже НЕ печатают 2 варианта во взрослых книжках. Как минимум, те 2 издания из библиотеки в UK, которые я видел :) - без подписей, только Брайль.


              1. ifap
                31.05.2022 23:32

                Странно это - копеечный вопрос, а пользы много было бы.


    1. ovodova_olga
      31.05.2022 19:04
      +9

      Отвечает мама (жена автора). Дети сочинения пишут, упражнения по русскому. Обычные письменные работы в тетрадке, как у любого школьника. Прочитать может преподаватель, не знающий Брайля.


  1. khe404
    31.05.2022 18:38
    +1

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

    Распознание обычного отсканированного текста кажется не сильно ресурсоемкий процесс, зачастую даже телефон легко справляется, а тут 4ГБ оперативки.

    Это связанно с тем что страницу текста приходится обрабатывать как один объект? Или все же удается создать отдельные символы привязанные к собственной локальной сетке?


    1. iovodov Автор
      31.05.2022 19:17
      +5

      Даже хуже. Не 4ГБ оперативки, а видеокарта с 4ГБ оперативки. Это другое :)
      Ну, связано с тем что там достаточно мощная нейросеть. И, да, страница А4 обрабатывается целиком. И с тем, что я пока не особо занимался тем, чтобы сделать легкое решение. Более приоритетное - все же улучшить качество того что есть. Упомянутые в статье 0.5% ошибок - это хорошие фото при правильном освещении (правильное освещение описано на сайте). Я пробовал брать наугад загруженные людьми в систему фото, включая те, где плохой свет, резкость, качество камеры и т.п., в общем, то, что люди загружают первый раз, пока не научатся пользоваться - получается 5% ошибок. Хочется этот показатель улучшить, это приоритетнее. Нормальный перевод в плоское письмо тоже хочется.
      Кроме того, не занимался оптимизацией потому, что пока не особо верю, что получится запустить все на смартфоне. Можно, конечно, порезать страницу на фрагменты где-то 10х10см, распознать отдельно, потом склеить. Памяти потребуется меньше, но работать будет медленнее. Смысл? Как веб-сервис оно и так работает, а в смартфон засунуть - еще не факт что получатся.
      Брайль реально распознавать сложнее, чем обычный текст. Потому что сетка и потому что белым по белому. Иногда даже не на фото, а на реальной странице смотришь и не поймешь сразу - есть тут точка или нет.


      1. copylove
        01.06.2022 12:07

        Думаю, несколько лет и смартфоны подтянутся до нужной скорости


        1. alex19EP
          01.06.2022 19:40

          del


  1. VT100
    31.05.2022 22:31

    Хотел плюсануть как раньше — из "ленты".
    А тут, оказывается, "много гитик".


  1. man_of_letters
    01.06.2022 13:40
    +1

    Проблему плохого входящего изображения точно не стоит оставлять на распознающую сеть.

    Или сделать сеть препроцессинга типа такой:
    openaccess.thecvf.com/content_cvpr_2018/papers/Ma_DocUNet_Document_Image_CVPR_2018_paper.pdf

    Или зарыться в хардкорный CV:
    mzucker.github.io/2016/08/15/page-dewarping.html


  1. Kriminalist
    01.06.2022 14:02
    +3

    Пару мыслей для возможных оптимизаций.

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

    2) попробовать распознавать не статичную картинку, а видеопоток, при движении камеры влево-вправо, вверх-вниз. И "триангулировать" вершины пупырышков.

    3) Возможно, перевод в плоское письмо стоит рассматривать как перевод с другого языка, и сделать упор на правила и статистику, набрав сравнительный корпус?


  1. ReadOnlySadUser
    01.06.2022 16:08
    +1

    Самый короткий и емкий прозвучал на одной из видеовстреч: "мы ждали эту программу всю жизнь".

    Может к 30-ти я стал слишком сентиментальный, может выгорание сказывается, но прям порадовался за вас. Завидую вам и мечтаю, чтобы хоть кто-то о моём софте хоть раз что-то подобное сказал)


  1. MAKC77
    01.06.2022 16:58

    Восхищен такими людьми, которые могут и делают такие общеполезные вещи.
    Хочу предложить идею. К сожалению только идею как в мозговом штурме. Но надеюсь как отправная точка она может помочь или дать толчок для озвучивания своих идей другими людьми.
    Так вот сама идея - организовать распределенную систему распознавания из запущенных на разных устройствах экземпляров программы. и распараллелить распознавания между многими участниками. Уверен, что у каждого запущенного экземпляра системы есть некоторое количество свободного времени на выполнение части задач других людей.
    Существуют же разного рода децентрализованные системы: TorrentTV, Syncthing (децентрализованная система синхронизации своих файлов), децентрализованные мессенджеры, распределенные вычисления BOINC, и прочие.
    В итоге это даст возможность снизить требование к имеющемуся пользовательскому оборудованию,
    Даст возможность предоставить в общее пользование свои вычислительные ресурсы.
    В системе сделать настроечку - делиться своими ресурсами с другими участниками или нет, чтобы в зависимости от разных обстоятельств разрешать или запрещать работу в распределенной сети.
    Понимаю, что это не просто пару строчек в программу добавить, но главное начать и всё получиться! :)


  1. alex19EP
    01.06.2022 19:41
    +2

    отличная статья спасибо вам.


    ⠝⠥⠀⠊⠀⠏⠗⠊⠺⠑⠞⠀⠕⠞⠀⠎⠇⠑⠏⠕⠛⠕⠀⠺⠇⠁⠙⠑⠇⠾⠉⠁⠀⠙⠊⠎⠏⠇⠑⠫⠀⠃⠗⠁⠯⠇⠫⠲


    1. iovodov Автор
      01.06.2022 20:11
      +1

      Спасибо! Можете ли подсказать, в каком формате удобнее выгружать распознанный брайлевский текст, чтобы мог он нормально воспроизводился дисплеем? Сейчас выгружается в UNICODE формате с расширением BRL. Это годится?
      И будет полезно узнать, получается ли пользоваться сайтом, чтобы оцифровать текст и сохранить для воспроизведения на брайлевском дисплее. Мне говорили, что это очень нужно, но я пока не получал обратной связи, получается ли.
      Хотя, боюсь, для слепого более сложной задачей будет правильно сфотографировать текст. Но замечаниям по адаптированности сайта тоже буду рад.


      1. alex19EP
        01.06.2022 21:59
        +1

        Сейчас выгружается в UNICODE формате с расширением BRL.

        это очень хорошо.


        И будет полезно узнать, получается ли пользоваться сайтом, чтобы оцифровать текст и сохранить для воспроизведения на брайлевском дисплее.

        у меня сейчас нет под рукой брайлевских листков, но я запишу таску себе. в целом на первый взгляд всё выглядит понятно.


        Хотя, боюсь, для слепого более сложной задачей будет правильно сфотографировать текст.

        это да. придется глаза где-то искать, а потом уговаривать их мне помочь. но это ладно, это мы умеем.


  1. Nepherhotep
    02.06.2022 05:36

    Датасет для перевода символов Брайля в обычный текст можно сгенерировать через конвертацию обычного текста в Брайль, если я правильно понял задачу.

    Что касается разметки самих символов Брайля для перевода в цифру, то можно поступить похожим образом - печатаете заранее известный текст на принтере (если есть принтер Брайля), а затем фотографируете. Понадобится кое-какой пост-процессинг средствами OpenCV, чтобы превратить это в датасет (к примеру, распознать лист бумаги, и сетку), но тем не менее, можно получить сотни листов с данными.

    Ну и разметку сделать не так уж и сложно, особенно, если закраудфандить этот процесс. Для нашего проекта https://habr.com/ru/post/506276/, мы разметили десятки тысяч картинок (там, правда, элементов на картинке куда меньше), но это будет эквивалентно сотням страничек с Брайлем.