Сегодня мы запускаем ABBYY Real-Time Recognition SDK для мобильных платформ Android и iOS. Поэтому хотим поговорить об особенностях распознавания данных на мобильном устройстве, а именно, об извлечении информации в видеопотоке на примере одного из самых сложных документов – гражданского паспорта.
Всем нам часто приходится использовать свои паспортные данные. Паспорт нужен для регистрации в мобильном банке или платёжной системе, покупки билетов, аренды машины. Сейчас многие используют для этих задач смартфон. Набирать информацию на маленькой клавиатуре мобильного устройства очень неудобно. Особенно неприятное поле для ввода – это данные о месте выдачи паспорта: обычно они занимают пару-тройку строк и содержат множество аббревиатур.
Каршеринговые компании говорили нам, что основная часть потенциальных клиентов «отваливается» именно на этапе ручного ввода этих данных. Значит, проблема не в том, что люди боятся рассекретить информацию о себе, а в том, что им жалко тратить время на муторное перепечатывание текста из паспорта. У всех смартфонов есть камеры, которые можно использовать для упрощения и ускорения ввода информации с документов. Задача есть – нужно решать.
На самом деле, у ABBYY уже есть решение для этой задачи, работающее на ПК. Однако современный смартфон хоть и мощный, но всё еще не компьютер. Нам нужно было делать поправку на допустимый размер приложения (не больше 50 МБ) и доступную оперативную память. Поэтому вариант «просто перенести имеющуюся технологию на мобильные платформы» мы отмели и приступили к новой разработке.
Почему сложно распознать паспорт?
Казалось бы, что сложного в том, чтобы распознать паспорт? Структура паспорта известна: на «половинке с фото» сбоку расположена вертикальная строчка с серией и номером, слева от неё – 6-7 горизонтальных строк с персональными данными. Но сложность заключается не в том, чтобы разобраться, где какое поле, а в том, чтобы верно распознать нужный текст.
Паспорт – не самый простой для распознавания документ. Есть ряд проблем, с которыми рано или поздно сталкиваются все, кто пытается его обработать.
Дефекты съёмки
В этом блоге мы уже не раз обсуждали, какие сложности возникают при распознавании фотографии, а не скана. Основная сложность в том, что фотоаппарат смартфона – это не сканер :) При фотографировании мы держим устройство (а иногда и фотографируемый документ) в руках, а рука может дрогнуть. Результат – смазанный текст на фотографии, который просто невозможно распознать.
В случае с паспортом ситуация осложняется тем, что самые нужные страницы заламинированы. А значит, при их фотографировании неминуемо будут возникать блики, которые сделают текст нечитаемым.
Рисунок 1. Блик полностью закрывает фамилию (данные паспорта изменены)
Сложный фон
Чтобы защитить документ от подделки, сотрудники УФМС добавляют голограммы и еще больше усложняют задачу распознавания и извлечения данных паспорта.
Я думаю, увидев фото своего паспорта, многие негодовали из-за того, что двуглавый орёл попал прямо на лицо и окончательно испортил фотографию. Точно так же он может «испортить» фамилию, дату рождения и другие поля, превратив их в едва читаемый на фотографии текст – это проблема и для систем распознавания.
Рисунок 2. Голограмма «РФ» перекрывает отчество (данные паспорта изменены)
Размеры и цвет текста
Ещё один неприятный момент. Подписи к полям данных (например, «Дата рождения», «Отчество» и др.) написаны очень мелким шрифтом. Даже хорошие камеры смартфонов не всегда позволяют получить изображение, на котором этот текст можно качественно распознать. В результате подписи превращаются в мусор из разных символов, который уже не может быть реперной точкой для поиска полей данных и мешает анализу результатов.
Кроме того, часто встречаются документы, на которые явно пожалели краски. Текст настолько бледный, что его едва можно прочитать. Распознать такой текст на фотографии ещё сложнее.
Рисунок 3. Слабо контрастный текст (данные паспорта изменены)
Что может помочь в распознавании?
Итак, распознать паспорт — дело непростое. Но трудности существуют для того, чтобы их преодолевать. И мы хотим поделиться некоторыми идеями, полезными для распознавания паспорта на мобильном телефоне.
Распознавание из видеопотока
Первая проблема, о которой мы упомянули, это сложность работы с фотографией по причине наличия бликов, смазанного текста и т.п. Чтобы с ней справиться, можно попробовать нивелировать эти дефекты. Например, использовать функции ABBYY Mobile Imaging SDK для оценки качества изображения и его пригодности для распознавания. Если становится ясно, что хороших результатов для фотографии не получить, приложение может попросить пользователя сделать повторный снимок.
Другой способ борьбы с дефектами – отказаться от работы с фото и перейти к обработке видеопотока, т.е. последовательности изображений (кадров), полученных от камеры устройства.
Человеку сложно при съёмке паспорта держать руки ровно. А значит, дефекты будут «путешествовать» по кадрам: на одном блик может быть расположен в районе поля «Имя», а на другом — где-то на фотографии владельца паспорта. Распознавая разные кадры отдельно, а затем объединяя полученные результаты для каждого поля, можно значительно повысить точность извлекаемых данных. Это просто статистика: для каждого поля паспорта у нас будет целый набор значений, полученных после распознавания последовательных кадров, для них мы сможем вычислить усреднённое значение и использовать его в качестве финального результата, который будет возвращён пользователю. Очевидно, что среднее будет меняться при добавлении данных новых обработанных кадров, и возвращать результат логично только после его стабилизации. В своих разработках для оценки стабильности мы используем вероятностный критерий и останавливаем обработку только тогда, когда вероятность изменения результата становится крайне мала.
Словари распознавания
При распознавании текста машина перебирает гипотезы и оценивает, насколько фрагмент изображения похож на тот или иной символ языка. В случае обработки изображения плохого качества велика вероятность выбрать неверную гипотезу. Но у нас есть возможность «подсказать» распознавателю, какая из имеющихся гипотез более вероятна, подключив словари, содержащие нужную лексику. В случае с паспортом это даёт заметный прирост точности обработки, исправляя такие «классические» ошибки распознавания, как 'И' -> 'Й', 'О' -> '0' и др.
Также помогут регулярные выражения для числовых полей (даты, коды и номера). Их применение позволит исключить ситуации, когда цифры путаются с буквами (‘B’ -> ‘8’, ‘З' -> '3' и т.п.).
Фильтрация мелкого текста
Словари помогут повысить качество распознавания основного текста, но с мелким реперным текстом (подписи к полям) справиться не смогут. Чтобы он не мешал, его нужно отфильтровать. Сделать это можно, например, опираясь на его цвет и размер. Эти характеристики заметно отличаются для шрифта, которым написаны основные данные паспорта, но всё же при их использовании возможны ошибки. Поэтому критерии фильтрации не должны быть слишком жёсткими. Лучше дополнительно использовать информацию о координатах найденного текста и откидывать мусорные символы, расположенные на значительном расстоянии от основных данных.
Нормализация распознанных значений
К сожалению, добиться 100% качества распознавания основного текста и полностью отфильтровать весь мелкий мешающий мусор удаётся далеко не всегда, а оставшиеся ошибки сильно влияют на качество извлечённых данных. Чтобы улучшить результат, можно использовать специальные постобработки:
- Для числовых полей достаточно задать регулярное выражение, описывающее данное поле, и отбрасывать «лишние» символы, попавшие в результат, но не подходящие по формату. Например, в паспортах довольно мало места для поля «Дата выдачи», поэтому часто неверно распознанная подпись к полю может «приклеиться» к самому значению. В итоге мы увидим, например, такой результат: «::16.05.2010». Простая нормализация позволит оставить только верное значение для данного поля: «16.05.2010».
Кроме того, при распознавании из видеопотока можно использовать форматные проверки для ускорения процесса, завершая обработку при получении стабильного результата, подходящего по формату. Наши внутренние тесты показывают, что такой подход позволяет ускорить процесс распознавания примерно на 15% без значительной просадки качества по сравнению с «полной стабилизацией», описанной выше.
- Для словарных полей можно использовать дополнительную проверку и исправление ошибок по словарю. Признак словарности также будет полезен для ускорения процесса обработки – возвращать результат для поля, где все слова прошли проверку, не дожидаясь «полной стабилизации» значения.
Конечно, это далеко не все идеи и решения, которые могут пригодиться при распознавании паспорта. В наших будущих статьях мы продолжим рассказывать об этой задаче.
Распознавание паспорта – одна из множества задач ввода данных, которую требуется решать на смартфоне. На практике таких задач намного больше. Например, сейчас почти все банки в своих мобильных приложениях предлагают услугу оплаты жилищно-коммунальных платежей. Автоматическое распознавание нужных для этого данных (код абонента, номер лицевого счета и т.п.) позволит значительно упростить и ускорить процесс.
Мы в ABBYY осознаём важность таких задач, и поэтому наша команда активно работает над специализированным API, которое позволит разработчикам быстро и максимально просто создавать мобильные приложения для извлечения данных из любых документов. А ABBYY Real-Time Recognition SDK доступен уже сейчас.
Следите за обновлениями :)
Ольга Титова,
департамент продуктов для разработчиков
Комментарии (13)
Vitalley
29.03.2017 22:47Уже проще QR-код использовать, а на загране есть строка хорошо читабельная.
Pakos
31.03.2017 11:00На адресных листках код был (не QR) как раз ради распознавания
(сам код выглядел немного не так, но, возможно, современная модификация или просто дизайнерский изыск), на машиночитаемой зоне (внизу) у ОЗП транслитерация и нет отчества, на внутренних паспортах с ней всё ещё хуже, хотя какую-то помощь в плане коррекции (или привнесения) ошибок оказать может. А ещё есть штамп о регистрации — они достаточно стандартизованы и печатались единым набором шрифтов, но есть те же старые паспорта с рукописным заполнением — там будет боль даже человеком читать.
Для ABBYYTeam
на которые явно пожалели краски
Ленточка старая, знакомо всем, печатавшим на матричных принтерах (коим ППУ по сути и является), потому экономят пока ещё что-то видно.
vanmhit
29.03.2017 22:47Всё жду, когда додумаются в паспорт вставить страницу с QR кодом всего, что обычно надо вводить вручную.
WGH
30.03.2017 02:45+1В загранах, кстати, уже достаточно давно вообще пассивный NFC-чип встроен.
Причем чтобы прочесть некоторую инфу, достаточно знать номер паспорта, из которого однозначно получается один из ключей доступа (это чтобы вслепую нельзя было сканить в сумках и карманах). Алгоритм получения ключа известен.
Ещё там есть более защищенная инфа, к которой только какие-то органы имеют доступ.
guskov
30.03.2017 07:35-1Машиночитаемая зона? нет… не слышали…
DmitryMe
30.03.2017 13:53В машиночитаемой зоне под фамилию, имя и отчество отведены разряды с шестого по сорок четвертый в верхней строке, в них может не поместиться целиком отчество, а в отдельных случаях — и целиком имя. Также в машиночитаемой зоне отсутствует полное наименование подразделения организации, выдавшей паспорт, — присутствует только числовой код подразделения.
Archon
03.04.2017 10:30Числовой код подразделения в сочетании с датой выдачи однозначно определяет наименование организации на момент выдачи, без каких-либо вариантов. Уже лет пять заполняю во всех формах только код подразделения, ещё ни у кого вопросов не было.
Denkenmacht
30.03.2017 09:36-1Есть же нормальные устройства-сканеры для паспортов, в банках много лет уже используются.
DmitryMe
30.03.2017 13:29+1Да, такие сканеры используются сотрудниками банков, а у пользователей встречаются крайне редко.
ibochkarev
30.03.2017 14:54+1http://smartengines.ru/
Есть отличный аналог для распознавания паспорта, документов, текста из видеопотока от отечественных ребят. Ты использовали в мобильных приложениях еще в прошлом году. И поддерживают все платформы.ABBYYTeam
30.03.2017 14:54Распознавание паспорта – всего лишь одна задача, где может использоваться Real-Time Recognition SDK. Наша технология может не только распознать документ, но и «прочитать» данные с поверхностей любых предметов. А поскольку это SDK, дальше разработчик сможет использовать эти данные для широкого круга сценариев, например, таких: https://habrahabr.ru/company/abbyy/blog/281973/
kzlv
А какой порядок цен у вашего SDK и от чего зависит цена? Не хочется лезть к сейзлам.
ABBYYTeam
Бесплатная версия доступна давно (скачать можно прямо с сайта и даже не нужно оставлять email :) ), но стоит иметь в виду, что в ней не доступен русский язык распознавания. Подробнее обо всех ограничениях, включая разрешенные сценарии использования, можно прочитать здесь: http://rtrsdk.com/licensing/