Реалізація розпізнавання та трекінгу обличчя (Face Tracking) в AR-додатку
Face tracking у мобільних додатках — дозріла технологія з чітко окреслними можливостями та обмеженнями. ARKit з TrueDepth камерою дає depth map обличчя з точністю до міліметра. ARCore AugmentedFace та MediaPipe працюють на RGB-камері та трохи гірше на русі, зате на будь-якому пристрої. Вибір залежить від задачі — і помилитись з вибором стеку легко.
ARKit Face Tracking: що конкретно отримуємо
ARFaceTrackingConfiguration — вимагає iPhone X або новіше (TrueDepth фронтальна камера). Повертає ARFaceAnchor:
geometry — ARFaceGeometry з 1220 вершинами та 2304 трикутниками. Меш обличчя у реальному масштабі (у метрах). Оновлюється ~30 разів на секунду. Кожна вершина має фіксований індекс — можна конкретно адресувати кінчик носа (vertex ~9), куточки рота (~37, ~45), зіниці.
blendShapes — словник з 52 AR face blend shape коефіцієнтів. browDownLeft, eyeBlinkLeft, jawOpen, mouthSmileLeft і т.д. Кожен — Float від 0 до 1. Це основа для face-driven анімації (morph targets, 3D аватари) та розпізнавання виразів.
leftEyeTransform, rightEyeTransform — позиція та орієнтація кожного ока. Для eye tracking та gaze direction.
func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
guard let faceAnchor = anchors.first as? ARFaceAnchor else { return }
let blinkLeft = faceAnchor.blendShapes[.eyeBlinkLeft]?.floatValue ?? 0
let jawOpen = faceAnchor.blendShapes[.jawOpen]?.floatValue ?? 0
// Управління інтерфейсом морганням/ротом
if blinkLeft > 0.7 { triggerAction() }
}
ARCore AugmentedFace та MediaPipe
ARCore AugmentedFace (iOS не підтримується, тільки Android): 468 точок face mesh через ML-модель на RGB-камері. AugmentedFace.RegionType — NOSE_TIP, FOREHEAD_RIGHT, FOREHEAD_LEFT для ключових точок. Менше точок ніж ARKit, немає depth map, але працює на 85% Android-флагманів без спеціального сенсора.
MediaPipe Face Landmark Task — крос-платформений варіант (iOS, Android, Web). 478 точок. Працює через VisionImage / MPImage. Відкритий вихідний код, безплатно. Для задач без strict realtime вимог (аналіз фотографій, статичні фільтри) — відмінний вибір. Для 30fps live camera — вимагає пристрою з Neural Engine (iPhone) або сучасного Android ML-прискорювача.
Класифікація та розпізнавання виразів
Базові задачи на blendShapes без ML:
- Посмішка:
mouthSmileLeft + mouthSmileRight > 0.5 - Підморгування:
eyeBlinkLeft > 0.85приeyeBlinkRight < 0.3 - Здивування:
eyeWideLeft + eyeWideRight > 1.2+browInnerUp > 0.5 - Відкритий рот:
jawOpen > 0.4
Це працює для простих тригерів — ігрової механіки, управління інтерфейсом без рук. Для розпізнавання емоцій (радість, грусть, злість) — потрібна ML-класифікація поверх blendShapes. CreateML дозволяє навчити MLMultiArrayClassifier на записаних blendShape-послідовностях.
Розпізнавання конкретної особи
Face Recognition (верифікація особистості) — принципово інша задача, не покривається face tracking. Для ідентифікації: Vision framework VNDetectFaceRectanglesRequest + VNRecognizeAnimalsRequest → face embedding через CoreML модель (ArcFace, FaceNet, або Apple's own). Порівняння embedding векторів з базою.
В iOS 15+ — LocalAuthentication з LAContext.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics) для Face ID. Це не SDK для вашої логіки — це системна біометрія. Використовувати системний Face ID для верифікації користувача в додатку простіше та безпечніше, ніж будувати свій.
Затримка та продуктивність
ARKit face tracking + 3D маска + environment occlusion на iPhone 12 — ~8–12% CPU, ~30% GPU при 60fps UI. На iPhone XR (A12) — споживання вище, іноді thermal throttling при довгих сеансах. Моніторити через os_signpost + Instruments → Metal System Trace.
Дві камери одночасно (фронт + задня) — не підтримуються через стандартні AR конфігурації. Для selfie AR потрібно перевірити ARFaceTrackingConfiguration.supportedVideoFormats — перевірити доступні розрізнення.
Сроки
Face tracking з базовими blendShape-тригерами (ігрова механіка, управління без рук) — 1–2 тижні. Face tracking + 3D-маска/аксесуари + запис відео — 2–4 тижні. Розпізнавання виразів через ML-класифікатор — плюс 2–3 тижні. Вартість розраховується індивідуально.







