Реалізація розпізнавання облич у мобільних додатках
Розпізнавання облич у мобільному додатку технічно є однією з найскладніших завдань комп'ютерного зору, юридично однією з найчутливіших. Неправильно реалізований anti-spoofing відкриває уразливість для bypass через фотографію. Невідповідність GDPR або місцевим нормативам стає нормативною проблемою. Ми розглядаємо обидва.
Архітектура системи розпізнавання облич
Конвеєр розпізнавання складається з трьох незалежних кроків:
- Детекція — знайти обличчя в кадрі, отримати bounding box та landmarks.
- Верифікація/ідентифікація — отримати face embedding (128- або 512-розмірний вектор) та порівняти з базою еталонів.
- Anti-spoofing — переконатися, що це жива людина, а не фото/відео/маска.
Пропуск третього кроку створює систему, яку обходить будь-яка надрукована фотографія.
Детекція та landmarks
На 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, не просто keypoints. Важче, але потрібна для точного вирівнювання обличчя перед embedding.
Face alignment перед infer embedding критично. Без eye-aligned alignment точність face recognition падає на 15–25%. Геометрично: знайти центри очей, обрахувати кут обертання, афінна трансформація до стандартного положення (очі на 1/3 від верхівки, симетрично).
Embedding та порівняння
Стандартні варіанти: FaceNet (128D) або ArcFace (512D). FaceNet доступна як TFLite модель. ArcFace точніша, але важча. Для мобіля: FaceNet INT8 — 12 MB, ~35 ms infer на Pixel 6.
Косинусна дистанція між векторами — основна метрика. Поріг для "одне обличчя": зазвичай cosine similarity > 0.75. Поріг специфічний для датасету, не універсальний.
Зберігайте reference embeddings в зашифрованому Keychain (iOS) або EncryptedSharedPreferences / Android Keystore (Android). Ніколи не зберігайте оригінальні фото. Embeddings теоретично необоротні; фото — ні.
Anti-spoofing: критичне
Два підходи:
Пасивний — модель аналізує текстуру шкіри та оптичні артефакти фото/екрану. MiniFASNet, Silent-Face-Anti-Spoofing. Працює без дій користувача, але слабший проти 3D-масок.
Активний — challenge-response: "моргніть", "поверніть голову вліво". Реалізація: послідовність VNDetectFaceLandmarksRequest з аналізом Eye Aspect Ratio (EAR) для виявлення морганння, або Head Pose Estimation через VNFaceObservation.yaw/roll/pitch.
Для банківських та fintech додатків комбінуйте: пасивний anti-spoofing + активний challenge. Для корпоративного доступу пасивного достатньо.
Нормативні вимоги
Біометричні дані (face embedding є біометрією за GDPR статтею 9 та місцевими нормативами) потребують явної згоди користувача окремо від загального ToS. Зберігання embeddings у хмарі потребує шифрування в транзиті та в спокої, плюс DPA з провайдером. Додатки в регульованих юрисдикціях стикаються з додатковими вимогами локалізації даних.
App Store Review Guidelines розділ 5.1.1 явно забороняє збирати біометрію без дозволу. Відмова в review з цього пункту частіша.
Часові рамки
Детекція + ідентифікація on-device без anti-spoofing: 1–2 тижні. Повний конвеєр з anti-spoofing, зашифрованим зберіганням еталонів та compliance audit: 3–4 тижні. Вартість розраховується індивідуально.







