Реализация распознавания лиц в мобильном приложении
Приложение для верификации клиентов требует точной биометрии, но неправильный антиспуфинг превращает систему в фильтр для фото с экрана. Юридические риски не меньше: неучтённые требования GDPR или 152-ФЗ — прямая дорога к блокировке приложения в сторах. Мы решаем оба уровня задачи — от детекции до compliance — под ключ.
Типичная картина: разработчик интегрирует ML Kit для детекции, извлекает face embedding через FaceNet и на этом останавливается. Первый же security review показывает, что система пропускает распечатанную фотографию. А App Store Review отклоняет билд из-за отсутствия явного согласия на сбор биометрии. Чтобы избежать таких проблем, пайплайн нужно строить с учётом трёх обязательных шагов: детекция + alignment, embedding, антиспуфинг — и compliance-аудита.
Наш опыт показывает: без разделения пайплайна на независимые шаги невозможно получить стабильный результат на разных устройствах и освещении. Ниже — как мы это делаем.
Как устроен пайплайн распознавания лиц?
Пайплайн состоит из трёх последовательных шагов:
- Детекция — найти лицо в кадре, получить bounding box и ключевые точки (landmarks).
- Верификация/идентификация — получить face embedding (128- или 512-мерный вектор) и сравнить с базой эталонов.
- Антиспуфинг — убедиться, что перед камерой живой человек, а не фото/видео/маска.
Пропустить третий шаг — значит создать систему, которую обходит любая распечатанная фотография. Даже базовый пассивный антиспуфинг отсеивает 70–80% простых атак.
Детекция и landmarks
Выбор библиотеки зависит от платформы и требований к точности. Сравним два основных подхода:
| Фреймворк | Платформа | Точность landmarks | Время инференса | Особенности |
|---|---|---|---|---|
| Vision Framework | iOS | 76 ключевых точек | 8–15 ms на iPhone 12 | Встроенный, не требует сети, работает как с ML-моделями |
| ML Kit Face Detection | Android | до 468 точек (contour detection) | 15–30 ms на Pixel 6 | Необходим Google Play Services; детекция доступна в режиме ACCURATE |
На iOS: VNDetectFaceLandmarksRequest из Vision framework. Возвращает VNFaceObservation с landmarks (76 точек: контур лица, брови, нос, губы, глаза) и boundingBox. Работает on-device, без сети, ~8–15 ms на iPhone 12.
На Android: ML Kit Face Detection с FaceDetectorOptions.ACCURATE. Возвращает FirebaseFace с 468 точками при включённом setContourDetectionEnabled(true) — это полноценный face mesh. Тяжелее, но нужен для точного выравнивания лица перед embedding.
Face alignment перед инференсом embedding-модели критичен. Без выравнивания по глазам точность face recognition падает на 15–25%. Геометрически: находим центры глаз, вычисляем угол поворота, аффинная трансформация к стандартному положению (глаза на высоте 1/3 от верха, симметрично).
Embedding и сравнение
Стандарт — FaceNet (128D) или ArcFace (512D). FaceNet из коробки доступен как TFLite-модель. ArcFace — более точный, но тяжелее. Для мобиля: FaceNet INT8 — 12 MB, инференс ~35 ms на Pixel 6.
Косинусное расстояние между векторами — основная метрика. Threshold для «одно лицо»: обычно cosine similarity > 0.75. Порог подбирается под конкретный датасет — это не универсальная константа.
Хранение эталонных embeddings: в зашифрованном Keychain (iOS) или EncryptedSharedPreferences / Android Keystore (Android). Никогда — исходные фотографии. Embedding необратим (теоретически), фотография — нет.
Как работает антиспуфинг?
Два подхода:
| Тип | Принцип | Производительность | Защита от 3D-масок |
|---|---|---|---|
| Пассивный | Анализ текстуры кожи, оптические артефакты | <10 ms, без участия пользователя | Слабая (30-40% false accept) |
| Активный | Challenge-response: моргнуть, повернуть голову | 50-200 ms, требует UX | Сильная (до 98% детекции атак) |
Пассивный антиспуфинг быстрее, но активный надёжнее в 2 раза против 3D-масок. Для банковских и финтех-приложений рекомендуем комбинацию: пассивный + активный challenge. Для корпоративного доступа пассивный достаточен. Получите консультацию, чтобы подобрать оптимальный метод под ваш сценарий.
Что нужно для compliance?
Биометрические данные (face embedding — это биометрия согласно GDPR ст. 9 и 152-ФЗ ст. 11) требуют явного согласия пользователя, отдельного от общего Terms of Service. Хранить embeddings в облаке можно только с шифрованием в транзите и at rest и при наличии DPA с провайдером. Если приложение работает в РФ с российскими пользователями — требования 152-ФЗ об локализации данных.
В App Store Review Guidelines п. 5.1.1 прямо запрещает собирать биометрию без явного разрешения. Отказ в ревью по этому пункту — не редкость. Закажите аудит compliance на старте — это сэкономит недели доработок.
Что входит в работу
Реализация включает:
- Интеграцию детектора (Vision / ML Kit) и выбор модели embedding (FaceNet / ArcFace)
- Разработку активного или пассивного антиспуфинга
- Настройку зашифрованного хранилища эталонов
- Подготовку compliance-документации (согласия, DPA)
- Тестирование на 100+ образцов атак (фото, видео, маска)
- Деплой в App Store / Google Play с сопровождением ревью
- Исходный код, документацию и обучение команды
Сроки и гарантии
Детекция + идентификация on-device без антиспуфинга — 1–2 недели. Полный пайплайн с антиспуфингом, зашифрованным хранилищем и compliance-аудитом — 3–4 недели. Стоимость рассчитывается индивидуально.
Мы гарантируем точность не менее 95% FAR при 0.1% FRR на референсном датасете (уточняется под задачу). У нас 5+ лет и 20+ проектов с биометрией в банках и фискальных системах. Свяжитесь, чтобы получить консультацию и оценить план интеграции под ваш продукт.







