Мобильное приложение с KYC-верификацией пользователя
Июнь 2022

Мобильное приложение с KYC-верификацией пользователя

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

Мы разработали модуль для мобильного приложения, который верифицирует личность: сканирует лицо пользователя и сравнивает его с фотографией на предоставленном документе, будь то паспорт, водительские права или пропуск, а также делает liveness проверку, т.е. проверяет реальность человека перед камерой, предлагая ему выполнить несколько простых жестов: повороты головы и подмигивания. Бонусом модуль сканирует сфотографированный документ и выгружает из него важные данные - имя и фамилия, дата рождения, пол, номер и серия документа.

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

Наша задача состояла из двух частей: реализация распознавания паспортов и распознавания лиц.

Распознавание паспортов

Основным инструментом для распознавания документов стал Google Vision API, распознающий текст на любом языке и создающий bounding box вокруг каждого слова. Данный сервис условно бесплатен и позволяет сканировать до 1000 изображений в месяц без оплаты. Гугл мы тренировали на румынских паспортах: именно их почему-то больше всего в интернете.

Для начала, на предоставленном пользователем фото паспорта мы с помощью OpenCV определяем контур паспорта, его “рабочую область”. Данное выделение не всегда может проходить гладко, например, если фото сделано на пестром фоне или рядом есть другие объекты. В таком случае мы находим самый большой контур и считаем, что это и есть паспорт.

Полученное изображение передается Google Vision, который определяет и выделяет отдельно каждое слово. После этого выполняется поиск ключевых слов, которыми в данном случае являются названия полей: “Имя”, “Фамилия”, “Место рождения” и прочее.

В мире ~193 страны, и каждая из них выпускает паспорта с теми данными, которыми захочет. Ключевые слова для каждого вида ID могут быть разными и находиться в разных местах. Для решения нашей задачи было целесообразно (и достаточно) вручную собрать ключевые слова с паспортов тех стран, которые были нам интересны. Однако если бы мы разрабатывали приложение-космополит, то здесь нужно было бы искать другой подход.

Для каждого типа паспорта (в нашем случае тип - это страна) существует конфигурационный файл, в котором заданы:

  • Ключевые слова, т.е. названия полей
  • Пробелы и межстрочные интервалы

Немного о пробелах

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

Зная размер пробелов и межстрочных интервалов паспортов определенного типа, мы знаем, насколько нужно отступить вправо или вниз для поиска значения ключевого слова. Размер пробелов и интервалов определяется не абсолютно, а относительно (в зависимости от размера изображения).

Полученные данные выгружаем в формате json “слово - значение”.

Работа с лицом

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

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

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

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

Человек или фотография

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

Благодаря Google ML Kit данный функционал реализуется довольно быстро и просто; в нашем приложении мы просим пользователя повернуть голову налево и направо, подмигнуть левым и правым глазом, а в конце улыбнуться.

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

Результаты

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

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

другие наши проекты

Мобильное фитнес-приложение Activ5

Мобильное фитнес-приложение Activ5

Мобильное приложение с дополненной реальностью по достопримечательностям Новосибирска

Мобильное приложение с дополненной реальностью по достопримечательностям Новосибирска

Виртуальные билборды на Мальте

Виртуальные билборды на Мальте

Мобильное приложение для диагностики авто и быстрого поиска СТО для ремонта

Мобильное приложение для диагностики авто и быстрого поиска СТО для ремонта

Мобильное приложение по доставке багажа из Американских аэропортов

Мобильное приложение по доставке багажа из Американских аэропортов

Система управления патрульными службами полиции

Система управления патрульными службами полиции

Интерактивная карта НГУ

Интерактивная карта НГУ

Интерактивная Карта Офиса

Интерактивная Карта Офиса

Адаптация SharePoint под мобильные устройства

Адаптация SharePoint под мобильные устройства

Мобильное приложение Straw для быстрого создания опросов

Мобильное приложение Straw для быстрого создания опросов

Система Сопровождения Контрактов (ССК)

Система Сопровождения Контрактов (ССК)

Дополненяем реальность для Метрополитен-музея (США)

Дополненяем реальность для Метрополитен-музея (США)

Давайте найдем решение для вашего бизнеса!

Давайте найдем решение для вашего бизнеса!

Пожалуйста, заполните 'Имя'
Пожалуйста, заполните 'Телефон'
Пожалуйста, заполните 'Емейл'
Пожалуйста, заполните 'Сообщение'

Пожалуйста, заполните 'Имя и фамилия'
Пожалуйста, заполните 'Телефон'
Пожалуйста, заполните 'Емейл'
Выберите файл
Пожалуйста, выберите файл 'Резюме'
Выберите файл
Пожалуйста, прикрепите файл 'Код / ТЗ'