Привет, Хабр! Говоря о проверке возраста для доступа к онлайн-платформам, нельзя обойти стороной один из наиболее очевидных кейсов: мессенджеры. Они давно вышли за рамки простого обмена сообщениями – и для многих новых функций есть конкретные возрастные ограничения. В этой статье мы поговорим о том, как за пару минут интегрировать распознавание паспорта для удобной возрастной идентификации в мини-приложение мессенджера – без биометрии, ЕБС и раскрытия персональных данных. С кодом и видео. В общем, заглядывайте под кат!

Верификация возраста в мессенджерах – зачем и как это реализовать
За последние пару лет регуляторное давление на онлайн-платформы заметно усилилось. Для многих финансовых сервисов, шеринговых и игровых платформ, онлайн-кинотеатров или агрегаторов билетов возрастная идентификация уже стала обязательным элементом контроля доступа. Для мессенджеров – с учетом интеграции в них новых возможностей – эта задача актуальна для доступа к определенному контенту. Сегодня такие механизмы глобально применяют, например, WeChat, Discord, Snapchat и ряд других платформ.
Суть технической проблемы одна и та же: нужно максимально достоверно убедиться, что пользователю действительно исполнилось N лет, за минимальное количество действий. Одним из способов решения этой задачи является проверка возраста по документу, удостоверяющему личность: паспорту, загранпаспорту или водительскому удостоверению. Такой метод позволяет подтвердить возраст без использования биометрии, раскрытия персональных данных и переходов в сторонние сервисы.
При грамотной реализации – с локальной обработкой документа на стороне клиента и возвращении токена – проверка может осуществляться полностью анонимно. А использование антифрод-технологий и небиометрической сверки лиц дает возможность удостовериться, что пользователь не использует чужой документ, дипфейк или подделку. Вот как работают распознавание паспорта и небиометрическая сверка лиц на примере мини-приложения в Telegram:
Причем для подтверждения возраста можно предъявить не только паспорт РФ, но и удостоверяющий личность документ любой другой страны, содержащий возрастной атрибут и фото для небиометрической сверки. Об этом мы подробнее писали здесь. Теперь же перейдем к мессенджерам. Встроить туда распознавание документов можно с помощью механизма мини-приложений.
Миниаппы: когда мессенджер становится платформой
Мини-приложения (миниаппы) – это встроенные веб-приложения, работающие прямо внутри мессенджера. Такие приложения интегрируются с API мессенджера и используют встроенные механизмы авторизации, уведомлений и платежей. Пользователь не скачивает ничего отдельно: он открывает бот или ссылку и сразу попадает в интерфейс целевого сервиса – прямо в окне мессенджера.
Сегодня миниаппы есть почти во всех социальных сетях и мессенджерах, включая VK, MAX и Telegram. Они хороши тем, что доступны в один тап, лишены барьеров в виде загрузки отдельных нативных приложений и работают везде, где есть мессенджер. С точки зрения онлайн-сервисов миниаппы позволяют интегрировать достаточно обширный функционал классических приложений на уже готовую платформу с, как правило, немалой аудиторией. Например, только у одного Telegram месячная аудитория – около 96 млн пользователей в России (данные Mediascope).
Кроме того, разработка мини-приложений значительно дешевле нативной разработки. По сути, один веб-стек покрывает iOS, Android и десктоп разом. При этом от компании не требуется ни поддерживать приложения в AppStore и Google Play, ни изобретать способы обойти блокировку в случае таковой. Последняя причина особенно актуальна для российских банков, которые также активно интегрируют в мессенджеры ежедневные клиентские сервисы.
Но по-настоящему интересными миниаппы становятся тогда, когда речь заходит не просто о пользовательских сервисах, а о выполнении сложных вычислительных операций. Одной из таковых является распознавание документов на изображениях и в видеопотоке – для интеграции проверки возраста прямо в мессенджер.
WebAssembly – ключ к распознаванию в вебе
Для переноса распознавания данных с камеры в среду мессенджеров мы в Smart Engines используем WebAssembly. Именно Wasm предлагает исключительную для веб-задач производительность, открывает возможности легкого интегрирования нативно исполняемых функций в веб-версии приложений и позволяет значительно упростить решение технически сложных задач прямо в браузере. Стандартные веб-страницы без дополнений в виде модулей Wasm просто не умеют получать и обрабатывать данные с камеры смартфона.
Наши технологии, запускаемые в браузере с помощью WebAssembly, позволяют обрабатывать фотографии и видеопоток с камеры непосредственно на устройстве пользователя, задействуя ресурсы браузера. Это позволяет распознавать данные на устройстве самого пользователя, не передавая изображения даже на внешний сервер компании, не говоря уж об облачных сервисах. Еще в 2019 году мы добились сопоставимой с нативными SDK скорости распознавания паспортов, QR-кодов и банковских карт прямо в браузере. Сейчас эти возможности доступны и в миниаппах. Ниже показываем, как это реализовать.
Реализация: код интеграции
Наш основной продукт – библиотека компьютерного зрения. Поскольку она написана на С++, для переноса кодовой базы в браузер мы используем инструмент emscripten, поддерживаемый google. На выходе мы получаем Wasm файл и js файл для работы с ним.
// Инициализируем wasm модульconst SE = await SmartIDEngine(module);// Создаем инстанс библиотеки распознаванияlet ENGINE = createEngine(SE, {});// Создание настроек сессии распознаванияlet sessionSettings = engine.CreateSessionSettings();
Указываем режим распознавания и маску документа. Можно указать маску звездочкой “*”, а режим “anydoc”, тогда поиск будет осуществляться по всем доступным документам.
sessionSettings.SetCurrentMode(“anydoc”);sessionSettings.AddEnabledDocumentTypes(“*”);
Следующая настройка позволяет вернуть в результате изображение документа, исправленное по перспективе (утюг) и обрезанным по пропорциям физического документа.
sessionSettings.SetOption("common.extractTemplateImages", "true");
Теперь мы инициализируем сессию.
let spawnedSession = engine.SpawnSession(sessionSettings, signature);// Передадим изображение на распознавание.const result = spawnedSession.Process(image);// Освобождение ресурсовimage.delete();result.delete();spawnedSession.Reset();
Результат – объект с именованными полями документа: ФИО, дата рождения, серия и номер и т.д. Плюс изображения (фото, подпись, шаблон документа). Структура ответа гибкая: можно собрать JSON с нужным набором полей – с коэффициентами уверенности, с изображениями или без, с метаданными.
Повторимся, при Wasm-распознавании все происходит локально. Персональные данные и изображения документа не покидают устройство пользователя. Это принципиально отличает подход от решений, основанных на загрузке фото на сервер или облачный сервис для обработки.
Итого
Как можно убедиться, интеграция технологии Smart Engines в мессенджеры осуществляется быстро и просто. Универсальность архитектуры и глубокая оптимизация нейросетевого стека позволяет встраивать распознавание документов в любой мессенджер, где есть возможность создавать сторонние мини-приложения. Таким образом, добавить верификацию возраста можно и в Telegram, и в MAX, и в VK, и в любой мессенджер.
Если вы разрабатываете миниапп или веб-сервис, где требуется (или может потребоваться) проверка возраста – Wasm-подход с нашим SDK позволяет решить задачу без сервера, GPU и раскрытия персональных данных.
ссылка на оригинал статьи https://habr.com/ru/articles/1046608/