Face Detection es una tecnología de visión por computadora para encontrar y localizar rostros humanos en imágenes digitales y transmisiones de video. A diferencia de Face Recognition (identificación de personas), Face Detection solo determina la presencia de un rostro y sus límites — bounding box y keypoints (ojos, nariz, boca). En el desarrollo móvil, Face Detection se utiliza en ML Kit, ARKit, Vision Framework y OpenCV. Según Google ML Kit, 2025, la detección facial se realiza en 5–15 ms en dispositivos modernos con una precisión del 98%.
Puntos clave
Face Detection es una tarea de visión por computadora para detectar la presencia y ubicación de rostros humanos en una imagen. El algoritmo devuelve un bounding box (rectángulo alrededor del rostro) y un confidence score (probabilidad de que sea un rostro). Los algoritmos modernos también devuelven facial landmarks — puntos clave (ojos, cejas, nariz, boca, contorno facial). Face Detection es el primer paso para muchas tareas de ML: reconocimiento de personas, filtros AR, análisis de atención.
Historia de los algoritmos comenzó con Viola-Jones (2001) — una cascada de características tipo Haar en CPU. En la década de 2010 dominaron HOG + SVM (Histogram of Oriented Gradients). Desde 2016, todos los algoritmos modernos se basan en redes neuronales convolucionales (CNN): MTCNN, RetinaFace, SSH, MobileNet-SSD, YOLO-Face. Los algoritmos CNN en GPU proporcionan un 95–99% de precisión frente al 85–90% de los métodos clásicos. Según el benchmark WiderFace (2025), RetinaFace alcanza un mAP del 96.3% en el subset más difícil.
MTCNN (Multi-Task Cascaded CNN) es un detector clásico de tres etapas: P-Net (Proposal Network) encuentra candidatos, R-Net (Refine Network) los filtra, O-Net (Output Network) refina el bounding box y genera los landmarks. MTCNN funciona en CPU a 30–50 ms por fotograma con resolución 640x480. Para dispositivos móviles, MTCNN ofrece un equilibrio óptimo entre velocidad y precisión sin GPU.
| Algoritmo | Precisión (WiderFace) | Velocidad (640x480) | Plataforma |
|---|---|---|---|
| RetinaFace | 96.3% | 15 ms (GPU) | Android, iOS |
| MTCNN | 91.2% | 30–50 ms (CPU) | Multiplataforma |
| ML Kit | 98.0% | 5–15 ms (GPU/NPU) | Android, iOS |
| OpenCV Haar | 82.5% | 5–10 ms (CPU) | Multiplataforma |
Face Detection en tiempo real requiere 30+ FPS para video. Esto es alcanzable en smartphones modernos gracias a la NPU (Neural Processing Unit) — Qualcomm Hexagon, Apple Neural Engine, MediaTek APU. La NPU realiza la detección en 2–5 ms con un consumo de energía de 50–100 mW, mientras que la GPU consume 500–2000 mW. Para detección continua (cámara siempre encendida), la NPU es la única opción práctica sin sobrecalentamiento del dispositivo.
ML Kit Face Detection es el SDK más popular para la detección de rostros en dispositivos móviles. ML Kit ofrece dos modos: modo contorno (468 puntos de contorno facial para superposición precisa de máscaras) y modo clasificación (detección de emociones: sonrisa, ojos abiertos, boca abierta). Los modos se combinan en FaceDetectorOptions. ML Kit utiliza la red neuronal MobileNetV2-SSD de Google con optimización mediante NNAPI/GPU Delegate.
Configuración de ML Kit Face Detection: setPerformanceMode(FACE_DETECTION_FAST / ACCURATE), setLandmarkMode (puntos clave), setContourMode (puntos de contorno), setClassificationMode (emociones). Para máxima velocidad use FAST + LANDMARKS_ONLY + sin contorno. Para filtros AR — ACCURATE + ALL_CONTOURS. Según Google (2025), el modo FAST ofrece un 98% de precisión a 5 ms, ACCURATE — 99% a 15 ms.
// 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 en ML Kit — una característica única para transmisiones de video. A cada rostro detectado se le asigna un tracking ID (número entero) que se mantiene entre fotogramas. Esto permite adjuntar objetos AR a un rostro específico sin necesidad de redetección. El tracker utiliza Optical Flow y conserva el ID incluso con oclusión parcial del rostro. El tracking ID se reinicia cuando el rostro sale del encuadre por más de 1 segundo.
Apple Vision Framework es un framework nativo de iOS para Face Detection que funciona a través de Core ML en Apple Neural Engine. Vision proporciona VNDetectFaceRectanglesRequest (solo bounding box) y VNDetectFaceLandmarksRequest (con puntos de contorno). Vision Framework está integrado en iOS desde iOS 11 y no requiere SDK adicionales — es parte de Foundation.
Ventajas de Vision Framework: dependencia cero de bibliotecas de terceros, funciona a través de Apple Neural Engine (ANE) en chips A12+, manejo automático de orientación de imagen mediante exifOrientation, soporte para CIDetectorAccuracy para ajuste de velocidad/precisión. Vision devuelve VNFaceObservation con bounding box (coordenadas normalizadas 0..1) y landmarks (VNFaceLandmarkRegion2D).
Vision vs ML Kit en iOS: Vision es más rápido en dispositivos antiguos (A12–A15) ya que utiliza los motores neuronales nativos de Apple. ML Kit utiliza modelos de Google y puede ser más preciso en ángulos complejos (perfil, inclinación pronunciada). Para detección simple (cámara, fotos) — use Vision. Para filtros AR y máscaras de contorno — use ML Kit (468 puntos vs 76 puntos en 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 es la versión extendida para puntos clave. Devuelve VNFaceLandmarkRegion2D para cada grupo de puntos: leftEye, rightEye, nose, faceContour, innerLips, outerLips. Cada grupo es un array de CGPoint (normalizados). Vision no devuelve 468 puntos como ML Kit — solo 76 puntos clave. Para máscaras faciales precisas, ML Kit es preferible; para detección básica, Vision es suficiente.
OpenCV Haar Cascade es un algoritmo clásico de Face Detection basado en una cascada de características tipo Haar (Viola-Jones, 2001). A pesar de su antigüedad, Haar Cascade todavía se utiliza en proyectos con recursos limitados: Raspberry Pi, dispositivos IoT, sistemas embebidos. El algoritmo no requiere GPU ni NPU — funciona en cualquier CPU a 5–15 ms por fotograma de resolución VGA.
LBP Cascade (Local Binary Patterns) es una alternativa a Haar Cascade en OpenCV. LBP es más rápido (2–5 ms) y menos sensible a la iluminación, pero produce más falsos positivos. Haar es más preciso (85–90% frente a 80–85% de LBP), pero sensible a destellos y sombras. Para aplicaciones móviles, OpenCV Face Detection es inferior a los métodos de redes neuronales en precisión, pero gana en compatibilidad — funciona en cualquier dispositivo.
// 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
}
Limitaciones de OpenCV: alta tasa de falsos positivos (hasta 15%), mal rendimiento en ángulos de perfil (>30° — la precisión cae al 50%), ausencia de landmarks sin modelo adicional, sin seguimiento entre fotogramas. Para aplicaciones móviles modernas, OpenCV Face Detection sirve como fallback para dispositivos sin Google Play Services (Huawei, Amazon Fire). Para escenarios principales — use ML Kit o Vision.
Face Detection — determinación de la presencia y posición de un rostro en una imagen. Resultado: bounding box y puntos clave. Face Recognition — identificación de una persona por su rostro: determinar que este rostro pertenece a un individuo específico. Face Recognition utiliza embeddings (un vector de números que representa un rostro) y los compara con una base de datos de rostros conocidos. Face Detection es un primer paso obligatorio para Face Recognition.
Tecnologías de Face Recognition: FaceNet (Google, 2015) — triplet loss para entrenar embeddings de 128–512 valores float, ArcFace (2019) — additive angular margin loss, mejor precisión (99.83% en LFW). Para aplicaciones móviles, Face Recognition requiere un modelo TFLite personalizado — ML Kit no proporciona una API preparada para identificación de personas (solo detección).
Privacidad en dispositivos móviles: Face Detection es seguro — no almacena datos del usuario. Face Recognition requiere almacenar embeddings o fotos para comparación. Apple exige el consentimiento explícito del usuario para Face Recognition y prohíbe su uso para publicidad. Google ML Kit intencionalmente no incluye Face Recognition para evitar riesgos de privacidad. Para detección sin identificación — no hay restricciones.
| Característica | Face Detection | Face Recognition |
|---|---|---|
| Resultado | Dónde está el rostro en la foto | A quién pertenece el rostro |
| Algoritmos | MTCNN, RetinaFace, ML Kit | FaceNet, ArcFace, DeepFace |
| Almacenamiento | No requerido | Base de datos de embeddings |
| Privacidad | Riesgo bajo | Restricciones GDPR, CCPA |
Face Liveness Detection — una verificación adicional para asegurar que el rostro es real (no una foto/video). Utiliza análisis de movimiento ocular (blink detection), microexpresiones, mapa de profundidad (cámara 3D). Liveness Detection es obligatoria para aplicaciones bancarias y de pago. ML Kit no tiene liveness incorporado — use un modelo personalizado o Google Play Integrity API para verificación.
Filtros AR y máscaras — la aplicación más popular de Face Detection. Basándose en los puntos de contorno facial (468 puntos), se superponen máscaras 3D, sombreros, gafas, bigotes. ML Kit Face Detection + SceneKit (iOS) o Filament (Android) crea una experiencia AR en tiempo real. Snapchat e Instagram utilizan sus propios detectores basados en MobileNet + MTCNN. Para filtros AR personalizados, ML Kit y un motor 3D son suficientes.
Editores de fotos y retoque — Face Detection identifica el área del rostro para corrección automática: equilibrio de color de piel, eliminación de imperfecciones, mejora de ojos y dientes. OpenCV + ML Kit Face Detection proporciona coordenadas para Selective Gaussian Blur (suavizado de piel) y contraste de ojos. Aplicaciones reales — Facetune, BeautyPlus, YouCam Makeup.
Monitoreo de atención — determinación de la dirección de la mirada (gaze detection). Face Detection devuelve bounding box y landmarks oculares. La posición de la pupila respecto al ojo determina hacia dónde mira el usuario: a la pantalla, izquierda, derecha, arriba. Se utiliza en e-learning (monitoreo de que el estudiante mira la clase), publicidad (métricas de atención), asistentes de conducción (monitoreo de fatiga).
// 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)
}
Medicina y bienestar — Face Detection se utiliza para análisis de asimetría facial (diagnóstico de trastornos neurológicos), estimación del pulso mediante microvibraciones de la piel (fotopletismografía a través de la cámara), determinación de la hidratación de la piel. ML Kit Face Detection + OpenCV proporcionan suficiente precisión para screening preliminar sin certificación médica. Para medicina de producción, se requiere certificación FDA/CE.
Preguntas frecuentes
Face Detection — encuentra un rostro en una imagen y devuelve sus límites (coordenadas del rectángulo). Face Recognition — determina de quién es el rostro comparándolo con una base de datos de rostros conocidos. La detección es el primer paso para el reconocimiento. ML Kit y Vision Framework solo proporcionan Face Detection. Para el reconocimiento se necesita un modelo TFLite personalizado (FaceNet, ArcFace) + una base de datos de embeddings en el dispositivo.
ML Kit Face Detection es el más rápido en dispositivos modernos (5–15 ms por fotograma) gracias a NNAPI/GPU Delegate. Apple Vision Framework es más rápido en iOS (A12+ mediante ANE) — 3–10 ms. OpenCV Haar Cascade — 5–10 ms en CPU, pero menor precisión (82% frente a 98% de ML Kit). En dispositivos con NPU (Snapdragon 8 Gen 3, Apple A17 Pro) ML Kit y Vision realizan la detección en 2–5 ms.
ML Kit y Vision Framework funcionan correctamente con gafas (incluyendo las oscuras) y mascarillas médicas. La precisión de detección con mascarilla baja del 98% al 90–92%, pero el rostro sigue detectándose por la parte superior (ojos, cejas, frente). Los puntos de contorno (contorno facial) se vuelven menos precisos — para mascarillas use solo el modo clasificación (sonrisa, ojos abiertos) sin contorno.
Sí, Face Detection en tiempo real es compatible con todos los SDK modernos. ML Kit — hasta 60 FPS a 480p mediante CameraX Analyzer. Apple Vision — hasta 30 FPS en iOS mediante AVFoundation. Para tiempo real use el modo FAST, reduzca la resolución a 480p y active el face tracking (ML Kit) para conservar el ID entre fotogramas sin redetectar cada fotograma.
No, todos los SDK modernos de Face Detection para móviles funcionan completamente en el dispositivo. ML Kit descarga el modelo a través de Google Play Services en el primer inicio (si se selecciona el modo descargado), después de lo cual funciona sin conexión. Apple Vision Framework — integrado en iOS, no requiere internet. OpenCV — completamente sin conexión. Para APIs en la nube (Google Cloud Vision, AWS Rekognition) se necesita internet, pero no se utilizan en aplicaciones móviles para detección en tiempo real.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también