Реализация распознавания лиц (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 недели. Стоимость рассчитывается индивидуально.







