Face Detection è una tecnologia di visione artificiale per trovare e localizzare volti umani in immagini digitali e flussi video. A differenza di Face Recognition (identificazione di una persona), Face Detection determina solo la presenza di un volto e i suoi confini — bounding box e keypoints (occhi, naso, bocca). Nello sviluppo mobile, Face Detection viene utilizzato in ML Kit, ARKit, Vision Framework e OpenCV. Secondo Google ML Kit, 2025, il rilevamento facciale viene eseguito in 5–15 ms sui dispositivi moderni con una precisione del 98%.
Punti chiave
Face Detection è un compito di visione artificiale per rilevare la presenza e la posizione di volti umani in un'immagine. L'algoritmo restituisce un bounding box (rettangolo attorno al volto) e un confidence score (probabilità che sia un volto). Gli algoritmi moderni restituiscono anche facial landmarks — punti chiave (occhi, sopracciglia, naso, bocca, contorno del volto). Face Detection è il primo passo per molti compiti di ML: riconoscimento di persone, filtri AR, analisi dell'attenzione.
Storia degli algoritmi è iniziata con Viola-Jones (2001) — una cascata di caratteristiche di tipo Haar su CPU. Negli anni 2010, HOG + SVM (Histogram of Oriented Gradients) ha dominato. Dal 2016, tutti gli algoritmi moderni si basano su reti neurali convoluzionali (CNN): MTCNN, RetinaFace, SSH, MobileNet-SSD, YOLO-Face. Gli algoritmi CNN su GPU offrono una precisione del 95–99% contro l'85–90% dei metodi classici. Secondo il benchmark WiderFace (2025), RetinaFace raggiunge il 96,3% di mAP sul subset più difficile.
MTCNN (Multi-Task Cascaded CNN) è un rivelatore classico a tre stadi: P-Net (Proposal Network) trova i candidati, R-Net (Refine Network) li filtra, O-Net (Output Network) perfeziona il bounding box e produce i landmarks. MTCNN funziona su CPU a 30–50 ms per fotogramma con risoluzione 640x480. Per i dispositivi mobili, MTCNN offre un equilibrio ottimale tra velocità e precisione senza GPU.
| Algoritmo | Precisione (WiderFace) | Velocità (640x480) | Piattaforma |
|---|---|---|---|
| RetinaFace | 96,3% | 15 ms (GPU) | Android, iOS |
| MTCNN | 91,2% | 30–50 ms (CPU) | Multipiattaforma |
| ML Kit | 98,0% | 5–15 ms (GPU/NPU) | Android, iOS |
| OpenCV Haar | 82,5% | 5–10 ms (CPU) | Multipiattaforma |
Face Detection in tempo reale richiede 30+ FPS per il video. Questo è raggiungibile sugli smartphone moderni grazie a NPU (Neural Processing Unit) — Qualcomm Hexagon, Apple Neural Engine, MediaTek APU. La NPU esegue il rilevamento in 2–5 ms con un consumo energetico di 50–100 mW, mentre la GPU consuma 500–2000 mW. Per il rilevamento continuo (fotocamera sempre accesa), la NPU è l'unica opzione pratica senza surriscaldamento del dispositivo.
ML Kit Face Detection è l'SDK più popolare per il rilevamento dei volti sui dispositivi mobili. ML Kit offre due modalità: modalità contorno (468 punti di contorno del volto per sovrapposizione precisa di maschere) e modalità classificazione (rilevamento delle emozioni: sorriso, occhi aperti, bocca aperta). Le modalità sono combinate in FaceDetectorOptions. ML Kit utilizza la rete neurale MobileNetV2-SSD di Google con ottimizzazione tramite NNAPI/GPU Delegate.
Configurazione di ML Kit Face Detection: setPerformanceMode(FACE_DETECTION_FAST / ACCURATE), setLandmarkMode (punti chiave), setContourMode (punti di contorno), setClassificationMode (emozioni). Per la massima velocità, utilizza FAST + LANDMARKS_ONLY + senza contorno. Per i filtri AR — ACCURATE + ALL_CONTOURS. Secondo Google (2025), la modalità FAST offre una precisione del 98% 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 in ML Kit — una funzionalità unica per flussi video. Ogni volto rilevato riceve un tracking ID (numero intero) che persiste tra i fotogrammi. Ciò consente di allegare oggetti AR a un volto specifico senza nuovo rilevamento. Il tracker utilizza Optical Flow e mantiene l'ID anche con occlusione parziale del volto. Il tracking ID viene reimpostato quando il volto esce dall'inquadratura per più di 1 secondo.
Apple Vision Framework è un framework nativo iOS per Face Detection che funziona tramite Core ML su Apple Neural Engine. Vision fornisce VNDetectFaceRectanglesRequest (solo bounding box) e VNDetectFaceLandmarksRequest (con punti di contorno). Vision Framework è integrato in iOS da iOS 11 e non richiede SDK aggiuntivi — fa parte di Foundation.
Vantaggi di Vision Framework: dipendenza zero da librerie di terze parti, funziona tramite Apple Neural Engine (ANE) su chip A12+, gestione automatica dell'orientamento dell'immagine tramite exifOrientation, supporto per CIDetectorAccuracy per la regolazione velocità/precisione. Vision restituisce VNFaceObservation con bounding box (coordinate normalizzate 0..1) e landmarks (VNFaceLandmarkRegion2D).
Vision vs ML Kit su iOS: Vision è più veloce sui dispositivi più vecchi (A12–A15) perché utilizza i motori neurali nativi di Apple. ML Kit utilizza i modelli Google e può essere più preciso su angoli complessi (profilo, forte inclinazione). Per il rilevamento semplice (fotocamera, foto) — usa Vision. Per filtri AR e maschere di contorno — usa ML Kit (468 punti vs 76 punti in 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 è la versione estesa per i punti chiave. Restituisce VNFaceLandmarkRegion2D per ogni gruppo di punti: leftEye, rightEye, nose, faceContour, innerLips, outerLips. Ogni gruppo è un array di CGPoint (normalizzati). Vision non restituisce 468 punti come ML Kit — solo 76 punti chiave. Per maschere facciali precise, ML Kit è preferibile; per il rilevamento di base, Vision è sufficiente.
OpenCV Haar Cascade è un algoritmo classico di Face Detection basato su una cascata di caratteristiche di tipo Haar (Viola-Jones, 2001). Nonostante l'età, Haar Cascade è ancora utilizzato in progetti con risorse limitate: Raspberry Pi, dispositivi IoT, sistemi embedded. L'algoritmo non richiede GPU o NPU — funziona su qualsiasi CPU a 5–15 ms per fotogramma in risoluzione VGA.
LBP Cascade (Local Binary Patterns) è un'alternativa a Haar Cascade in OpenCV. LBP è più veloce (2–5 ms) e meno sensibile all'illuminazione, ma produce più falsi positivi. Haar è più preciso (85–90% contro 80–85% di LBP), ma sensibile a bagliori e ombre. Per le app mobili, OpenCV Face Detection è inferiore ai metodi di reti neurali in precisione, ma vince in compatibilità — funziona su qualsiasi 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
}
Limitazioni di OpenCV: alto tasso di falsi positivi (fino al 15%), scarse prestazioni su angoli di profilo (>30° — la precisione scende al 50%), assenza di landmarks senza modello aggiuntivo, nessun tracciamento tra fotogrammi. Per le app mobili moderne, OpenCV Face Detection funge da fallback per dispositivi senza Google Play Services (Huawei, Amazon Fire). Per scenari principali — usa ML Kit o Vision.
Face Detection — determinazione della presenza e posizione di un volto in un'immagine. Risultato: bounding box e punti chiave. Face Recognition — identificazione di una persona dal suo volto: determinare che questo volto appartiene a un individuo specifico. Face Recognition utilizza embeddings (un vettore di numeri che rappresenta un volto) e li confronta con un database di volti noti. Face Detection è un primo passo obbligatorio per Face Recognition.
Tecnologie di Face Recognition: FaceNet (Google, 2015) — triplet loss per addestrare embedding di 128–512 valori float, ArcFace (2019) — additive angular margin loss, migliore precisione (99,83% su LFW). Per le app mobili, Face Recognition richiede un modello TFLite personalizzato — ML Kit non fornisce un'API pronta per l'identificazione delle persone (solo rilevamento).
Privacy sui dispositivi mobili: Face Detection è sicuro — non memorizza dati dell'utente. Face Recognition richiede la memorizzazione di embedding o foto per il confronto. Apple richiede il consenso esplicito dell'utente per Face Recognition e ne vieta l'uso per la pubblicità. Google ML Kit non include intenzionalmente Face Recognition per evitare rischi per la privacy. Per il rilevamento senza identificazione — non ci sono restrizioni.
| Caratteristica | Face Detection | Face Recognition |
|---|---|---|
| Risultato | Dov'è il volto nella foto | A chi appartiene il volto |
| Algoritmi | MTCNN, RetinaFace, ML Kit | FaceNet, ArcFace, DeepFace |
| Archiviazione | Non richiesta | Database di embedding |
| Privacy | Basso rischio | Restrizioni GDPR, CCPA |
Face Liveness Detection — un controllo aggiuntivo per garantire che il volto sia reale (non una foto/video). Utilizza l'analisi del movimento oculare (blink detection), micro-espressioni, mappa di profondità (fotocamera 3D). Liveness Detection è obbligatoria per le applicazioni bancarie e di pagamento. ML Kit non ha liveness integrata — utilizza un modello personalizzato o Google Play Integrity API per la verifica.
Filtri AR e maschere — l'applicazione più popolare di Face Detection. Basandosi sui punti di contorno del volto (468 punti), vengono sovrapposte maschere 3D, cappelli, occhiali, baffi. ML Kit Face Detection + SceneKit (iOS) o Filament (Android) crea un'esperienza AR in tempo reale. Snapchat e Instagram utilizzano i propri rivelatori basati su MobileNet + MTCNN. Per filtri AR personalizzati, ML Kit e un motore 3D sono sufficienti.
Editor fotografici e ritocco — Face Detection identifica l'area del volto per la correzione automatica: bilanciamento del colore della pelle, rimozione di imperfezioni, miglioramento di occhi e denti. OpenCV + ML Kit Face Detection fornisce coordinate per Selective Gaussian Blur (levigatura della pelle) e contrasto degli occhi. Applicazioni reali — Facetune, BeautyPlus, YouCam Makeup.
Monitoraggio dell'attenzione — determinazione della direzione dello sguardo (gaze detection). Face Detection restituisce bounding box e landmarks degli occhi. La posizione della pupilla rispetto all'occhio determina dove l'utente sta guardando: schermo, sinistra, destra, in alto. Utilizzato nell'e-learning (monitoraggio se lo studente guarda la lezione), pubblicità (metriche di attenzione), assistenti alla guida (monitoraggio della fatica).
// 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 e benessere — Face Detection viene utilizzato per l'analisi dell'asimmetria facciale (diagnosi di disturbi neurologici), stima del polso dalle micro-vibrazioni della pelle (fotopletismografia tramite fotocamera), determinazione dell'idratazione della pelle. ML Kit Face Detection + OpenCV forniscono una precisione sufficiente per lo screening preliminare senza certificazione medica. Per la medicina di produzione, è richiesta la certificazione FDA/CE.
Domande frequenti
Face Detection — trova un volto in un'immagine e restituisce i suoi confini (coordinate del rettangolo). Face Recognition — determina di chi è il volto confrontandolo con un database di volti noti. Il rilevamento è il primo passo per il riconoscimento. ML Kit e Vision Framework forniscono solo Face Detection. Per il riconoscimento, hai bisogno di un modello TFLite personalizzato (FaceNet, ArcFace) + un database di embedding sul dispositivo.
ML Kit Face Detection è il più veloce sui dispositivi moderni (5–15 ms per fotogramma) grazie a NNAPI/GPU Delegate. Apple Vision Framework è più veloce su iOS (A12+ tramite ANE) — 3–10 ms. OpenCV Haar Cascade — 5–10 ms su CPU, ma precisione inferiore (82% contro 98% di ML Kit). Su dispositivi con NPU (Snapdragon 8 Gen 3, Apple A17 Pro), ML Kit e Vision eseguono il rilevamento in 2–5 ms.
ML Kit e Vision Framework funzionano correttamente con occhiali (compresi quelli scuri) e mascherine mediche. La precisione del rilevamento con la mascherina scende dal 98% al 90–92%, ma il volto viene comunque rilevato dalla parte superiore (occhi, sopracciglia, fronte). I punti di contorno (contorno del volto) diventano meno precisi — per le mascherine, utilizza solo la modalità classificazione (sorriso, occhi aperti) senza contorno.
Sì, Face Detection in tempo reale è supportato da tutti gli SDK moderni. ML Kit — fino a 60 FPS a 480p tramite CameraX Analyzer. Apple Vision — fino a 30 FPS su iOS tramite AVFoundation. Per il tempo reale, utilizza la modalità FAST, riduci la risoluzione a 480p e attiva face tracking (ML Kit) per preservare l'ID tra i fotogrammi senza rilevare nuovamente ogni fotogramma.
No, tutti gli SDK moderni di Face Detection mobile funzionano completamente sul dispositivo. ML Kit scarica il modello tramite Google Play Services al primo avvio (se è selezionata la modalità scaricata), dopo di che funziona offline. Apple Vision Framework — integrato in iOS, non richiede Internet. OpenCV — completamente offline. Per le API cloud (Google Cloud Vision, AWS Rekognition) Internet è necessaria, ma non vengono utilizzate nelle app mobili per il rilevamento in tempo reale.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche