Face Detection nelle app: cos'è, metodi e librerie

Autore: IT Sectr Pubblicato: 2026-07-18 Tempo di lettura: 10 min

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 — trovare volti in un'immagine, non identificare una persona
  • Bounding box — rettangolo attorno al volto con coordinate x, y, w, h
  • Keypoints — punti chiave del volto: occhi, naso, bocca, orecchie (468 punti in ML Kit)
  • On-device — il rilevamento viene eseguito localmente sul dispositivo senza server
  • Tempo reale — 30+ FPS sugli smartphone moderni per video HD

Cos'è Face Detection: principi e algoritmi

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.

AlgoritmoPrecisione (WiderFace)Velocità (640x480)Piattaforma
RetinaFace96,3%15 ms (GPU)Android, iOS
MTCNN91,2%30–50 ms (CPU)Multipiattaforma
ML Kit98,0%5–15 ms (GPU/NPU)Android, iOS
OpenCV Haar82,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 su Android e iOS

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.

kotlin
// 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: VNDetectFaceRectanglesRequest

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).

swift
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: l'approccio classico

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.

kotlin
// 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 vs Face Recognition: differenza

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.

CaratteristicaFace DetectionFace Recognition
RisultatoDov'è il volto nella fotoA chi appartiene il volto
AlgoritmiMTCNN, RetinaFace, ML KitFaceNet, ArcFace, DeepFace
ArchiviazioneNon richiestaDatabase di embedding
PrivacyBasso rischioRestrizioni 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.

Applicazioni di Face Detection nelle app mobili

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).

swift
// 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

Qual è la differenza tra Face Detection e Face Recognition?

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.

Quale SDK di Face Detection è il più veloce sui dispositivi mobili?

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.

Face Detection funziona con occhiali scuri o mascherina?

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.

Face Detection può essere utilizzato in tempo reale?

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.

È necessaria Internet per Face Detection sul dispositivo?

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

  • Face Detection — trovare volti in un'immagine: bounding box e punti chiave
  • ML Kit — 5–15 ms, precisione 98%, 468 punti di contorno, ID di tracciamento
  • Apple Vision — nativo iOS, tramite ANE, 3–10 ms, 76 landmarks
  • OpenCV Haar — metodo classico, CPU, precisione 82%, fallback per dispositivi vecchi
  • Face Detection ≠ Face Recognition — il rilevamento non identifica una persona
  • Tempo reale — fino a 60 FPS su dispositivi moderni tramite NPU
  • Applicazioni — filtri AR, ritocco, monitoraggio dell'attenzione, medicina

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.

Discuti il progetto

Leggi anche