Face Detection — is een computer vision technologie voor het vinden en lokaliseren van menselijke gezichten in digitale afbeeldingen en videostreams. In tegenstelling tot Face Recognition (persoonsidentificatie), bepaalt Face Detection alleen de aanwezigheid van een gezicht en de grenzen ervan — bounding box en keypoints (ogen, neus, mond). In mobiele ontwikkeling wordt Face Detection gebruikt in ML Kit, ARKit, Vision Framework en OpenCV. Volgens Google ML Kit, 2025 wordt gezichtsdetectie uitgevoerd in 5–15 ms op moderne apparaten met een nauwkeurigheid van 98%.
Belangrijkste
Face Detection — een computer vision taak om de aanwezigheid en locatie van menselijke gezichten in een afbeelding te bepalen. Het algoritme retourneert een bounding box (rechthoek rond het gezicht) en een confidence score (waarschijnlijkheid dat het een gezicht is). Moderne algoritmen retourneren ook facial landmarks — belangrijke punten (ogen, wenkbrauwen, neus, mond, gezichtscontour). Face Detection is de eerste fase voor veel ML-taken: persoonsherkenning, AR-filters, aandacht-analyse.
Geschiedenis van algoritmen begon met Viola-Jones (2001) — cascade van Haar-achtige kenmerken op CPU. In de jaren 2010 domineerden HOG + SVM (Histogram of Oriented Gradients). Sinds 2016 zijn alle moderne algoritmen gebaseerd op convolutionele neurale netwerken (CNN): MTCNN, RetinaFace, SSH, MobileNet-SSD, YOLO-Face. CNN-algoritmen op GPU geven 95–99% nauwkeurigheid versus 85–90% voor klassieke methoden. Volgens de WiderFace benchmark (2025) toont RetinaFace een mAP van 96.3% op de moeilijkste subset.
MTCNN (Multi-Task Cascaded CNN) — een klassieke driedelige detector: P-Net (Proposal Network) vindt kandidaten, R-Net (Refine Network) filtert, O-Net (Output Network) verfijnt de bounding box en levert landmarks. MTCNN werkt op CPU met een snelheid van 30–50 ms per frame bij een resolutie van 640x480. Voor mobiele apparaten biedt MTCNN een optimale balans tussen snelheid en nauwkeurigheid zonder GPU.
| Algoritme | Nauwkeurigheid (WiderFace) | Snelheid (640x480) | Platform |
|---|---|---|---|
| RetinaFace | 96.3% | 15 ms (GPU) | Android, iOS |
| MTCNN | 91.2% | 30–50 ms (CPU) | Multiplatform |
| ML Kit | 98.0% | 5–15 ms (GPU/NPU) | Android, iOS |
| OpenCV Haar | 82.5% | 5–10 ms (CPU) | Multiplatform |
Real-time Face Detection vereist 30+ FPS voor video. Dit is haalbaar op moderne smartphones dankzij NPU (Neural Processing Unit) — Qualcomm Hexagon, Apple Neural Engine, MediaTek APU. NPU voert detectie uit in 2–5 ms met een energieverbruik van 50–100 mW, terwijl GPU 500–2000 mW verbruikt. Voor continue detectie (camera altijd aan) is NPU de enige praktische optie zonder oververhitting van het apparaat.
ML Kit Face Detection — de populairste SDK voor gezichtsdetectie op mobiele apparaten. ML Kit biedt twee modi: contour mode (468 contourpunten van het gezicht voor nauwkeurige maskerplaatsing) en classification mode (bepalen van emoties: glimlach, open ogen, open mond). Modi worden gecombineerd in FaceDetectorOptions. ML Kit gebruikt het Google neural network MobileNetV2-SSD met optimalisatie via NNAPI/GPU Delegate.
ML Kit Face Detection configureren: setPerformanceMode(FACE_DETECTION_FAST / ACCURATE), setLandmarkMode (belangrijke punten), setContourMode (contourpunten), setClassificationMode (emoties). Voor maximale snelheid gebruikt u FAST + LANDMARKS_ONLY + zonder contour. Voor AR-filters — ACCURATE + ALL_CONTOURS. Volgens Google (2025) geeft FAST-modus 98% nauwkeurigheid bij 5 ms, ACCURATE — 99% bij 15 ms.
// ML Kit Face Detection met contouren
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 — een unieke functie voor videostreams. Elk gedetecteerd gezicht krijgt een tracking ID (geheel getal) dat tussen frames behouden blijft. Hierdoor kunnen AR-objecten aan een specifiek gezicht worden gekoppeld zonder opnieuw te detecteren. De tracker gebruikt Optical Flow en behoudt de ID, zelfs bij gedeeltelijke bedekking van het gezicht. Tracking ID wordt gereset wanneer het gezicht het frame langer dan 1 seconde verlaat.
Apple Vision Framework — het native iOS-framework voor Face Detection, werkend via Core ML op Apple Neural Engine. Vision biedt VNDetectFaceRectanglesRequest (alleen bounding box) en VNDetectFaceLandmarksRequest (met contourpunten). Vision Framework is ingebouwd in iOS sinds iOS 11 en vereist geen extra SDK’s — het maakt deel uit van Foundation.
Voordelen van Vision Framework: nul afhankelijkheid van bibliotheken van derden, werking via Apple Neural Engine (ANE) op A12+ chips, automatische verwerking van beeldoriëntatie via exifOrientation, ondersteuning voor CIDetectorAccuracy voor snelheids-/nauwkeurigheidsaanpassing. Vision retourneert VNFaceObservation met bounding box (genormaliseerde coördinaten 0..1) en landmarks (VNFaceLandmarkRegion2D).
Vision vs ML Kit op iOS: Vision is sneller op oudere apparaten (A12–A15) omdat het de native neurale engines van Apple gebruikt. ML Kit gebruikt Google-modellen en kan nauwkeuriger zijn bij moeilijke hoeken (profiel, sterke kanteling). Voor eenvoudige detectie (camera, foto) — Vision. Voor AR-filters en contourmaskers — ML Kit (468 punten versus 76 punten bij 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 // genormaliseerd 0..1
let confidence = face.confidence
}
}
let handler = VNImageRequestHandler(
cgImage: cgImage, orientation: .up, options: [:]
)
try handler.perform([request])
VNDetectFaceLandmarksRequest — de uitgebreide versie voor belangrijke punten. Retourneert VNFaceLandmarkRegion2D voor elke groep punten: leftEye, rightEye, nose, faceContour, innerLips, outerLips. Elke groep is een array van CGPoint (genormaliseerd). Vision retourneert niet 468 punten zoals ML Kit — slechts 76 belangrijke punten. Voor een nauwkeurig gezichtsmasker heeft ML Kit de voorkeur; voor basis — Vision.
OpenCV Haar Cascade — het klassieke Face Detection-algoritme gebaseerd op een cascade van Haar-achtige kenmerken (Viola-Jones, 2001). Ondanks zijn leeftijd wordt Haar Cascade nog steeds gebruikt in projecten met beperkte middelen: Raspberry Pi, IoT-apparaten, ingebedde systemen. Het algoritme vereist geen GPU of NPU — het werkt op elke CPU met een snelheid van 5–15 ms per frame bij VGA-resolutie.
LBP Cascade (Local Binary Patterns) — een alternatief voor Haar Cascade in OpenCV. LBP is sneller (2–5 ms) en minder gevoelig voor verlichting, maar geeft meer fout-positieve resultaten. Haar is nauwkeuriger (85–90% versus 80–85% voor LBP), maar gevoelig voor reflecties en schaduwen. Voor mobiele apps is OpenCV Face Detection inferieur aan neurale netwerk methoden qua nauwkeurigheid, maar wint het in compatibiliteit — het werkt op elk apparaat.
// 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 = bounding box gezicht
}
Nadelen van OpenCV: hoog fout-positief percentage (tot 15%), slechte prestaties bij profielhoeken (>30° — daling van nauwkeurigheid tot 50%), geen landmarks zonder extra model, geen tracking tussen frames. Voor moderne mobiele apps is OpenCV Face Detection een fallback voor apparaten zonder Google Play Services (Huawei, Amazon Fire). Voor hoofdscenario’s — ML Kit of Vision.
Face Detection — bepalen van de aanwezigheid en positie van een gezicht in een afbeelding. Resultaat: bounding box en belangrijke punten. Face Recognition — identificatie van een persoon op basis van het gezicht: bepalen aan wie het gezicht toebehoort. Face Recognition gebruikt embeddings (vector van getallen die het gezicht vertegenwoordigt) en vergelijkt deze met een database van bekende gezichten. Face Detection is de verplichte eerste fase voor Face Recognition.
Face Recognition technologieën: FaceNet (Google, 2015) — triplet loss voor het leren van embeddings van 128–512 float-waarden, ArcFace (2019) — additive angular margin loss, beste nauwkeurigheid (99.83% op LFW). Voor mobiele apps vereist Face Recognition een aangepast TFLite-model — ML Kit biedt geen kant-en-klare API voor persoonsidentificatie (alleen detectie).
Privacy op mobiele apparaten: Face Detection is veilig — het slaat geen gebruikersgegevens op. Face Recognition vereist opslag van embeddings of foto’s voor vergelijking. Apple vereist expliciete toestemming van de gebruiker voor Face Recognition en verbiedt gebruik voor reclame. Google ML Kit bevat bewust geen Face Recognition om privacyrisico’s te vermijden. Voor detectie zonder identificatie — geen beperkingen.
| Kenmerk | Face Detection | Face Recognition |
|---|---|---|
| Resultaat | Waar is het gezicht op de foto | Aan wie behoort het gezicht |
| Algoritmen | MTCNN, RetinaFace, ML Kit | FaceNet, ArcFace, DeepFace |
| Opslag | Niet vereist | Embedding database |
| Privacy | Laag risico | GDPR, CCPA beperkingen |
Face Liveness Detection — een extra controle dat het gezicht echt is (geen foto/video). Gebruikt oogbewegingsanalyse (blink detection), micro-mimiek, dieptekaart (3D-camera). Liveness Detection is verplicht voor bank- en betalingsapps. ML Kit heeft geen ingebouwde liveness — gebruik een aangepast model of Google Play Integrity API voor verificatie.
AR-filters en maskers — de populairste toepassing van Face Detection. Op basis van contourpunten van het gezicht (468 punten) worden 3D-maskers, hoeden, brillen, snorren aangebracht. ML Kit Face Detection + SceneKit (iOS) of Filament (Android) creëert een real-time AR-ervaring. Snapchat en Instagram gebruiken eigen detectoren gebaseerd op MobileNet + MTCNN. Voor aangepaste AR-filters zijn ML Kit en een 3D-engine voldoende.
Fotobewerkers en retouche — Face Detection bepaalt het gezichtsgebied voor automatische correctie: egaliseren van de huidskleur, verwijderen van onvolkomenheden, verbeteren van ogen en tanden. OpenCV + ML Kit Face Detection geven coördinaten voor Selective Gaussian Blur (huid gladmaken) en oogcontrast. Echte toepassing — apps Facetune, BeautyPlus, YouCam Makeup.
Aandachtscontrole — bepalen van de kijkrichting (gaze detection). Face Detection retourneert bounding box en landmarks van de ogen. Op basis van de positie van de pupil ten opzichte van het oog wordt bepaald waar de gebruiker kijkt: naar het scherm, links, rechts, boven. Toegepast in e-learning (controleren of de student naar de les kijkt), reclame (aandachtsmetrieken), rijassistenten (vermoeidheidscontrole).
// ARKit + Vision voor AR-filter
let faceLandmarksRequest = VNDetectFaceLandmarksRequest { req, _ in
guard let face = req.results?.first as? VNFaceObservation else { return }
if let leftEye = face.landmarks?.leftEye {
// AR-objectoverlay op linkeroog
}
}
let handler = VNSequenceRequestHandler()
for pixelBuffer in videoStream {
try handler.perform([faceLandmarksRequest], on: pixelBuffer)
}
Geneeskunde en wellness — Face Detection wordt gebruikt voor analyse van gezichtsasymmetrie (diagnose van neurologische aandoeningen), evaluatie van de pols via microtrillingen van de huid (fotoplethysmografie via camera), bepaling van huidvochtigheid. ML Kit Face Detection + OpenCV bieden voldoende nauwkeurigheid voor voorlopige screening zonder medische certificering. Voor productiegeneeskunde is FDA/CE-certificering vereist.
Veelgestelde vragen
Face Detection — vindt een gezicht in de afbeelding en retourneert de grenzen ervan (rechthoekcoördinaten). Face Recognition — bepaalt van wie het gezicht is door te vergelijken met een database van bekende gezichten. Detectie is de eerste stap voor herkenning. ML Kit en Vision Framework bieden alleen Face Detection. Voor herkenning is een aangepast TFLite-model (FaceNet, ArcFace) + een database met embeddings op het apparaat nodig.
ML Kit Face Detection — de snelste op moderne apparaten (5–15 ms per frame) dankzij NNAPI/GPU Delegate. Apple Vision Framework — sneller op iOS (A12+ via ANE) — 3–10 ms. OpenCV Haar Cascade — 5–10 ms op CPU, maar lagere nauwkeurigheid (82% versus 98% bij ML Kit). Op apparaten met NPU (Snapdragon 8 Gen 3, Apple A17 Pro) voeren ML Kit en Vision detectie uit in 2–5 ms.
ML Kit en Vision Framework werken correct met brillen (inclusief donkere) en medische maskers. De nauwkeurigheid van detectie met masker daalt van 98% naar 90–92%, maar het gezicht wordt nog steeds gedetecteerd op basis van het bovenste gedeelte (ogen, wenkbrauwen, voorhoofd). Contourpunten (gezichtscontour) worden minder nauwkeurig — voor maskers gebruikt u alleen classification mode (glimlach, open ogen) zonder contour.
Ja, Face Detection in real-time wordt ondersteund door alle moderne SDK’s. ML Kit — tot 60 FPS op 480p frame via CameraX Analyzer. Apple Vision — tot 30 FPS op iOS via AVFoundation. Voor real-time gebruik de FAST performance-modus, verlaag de resolutie naar 480p en schakel face tracking (ML Kit) in om de ID tussen frames te behouden zonder elk frame opnieuw te detecteren.
Nee, alle moderne mobiele Face Detection SDK’s werken volledig op het apparaat. ML Kit downloadt het model via Google Play Services bij de eerste start (indien de gedownloade modus is geselecteerd) en werkt daarna offline. Apple Vision Framework — ingebouwd in iOS, heeft geen internet nodig. OpenCV — volledig offline. Voor cloud-API’s (Google Cloud Vision, AWS Rekognition) is internet nodig, maar deze worden niet gebruikt in mobiele apps voor real-time.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook