![](https://habrastorage.org/files/29b/97e/f56/29b97ef56646456f92d3ce2bfc4bd542.jpg)
Сегодня мы запускаем ABBYY Real-Time Recognition SDK для мобильных платформ Android и iOS. Поэтому хотим поговорить об особенностях распознавания данных на мобильном устройстве, а именно, об извлечении информации в видеопотоке на примере одного из самых сложных документов – гражданского паспорта.
Всем нам часто приходится использовать свои паспортные данные. Паспорт нужен для регистрации в мобильном банке или платёжной системе, покупки билетов, аренды машины. Сейчас многие используют для этих задач смартфон. Набирать информацию на маленькой клавиатуре мобильного устройства очень неудобно. Особенно неприятное поле для ввода – это данные о месте выдачи паспорта: обычно они занимают пару-тройку строк и содержат множество аббревиатур.
Каршеринговые компании говорили нам, что основная часть потенциальных клиентов «отваливается» именно на этапе ручного ввода этих данных. Значит, проблема не в том, что люди боятся рассекретить информацию о себе, а в том, что им жалко тратить время на муторное перепечатывание текста из паспорта. У всех смартфонов есть камеры, которые можно использовать для упрощения и ускорения ввода информации с документов. Задача есть – нужно решать.
На самом деле, у ABBYY уже есть решение для этой задачи, работающее на ПК. Однако современный смартфон хоть и мощный, но всё еще не компьютер. Нам нужно было делать поправку на допустимый размер приложения (не больше 50 МБ) и доступную оперативную память. Поэтому вариант «просто перенести имеющуюся технологию на мобильные платформы» мы отмели и приступили к новой разработке.
Почему сложно распознать паспорт?
Казалось бы, что сложного в том, чтобы распознать паспорт? Структура паспорта известна: на «половинке с фото» сбоку расположена вертикальная строчка с серией и номером, слева от неё – 6-7 горизонтальных строк с персональными данными. Но сложность заключается не в том, чтобы разобраться, где какое поле, а в том, чтобы верно распознать нужный текст.
Паспорт – не самый простой для распознавания документ. Есть ряд проблем, с которыми рано или поздно сталкиваются все, кто пытается его обработать.
Дефекты съёмки
В этом блоге мы уже не раз обсуждали, какие сложности возникают при распознавании фотографии, а не скана. Основная сложность в том, что фотоаппарат смартфона – это не сканер :) При фотографировании мы держим устройство (а иногда и фотографируемый документ) в руках, а рука может дрогнуть. Результат – смазанный текст на фотографии, который просто невозможно распознать.
В случае с паспортом ситуация осложняется тем, что самые нужные страницы заламинированы. А значит, при их фотографировании неминуемо будут возникать блики, которые сделают текст нечитаемым.
![](https://habrastorage.org/files/7cf/bc2/b59/7cfbc2b593674fbdbe4f1a5da898b0a1.jpg)
Рисунок 1. Блик полностью закрывает фамилию (данные паспорта изменены)
Сложный фон
Чтобы защитить документ от подделки, сотрудники УФМС добавляют голограммы и еще больше усложняют задачу распознавания и извлечения данных паспорта.
Я думаю, увидев фото своего паспорта, многие негодовали из-за того, что двуглавый орёл попал прямо на лицо и окончательно испортил фотографию. Точно так же он может «испортить» фамилию, дату рождения и другие поля, превратив их в едва читаемый на фотографии текст – это проблема и для систем распознавания.
![](https://habrastorage.org/files/57d/f09/bf4/57df09bf4a8c48c5ac9f90bf5f365f1d.jpg)
Рисунок 2. Голограмма «РФ» перекрывает отчество (данные паспорта изменены)
Размеры и цвет текста
Ещё один неприятный момент. Подписи к полям данных (например, «Дата рождения», «Отчество» и др.) написаны очень мелким шрифтом. Даже хорошие камеры смартфонов не всегда позволяют получить изображение, на котором этот текст можно качественно распознать. В результате подписи превращаются в мусор из разных символов, который уже не может быть реперной точкой для поиска полей данных и мешает анализу результатов.
Кроме того, часто встречаются документы, на которые явно пожалели краски. Текст настолько бледный, что его едва можно прочитать. Распознать такой текст на фотографии ещё сложнее.
![](https://habrastorage.org/files/947/295/615/947295615b394a32983c6e5a0f0df809.png)
Рисунок 3. Слабо контрастный текст (данные паспорта изменены)
Что может помочь в распознавании?
Итак, распознать паспорт — дело непростое. Но трудности существуют для того, чтобы их преодолевать. И мы хотим поделиться некоторыми идеями, полезными для распознавания паспорта на мобильном телефоне.
Распознавание из видеопотока
Первая проблема, о которой мы упомянули, это сложность работы с фотографией по причине наличия бликов, смазанного текста и т.п. Чтобы с ней справиться, можно попробовать нивелировать эти дефекты. Например, использовать функции ABBYY Mobile Imaging SDK для оценки качества изображения и его пригодности для распознавания. Если становится ясно, что хороших результатов для фотографии не получить, приложение может попросить пользователя сделать повторный снимок.
Другой способ борьбы с дефектами – отказаться от работы с фото и перейти к обработке видеопотока, т.е. последовательности изображений (кадров), полученных от камеры устройства.
Человеку сложно при съёмке паспорта держать руки ровно. А значит, дефекты будут «путешествовать» по кадрам: на одном блик может быть расположен в районе поля «Имя», а на другом — где-то на фотографии владельца паспорта. Распознавая разные кадры отдельно, а затем объединяя полученные результаты для каждого поля, можно значительно повысить точность извлекаемых данных. Это просто статистика: для каждого поля паспорта у нас будет целый набор значений, полученных после распознавания последовательных кадров, для них мы сможем вычислить усреднённое значение и использовать его в качестве финального результата, который будет возвращён пользователю. Очевидно, что среднее будет меняться при добавлении данных новых обработанных кадров, и возвращать результат логично только после его стабилизации. В своих разработках для оценки стабильности мы используем вероятностный критерий и останавливаем обработку только тогда, когда вероятность изменения результата становится крайне мала.
Словари распознавания
При распознавании текста машина перебирает гипотезы и оценивает, насколько фрагмент изображения похож на тот или иной символ языка. В случае обработки изображения плохого качества велика вероятность выбрать неверную гипотезу. Но у нас есть возможность «подсказать» распознавателю, какая из имеющихся гипотез более вероятна, подключив словари, содержащие нужную лексику. В случае с паспортом это даёт заметный прирост точности обработки, исправляя такие «классические» ошибки распознавания, как 'И' -> 'Й', 'О' -> '0' и др.
Также помогут регулярные выражения для числовых полей (даты, коды и номера). Их применение позволит исключить ситуации, когда цифры путаются с буквами (‘B’ -> ‘8’, ‘З' -> '3' и т.п.).
Фильтрация мелкого текста
Словари помогут повысить качество распознавания основного текста, но с мелким реперным текстом (подписи к полям) справиться не смогут. Чтобы он не мешал, его нужно отфильтровать. Сделать это можно, например, опираясь на его цвет и размер. Эти характеристики заметно отличаются для шрифта, которым написаны основные данные паспорта, но всё же при их использовании возможны ошибки. Поэтому критерии фильтрации не должны быть слишком жёсткими. Лучше дополнительно использовать информацию о координатах найденного текста и откидывать мусорные символы, расположенные на значительном расстоянии от основных данных.
Нормализация распознанных значений
К сожалению, добиться 100% качества распознавания основного текста и полностью отфильтровать весь мелкий мешающий мусор удаётся далеко не всегда, а оставшиеся ошибки сильно влияют на качество извлечённых данных. Чтобы улучшить результат, можно использовать специальные постобработки:
- Для числовых полей достаточно задать регулярное выражение, описывающее данное поле, и отбрасывать «лишние» символы, попавшие в результат, но не подходящие по формату. Например, в паспортах довольно мало места для поля «Дата выдачи», поэтому часто неверно распознанная подпись к полю может «приклеиться» к самому значению. В итоге мы увидим, например, такой результат: «::16.05.2010». Простая нормализация позволит оставить только верное значение для данного поля: «16.05.2010».
Кроме того, при распознавании из видеопотока можно использовать форматные проверки для ускорения процесса, завершая обработку при получении стабильного результата, подходящего по формату. Наши внутренние тесты показывают, что такой подход позволяет ускорить процесс распознавания примерно на 15% без значительной просадки качества по сравнению с «полной стабилизацией», описанной выше.
- Для словарных полей можно использовать дополнительную проверку и исправление ошибок по словарю. Признак словарности также будет полезен для ускорения процесса обработки – возвращать результат для поля, где все слова прошли проверку, не дожидаясь «полной стабилизации» значения.
Конечно, это далеко не все идеи и решения, которые могут пригодиться при распознавании паспорта. В наших будущих статьях мы продолжим рассказывать об этой задаче.
Распознавание паспорта – одна из множества задач ввода данных, которую требуется решать на смартфоне. На практике таких задач намного больше. Например, сейчас почти все банки в своих мобильных приложениях предлагают услугу оплаты жилищно-коммунальных платежей. Автоматическое распознавание нужных для этого данных (код абонента, номер лицевого счета и т.п.) позволит значительно упростить и ускорить процесс.
Мы в ABBYY осознаём важность таких задач, и поэтому наша команда активно работает над специализированным API, которое позволит разработчикам быстро и максимально просто создавать мобильные приложения для извлечения данных из любых документов. А ABBYY Real-Time Recognition SDK доступен уже сейчас.
Следите за обновлениями :)
Ольга Титова,
департамент продуктов для разработчиков