Сколько нужно программистов и прописей, чтобы распознать рукописный паспорт?

    Как думаете, часто ли встречаются рукописные паспорта в нашей стране? Когда мы в Smart Engines начинали проектировать систему распознавания паспортов, казалось, что достаточно научить систему качественно распознавать машинописные документы. На тот момент наличие рукописных паспортов, которые не поддавались автоматическому распознаванию, не представлялось важной проблемой: нерешенных задач хватало и без этого. Год назад, анализируя качество работы Smart IDReader, мы поняли, что добрались до того уровня, когда рукописные паспорта составляют значимый класс ошибок. В соответствии с научным подходом, изучили проблему и принялись за решение. Сегодня будет рассказ о том, как мы сделали распознавание рукописного общегражданского паспорта РФ, успешно решив тем самым последнюю задачу на пути полной автоматизации ввода паспортных данных.


    Задача распознавания рукописного текста в общем виде звучит фундаментально, масштабно и нерешаемо. Поэтому вначале важно правильно ограничить формализовать задачу. Итак, будем распознавать рукописный текст основного разворота российского общегражданского паспорта. Такие паспорта заполняются аккуратным каллиграфическим (хотя бы по мнению паспортиста) почерком. С одной стороны, это облегчает задачу: нам не придется распознавать «врачебные каракули» и прочие слабо читаемые тексты. Но, с другой стороны, нам предстоит столкнуться со всей вариативностью каллиграфических начертаний кириллических букв. Ну, что же, это скорее серьезный вызов, а не непреодолимая проблема.

    Задачу распознавания рукописного текста в паспорте мы разбили на три подзадачи:

    1. Детекция наличия рукописи в паспорте.
    2. Сегментация рукописной строки на символы.
    3. Распознавание символов и постобработка.

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

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



    Согласитесь, совсем не то, что надо. Буквы пляшут, размеры не соблюдены… Пришлось искать в интернете прописи, и, как в первом классе, сажать всех за прописи в прямом смысле этого слова! Мы до сих пор вспоминаем это время с улыбкой: весь коллектив (без исключений, от студентов третьего курса до заслуженных докторов наук) сидит за партой и аккуратно выводит буковки.



    За два дня, набив руку, мы были готовы повторить попытку сбора «сырых» данных для датасета рукописного текста. Буквы стали ровнее, слова — читабельнее. А некоторые умудрялись даже привносить какие-то элементы каллиграфии. Вот, посмотрите сами на новые образцы:









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

    Детекция наличия рукописи в паспорте


    Детекция наличия рукописи – важный элемент промышленной системы распознавания документов. Эта функциональность относится к категории «понимание документа» и крайне востребована на стороне бизнес-заказчика. Мы обучили бинарную свёрточную нейронную сеть, которая анализировала подаваемые на вход изображения отдельных текстовых строк паспорта. Каждое из полей паспорта анализируется на предмет рукописи с помощью данной сети и далее путём взвешивания полученных оценок принимается общее решение о «рукописности» паспорта в целом.

    Сегментация рукописной строки на символы


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




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

    Распознавание символов и постобработка


    Проблема распознавания рукописных символов в основном заключается в одинаковости начертания разных символов. Посмотрите на пример выше: какая фамилия написана — “Петров” или “Нетров”? Человек, когда читает рукописный текст, никогда не читает его посимвольно, а всегда в рамках заданного контекста. Так же должна вести себя и система распознавания в данном случае. Так, нейронная сеть, распознающая рукописные символы, должна быть «толерантна» к различным буквам, имеющим одинаковое начертание (с математической точки зрения, должна возвращать одинаковые значения уверенности (confidence) для таких символов), а последующие алгоритмы анализа и обработки результатов распознавания (так называемые «постпроцессоры») должны учитывать особенности распознаваемого поля.

    Чего в итоге мы добились?


    Вот так за год мы научились распознавать рукописные паспорта, оставив позади эту фундаментальную проблему, которая казалась нерешаемой несколько лет назад! А что дальше? Дальше как обычно — работа над качеством и новые рубежи.

    P.S. Чуть не забыли про ответ на вопрос, заявленный в заголовке. Итак, у нас в компании 62 программиста. Мы купили 150 тетрадок и распечатали 2000 листов прописей.

    Smart Engines
    Обработка изображений, распознавание в видеопотоке

    Комментарии 36

      0
      Откуда они берутся? Ну паспорта эти, вручную заполненные.
        +5

        Не везде принтеры были?
        Он же в РФ бессрочный с 45 лет, да и с 20 тоже долго «живёт».

          0

          Водятся рукописные, водятся…
          Я такой пару лет назад ещё имел..

            0
            Из паспортных столов мелких городков начала 2000-х.
              +3
              Обязательная замена паспорта гражданина РФ проводится по достижении 20 и 45 лет, то есть россияне могут пользоваться паспортами, выданными и 10, и 20 лет назад. Понятно, что сейчас такие паспорта выдаются скорее как исключение — например, в случае ЧС или сбоя в системе выпуска (принтер сломался), страна у нас большая и замена/ремонт может занять время, а паспорт человеку выдать лучше прямо сейчас.
                0
                Из паспортных столов берутся :). У меня, например, до сих пор такой.
                +1

                Спасибо за статью!


                Интересует мобильный SDK для распознавания документов. Можете сориентировать по ценам (хотя бы примерно) и условиям лицензирования (в месяц / за приложение / за объем)?

                  –6
                  Добрый день, обратитесь пожалуйста в нашу службу продаж по почте или через заявку на сайте, они проконсультируют.
                    +6

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

                      +1

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

                        +1
                        Здесь, вне зависимости от мнения уважаемого сообщества Хабра, мы вынуждены строго обозначить свою позицию. Физическим лицам мы софт не продаем, только компаниям. Коммерческие условия мы раскрываем только тем компаниям, у которых есть намерение купить. Если автор запроса не сообщает ни компанию, которую он представляет, ни цели использования нашего SDK, то это свидетельствует о том, что покупать софт он не намерен.
                          0

                          Выводы об авторе запроса вы делаете интересные, но неправильные.


                          В моем случае это означает, что я еще не определился, хочу ли я покупать софт именно у вас. И поскольку эта функциональность для нас в настоящее время не основная, то решающим фактором становится цена. Одно дело, если софт обойдется, скажем, в 100 евро в месяц, другое дело – если в 1000. В последнем случае бюджет мне на него никто не одобрит, каким бы этот софт замечательным ни был, пусть он хоть в перерывах между сканированием документов варит кофе и рассказывает анекдоты.


                          Цель использования я кстати написал в переписке с вашими сотрудниками (аж сам директор по специальным проектам ответил, приятно).


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

                  0
                  В статье не говорится о проценте ошибок при работе системы.
                  Представьте, если система работает в аэропорту и из-за ошибки человек не смог улететь своим рейсом. Здесь как с беспилотными автомобилями, либо работает на 100%, либо это выльется в большие проблемы.
                    0
                    Насколько я понял — все равно процесс распознавания не автоматический, а автоматизированный, т.е. окончательную сверку проводит человек (для него просто облегчение в виде не полного набивания полей, а только корректировка некоторых «букофф»?
                      0
                      Все зависит от процесса, если процесс требует максимально возможного качества то связка программа + человек работает, но накладывает требования на программу детектировать свои ошибки с разумным качеством (ошибки 1-го и 2-го рода). Кроме того, не надо забывать, что человек тоже ошибается, особенно в конце рабочего дня. К сожалению человек может ошибаться специально и иногда выходит вообще лучше исключить человека, такие случаи у нас есть. Для рукописи мы ввели специальный дополнительный сигнал — это рукопись, это помогает уменьшить число ошибок.
                      0

                      В аэропорту по внутреннему паспорту в РФ летают?
                      Или заграны от руки пишут?

                        0
                        Внутри страны летают по внутреннему, а на заграничных есть специальный код (со стрелочками такой), который можно сканировать, еще и чип внутри. А, ну и у заграна срок действия меньше — там все паспорта в обороте напечатанные.
                      0
                      Успехов, ребята. Проделали большую работу, нелегко рукописный текст даже человеку бывает понять.
                        0
                        Скажем так, решение задачи ребятам сильно облегчил ограниченный набор данных, требующих распознавания, и, в целом, ОТНОСИТЕЛЬНО ХОРОШИЙ ПОЧЕРК ЛИЦ, ЗАПОЛНЯЮЩИХ ПАСПОРТА ВРУЧНУЮ, т.е. можно сказать, что вместо реального 5-го приближения, как говорят физики, проблема решена в нулевом…

                        Серьёзно оценивать практическую годность технологии, наверное, можно было бы по выборке из х00-х000 студенческих конспектов по разным предметам, различных анкет, где шрифт налагается на надписи самой анкеты и т.п…

                          0
                          Но ведь статья о распознавании рукописного ПАСПОРТА… И об этом (о сужении задачи и об аккуратности почерка) в явном виде говорится во втором абзаце статьи. Как студенческие конспекты относятся к «серьезной оценке практической годности» технологии распознавания рукописного паспорта?
                            0
                            Распознавание рукописных паспортов — это частный случай задачи распознавания рукописного текста. Найдя частное решение проблемы, для математиков и физиков вполне естественно искать общее решение
                              0
                              Тут я с вами совершенно согласен — очень интересно дальнейшее решение задачи в более общем случае. И наверняка можно обобщить и задачу распознавания рукописного текста на какую-то более общую, и так далее.

                              Меня лишь смутил ваш комментарий про оценку практической годности. С моей точки зрения практическая оценка технологии должна проводиться не по общности применения, а как раз наоборот — по применимости к конкретному целевому объекту, адекватном понимании особенностей конкретной задачи и их учете. Иначе получается (может не очень хорошая аналогия, но все же), что очки на минус 3 это плохое технологическое решение, потому что не подходят для людей, у которых зрение минус 5, и серьезно для практического использования можно будет рассматривать только очки, подходящие всем сразу…
                                0
                                Что касается практической годности — тут тоже есть большие сомнения. С рукописными паспортами не сталкивался лет 20, если не 25.
                                Поскольку деньги бюджетные — считаю проще было бы потерпеть до замены последних рукописных паспортов, если речь не идёт о какой то региональной аномалии.
                                  0
                                  А причем тут бюджетные деньги? Мы частная компания и тратим на исследования свои деньги. Наши клиенты сталкиваются с рукописными паспортами и им это мешает снижая качество и скорость оказываемой услуги, вот мы и решили эту проблему.
                                  Если про замену, то она идет естественным образом, при замене паспортов на новые, но и сейчас выдаются рукописные паспорта, по необходимости.
                                    0
                                    При том, что, ИМХО, заказчиком подобного приложения может быть только госструктура и за бюджетные деньги…
                                    Интересно — а с рукописными паспортами за границу пускают?
                                      0
                                      Ну не скажите — с необходимостью распознавать паспорта могут сталкиваться и при продаже билетов, и при выдаче симок (которые по закону оформляются на паспорт), и банкам наверняка интересно
                                        0
                                        Понял. Только во всех этих местах ввод данных паспорта занимает меньшую часть времени оформления билета/договора. Загруженности указанных клерков я тоже особенно не вижу…
                                        В принципе из указанных областей применения лично меня больше задевало время продажи ж.д. билетов в системе Экспресс. Вот бы её как-то оптимизировать для ускорения.
                                        К тому же для работы с иностранными паспортами гораздо чаще полезна поддержка некириллического алфавита и спецсимволов, а также хорошее знание особенностей языка — например несочетаемых/чрезвычайно редко сочетающихся букв (иероглифов и т.п.)
                                        0
                                        За границу пускают по заграничным паспартам они все выполнены в соотвествии стандартом ISO/ICAO 9303, т.е. печатные и с MRZ.
                                        Основная часть наших заказчиков коммерческие структуры, не связанные с государством, гос. инвестиций не имеем.
                                          0
                                          Речь не об инвестициях — речь об оплате конкретной разработки. Как показал кризис коммерческие структуры и являются основными потребителями/прожирателями бюджетных денег.
                                          Пока не встречал бизнеса, у которого настолько остро стоит данная проблема, чтобы он готов был оплатить её решение собственными средствами. Неужели еще остались регионы, где большинство паспартов рукописные?
                                            0
                                            Данная разработка сделана нами, за наш счет, в рамках развития системы.
                            0

                            Обрабатываете на сервере или на клиенте?

                              0
                              И на сервере, и на клиенте и на мобильных.
                              0
                              Движок может распознавать произвольный рукописный текст на страничке, или натренирован только на российские паспорта? Используете ли базу имен для валидации результата?
                                0
                                1. Планируете ли вы выкладывать модели и датасеты в публичный доступ?
                                2. Какие у вашей системы метрики на различных валидационных выборках?
                                3. Сравнивали ли вы ваш multi-stage подход допустим с тем, чтобы делать так — классификация => вырезание ROI со словами (глобально не важно как это делать) => e2e сетка с CTC лоссом для распознавания конкретного слова? Почему так не делалили?
                                4. Я верно понял, что вся игра с "ручной" генерацией разметки из прописей сделана из-за того, что у вас попросту не было датасета с ручными паспортами?
                                5. Правильно ли я понимаю, что вследствие пунктов (1) и (4) — качество низкое (про него в статье нет ни слова!)?;
                                6. Оценивали ли качество каждого алгоритма в пайплайне? Классификация, детекция, нарезка на буквы, классификация? Мне кажется полный e2e тут не оправдан, но первые два и последние два этапа можно слить (CenterNet + UNet на фразы, вместо второго этапа — просто CTC сетка). Все таки оптимизировать 2 алгоритма лучше, чем 4. Хотя первый и четвертный тут очень простые.
                                  0
                                  Мы сделали и описали работающую технологию, работает хорошо, заказчики пользуются. Пункты 1-6 мы планируем подробно осветить в наших научных публикациях, как например сделали это для распознавания печатного текста.
                                  Y. S. Chernyshova, A. V. Sheshkus and V. V. Arlazarov, «Two-Step CNN Framework for Text Line Recognition in Camera-Captured Images,» in IEEE Access, vol. 8, pp. 32587-32600, 2020, doi: 10.1109/ACCESS.2020.2974051.

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

                                Самое читаемое