Face Detection — это технология компьютерного зрения для нахождения и локализации человеческих лиц на цифровых изображениях и видеопотоке. В отличие от Face Recognition (распознавание личности), Face Detection лишь определяет наличие лица и его границы — bounding box и keypoints (глаза, нос, рот). В мобильной разработке Face Detection используется в ML Kit, ARKit, Vision Framework и OpenCV. По данным Google ML Kit, 2025, детекция лиц выполняется за 5–15 мс на современных устройствах с точностью 98%.
Главное
Face Detection — задача компьютерного зрения по определению наличия и местоположения человеческих лиц на изображении. Алгоритм возвращает bounding box (прямоугольник вокруг лица) и confidence score (вероятность, что это лицо). Современные алгоритмы также возвращают facial landmarks — ключевые точки (глаза, брови, нос, рот, контур лица). Face Detection — первый этап для многих ML-задач: распознавание личности, AR-фильтры, аналитика внимания.
История алгоритмов началась с Viola-Jones (2001) — каскад Haar-подобных признаков на CPU. В 2010-х доминировали HOG + SVM (Histogram of Oriented Gradients). С 2016 года все современные алгоритмы — на свёрточных нейросетях (CNN): MTCNN, RetinaFace, SSH, MobileNet-SSD, YOLO-Face. CNN-алгоритмы на GPU дают 95–99% точности против 85–90% у классических методов. По данным benchmark WiderFace (2025), RetinaFace показывает mAP 96.3% на hardest subset.
MTCNN (Multi-Task Cascaded CNN) — классический трёхступенчатый детектор: P-Net (Proposal Network) находит кандидаты, R-Net (Refine Network) фильтрует, O-Net (Output Network) уточняет bounding box и выводит landmarks. MTCNN работает на CPU со скоростью 30–50 мс на кадр при разрешении 640x480. Для мобильных устройств MTCNN — оптимальный баланс скорости и точности без GPU.
| Алгоритм | Точность (WiderFace) | Скорость (640x480) | Платформа |
|---|---|---|---|
| RetinaFace | 96.3% | 15 мс (GPU) | Android, iOS |
| MTCNN | 91.2% | 30–50 мс (CPU) | Кроссплатформа |
| ML Kit | 98.0% | 5–15 мс (GPU/NPU) | Android, iOS |
| OpenCV Haar | 82.5% | 5–10 мс (CPU) | Кроссплатформа |
Real-time Face Detection требует 30+ FPS для видео. Это достижимо на современных смартфонах благодаря NPU (Neural Processing Unit) — Qualcomm Hexagon, Apple Neural Engine, MediaTek APU. NPU выполняет детекцию за 2–5 мс при энергопотреблении 50–100 мВт, в то время как GPU потребляет 500–2000 мВт. Для постоянной детекции (камера всегда включена) NPU — единственный практичный вариант без перегрева устройства.
ML Kit Face Detection — самый популярный SDK для обнаружения лиц на мобильных устройствах. ML Kit предлагает два режима: contour mode (468 точек контура лица для точного наложения масок) и classification mode (определение эмоций: улыбка, открытые глаза, открытый рот). Режимы комбинируются в FaceDetectorOptions. ML Kit использует Google-нейросеть MobileNetV2-SSD с оптимизацией через NNAPI/GPU Delegate.
Настройка ML Kit Face Detection: setPerformanceMode(FACE_DETECTION_FAST / ACCURATE), setLandmarkMode (ключевые точки), setContourMode (контурные точки), setClassificationMode (эмоции). Для максимальной скорости используйте FAST + LANDMARKS_ONLY + без контура. Для AR-фильтров — ACCURATE + ALL_CONTOURS. По данным Google (2025), FAST режим даёт 98% точности при 5 мс, ACCURATE — 99% при 15 мс.
// ML Kit Face Detection with contours
val options = FaceDetectorOptions.Builder()
.setContourMode(FaceDetectorOptions.ContourMode.ALL)
.setClassificationMode(FaceDetectorOptions.ClassificationMode.ALL)
.setPerformanceMode(FaceDetectorOptions.PerformanceMode.FAST)
.enableTracking()
.build()
val detector = FaceDetection.getClient(options)
detector.process(inputImage)
.addOnSuccessListener { faces ->
faces.forEach { face ->
val trackingId = face.trackingId
val smile = face.smilingProbability
val leftEyeOpen = face.leftEyeOpenProbability
}
}
Face Tracking в ML Kit — уникальная фича для видеопотока. Каждому обнаруженному лицу присваивается tracking ID (целое число), которое сохраняется между кадрами. Это позволяет привязывать AR-объекты к конкретному лицу без повторного детектирования. Трекер использует Optical Flow и удерживает ID даже при частичном заслонении лица. Tracking ID сбрасывается, когда лицо покидает кадр более чем на 1 секунду.
Apple Vision Framework — нативный iOS-фреймворк для Face Detection, работающий через Core ML на Apple Neural Engine. Vision предоставляет VNDetectFaceRectanglesRequest (только bounding box) и VNDetectFaceLandmarksRequest (с контурными точками). Vision Framework встроен в iOS начиная с iOS 11 и не требует дополнительных SDK — это часть Foundation.
Преимущества Vision Framework: нулевая зависимость от сторонних библиотек, работа через Apple Neural Engine (ANE) на чипах A12+, автоматическая обработка ориентации изображения через exifOrientation, поддержка CIDetectorAccuracy для настройки скорости/точности. Vision возвращает VNFaceObservation с bounding box (нормализованные координаты 0..1) и landmarks (VNFaceLandmarkRegion2D).
Vision vs ML Kit на iOS: Vision быстрее на старых устройствах (A12–A15), так как использует нативные нейронные движки Apple. ML Kit использует Google-модели и может быть точнее на сложных ракурсах (профиль, сильный наклон). Для простой детекции (камера, фото) — Vision. Для AR-фильтров и контурных масок — ML Kit (468 точек vs 76 точек у Vision).
import Vision
let request = VNDetectFaceRectanglesRequest { request, error in
guard let observations = request.results as? [VNFaceObservation] else { return }
for face in observations {
let rect = face.boundingBox // normalized 0..1
let confidence = face.confidence
}
}
let handler = VNImageRequestHandler(
cgImage: cgImage, orientation: .up, options: [:]
)
try handler.perform([request])
VNDetectFaceLandmarksRequest — расширенная версия для ключевых точек. Возвращает VNFaceLandmarkRegion2D для каждой группы точек: leftEye, rightEye, nose, faceContour, innerLips, outerLips. Каждая группа — массив CGPoint (нормализованные). Vision не возвращает 468 точек как ML Kit — только 76 ключевых. Для точной маски лица ML Kit предпочтительнее, для базовой — Vision.
OpenCV Haar Cascade — классический алгоритм Face Detection на основе каскада Haar-подобных признаков (Viola-Jones, 2001). Несмотря на возраст, Haar Cascade до сих пор используется в проектах с ограниченными ресурсами: Raspberry Pi, IoT-устройства, embedded systems. Алгоритм не требует GPU или NPU — работает на любом CPU со скоростью 5–15 мс на кадр VGA-разрешения.
LBP Cascade (Local Binary Patterns) — альтернатива Haar Cascade в OpenCV. LBP быстрее (2–5 мс) и менее чувствителен к освещению, но даёт больше false positives. Haar точнее (85–90% против 80–85% у LBP), но чувствителен к бликам и теням. Для мобильных приложений OpenCV Face Detection уступает нейросетевым методам по точности, но выигрывает по совместимости — работает на любом устройстве.
// OpenCV Face Detection via CascadeClassifier
val cascadeFile = File(context.filesDir, "haarcascade_frontalface_default.xml")
val faceDetector = CascadeClassifier(cascadeFile.absolutePath)
val gray = Mat()
Imgproc.cvtColor(colorFrame, gray, Imgproc.COLOR_RGBA2GRAY)
val faces = MatOfRect()
faceDetector.detectMultiScale(gray, faces)
faces.toList().forEach { rect ->
// rect = face bounding box
}
Недостатки OpenCV: высокий false positive rate (до 15%), плохая работа с профильными ракурсами (>30° — падение точности до 50%), отсутствие landmarks без дополнительной модели, нет трекинга между кадрами. Для современных мобильных приложений OpenCV Face Detection — fallback для устройств без Google Play Services (Huawei, Amazon Fire). Для основных сценариев — ML Kit или Vision.
Face Detection — определение наличия и положения лица на изображении. Результат: bounding box и ключевые точки. Face Recognition — идентификация личности по лицу: определение, что это лицо принадлежит конкретному человеку. Face Recognition использует эмбеддинги (вектор чисел, представляющий лицо) и сравнивает их с базой известных лиц. Face Detection — обязательный первый этап для Face Recognition.
Технологии Face Recognition: FaceNet (Google, 2015) — triplet loss для обучения эмбеддингов размером 128–512 float-значений, ArcFace (2019) — additive angular margin loss, лучшая точность (99.83% на LFW). Для мобильных приложений Face Recognition требует кастомной TFLite-модели — ML Kit не предоставляет готового API для идентификации личности (только детекцию).
Privacy на мобильных устройствах: Face Detection безопасен — не хранит данные о пользователе. Face Recognition требует хранения эмбеддингов или фотографий для сравнения. Apple требует явного согласия пользователя на Face Recognition и запрещает использование для рекламы. Google ML Kit намеренно не включает Face Recognition, чтобы избежать privacy-рисков. Для детекции без идентификации — ограничений нет.
| Характеристика | Face Detection | Face Recognition |
|---|---|---|
| Результат | Где лицо на фото | Кому принадлежит лицо |
| Алгоритмы | MTCNN, RetinaFace, ML Kit | FaceNet, ArcFace, DeepFace |
| Хранение | Не требуется | База эмбеддингов |
| Privacy | Низкий риск | GDPR, CCPA ограничения |
Face Liveness Detection — дополнительная проверка, что лицо реальное (не фото/видео). Использует анализ движения глаз (blink detection), микро-мимику, depth map (3D-камера). Liveness Detection обязательна для банковских и платёжных приложений. В ML Kit нет встроенной liveness — используйте кастомную модель или Google Play Integrity API для проверки.
AR-фильтры и маски — самое популярное применение Face Detection. На основе контурных точек лица (468 точек) накладываются 3D-маски, шляпы, очки, усы. ML Kit Face Detection + SceneKit (iOS) или Filament (Android) создаёт real-time AR-опыт. Snapchat и Instagram используют собственные детекторы на базе MobileNet + MTCNN. Для кастомных AR-фильтров достаточно ML Kit и 3D-движка.
Фото-редакторы и ретушь — Face Detection определяет область лица для автоматической коррекции: выравнивание цвета кожи, удаление дефектов, улучшение глаз и зубов. OpenCV + ML Kit Face Detection даёт координаты для Selective Gaussian Blur (сглаживание кожи) и контрастность глаз. Реальное применение — приложения Facetune, BeautyPlus, YouCam Makeup.
Контроль внимания — определение направления взгляда (gaze detection). Face Detection возвращает bounding box и landmarks глаз. По положению зрачка относительно глаза определяется, куда смотрит пользователь: в экран, влево, вправо, вверх. Применяется в e-learning (контроль, что студент смотрит в лекцию), рекламе (Attention-метрики), водительских ассистентах (контроль усталости).
// ARKit + Vision for AR filter
let faceLandmarksRequest = VNDetectFaceLandmarksRequest { req, _ in
guard let face = req.results?.first as? VNFaceObservation else { return }
if let leftEye = face.landmarks?.leftEye {
// AR object overlay on left eye
}
}
let handler = VNSequenceRequestHandler()
for pixelBuffer in videoStream {
try handler.perform([faceLandmarksRequest], on: pixelBuffer)
}
Медицина и wellness — Face Detection используется для анализа асимметрии лица (диагностика неврологических нарушений), оценки пульса по микровибрациям кожи (photoplethysmography через камеру), определения увлажнённости кожи. ML Kit Face Detection + OpenCV дают достаточно точности для preliminary screening без медицинского сертифицирования. Для production-медицины требуется FDA/CE сертификация.
Часто задаваемые вопросы
Face Detection — находит лицо на изображении и возвращает его границы (координаты прямоугольника). Face Recognition — определяет, чьё это лицо, сравнивая с базой известных лиц. Детекция — первый шаг для распознавания. ML Kit и Vision Framework предоставляют только Face Detection. Для распознавания нужна кастомная TFLite-модель (FaceNet, ArcFace) + база эмбеддингов на устройстве.
ML Kit Face Detection — самый быстрый на современных устройствах (5–15 мс на кадр) благодаря NNAPI/GPU Delegate. Apple Vision Framework — быстрее на iOS (A12+ через ANE) — 3–10 мс. OpenCV Haar Cascade — 5–10 мск на CPU, но ниже точность (82% против 98% у ML Kit). На устройствах с NPU (Snapdragon 8 Gen 3, Apple A17 Pro) ML Kit и Vision выполняют детекцию за 2–5 мс.
ML Kit и Vision Framework корректно работают с очками (включая затемнённые) и медицинскими масками. Точность детекции при маске падает с 98% до 90–92%, но лицо всё равно обнаруживается по верхней части (глаза, брови, лоб). Контурные точки (контур лица) становятся менее точными — для масок используйте только classification mode (улыбка, открытые глаза) без контура.
Да, Face Detection в реальном времени поддерживается всеми современными SDK. ML Kit — до 60 FPS на кадр 480p через CameraX Analyzer. Apple Vision — до 30 FPS на iOS через AVFoundation. Для real-time используйте FAST performance mode, уменьшите разрешение до 480p и включите face tracking (ML Kit) для сохранения ID между кадрами без повторного детектирования каждого кадра.
Нет, все современные мобильные Face Detection SDK работают полностью on-device. ML Kit загружает модель через Google Play Services при первом запуске (если выбран downloaded-режим), после чего работает офлайн. Apple Vision Framework — встроен в iOS, не требует интернета. OpenCV — полностью офлайн. Для облачных API (Google Cloud Vision, AWS Rekognition) интернет нужен, но они не используются в мобильных приложениях для real-time.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также