Face Detection — to technologia wizji komputerowej do znajdowania i lokalizowania ludzkich twarzy na cyfrowych obrazach i strumieniu wideo. W przeciwieństwie do Face Recognition (identyfikacja osoby), Face Detection jedynie określa obecność twarzy i jej granice — bounding box i keypoints (oczy, nos, usta). W rozwoju mobilnym Face Detection jest używane w ML Kit, ARKit, Vision Framework i OpenCV. Według danych Google ML Kit, 2025, detekcja twarzy wykonywana jest w 5–15 ms na nowoczesnych urządzeniach z dokładnością 98%.
Najważniejsze
Face Detection — zadanie wizji komputerowej polegające na określeniu obecności i lokalizacji ludzkich twarzy na obrazie. Algorytm zwraca bounding box (prostokąt wokół twarzy) i confidence score (prawdopodobieństwo, że to twarz). Nowoczesne algorytmy zwracają również facial landmarks — kluczowe punkty (oczy, brwi, nos, usta, kontur twarzy). Face Detection to pierwszy etap dla wielu zadań ML: rozpoznawanie osób, filtry AR, analityka uwagi.
Historia algorytmów rozpoczęła się od Viola-Jones (2001) — kaskada cech Haar-like na CPU. W latach 2010. dominowały HOG + SVM (Histogram of Oriented Gradients). Od 2016 roku wszystkie nowoczesne algorytmy oparte są na konwolucyjnych sieciach neuronowych (CNN): MTCNN, RetinaFace, SSH, MobileNet-SSD, YOLO-Face. Algorytmy CNN na GPU dają 95–99% dokładności wobec 85–90% dla metod klasycznych. Według benchmarku WiderFace (2025), RetinaFace osiąga mAP 96.3% na najtrudniejszym podzbiorze.
MTCNN (Multi-Task Cascaded CNN) — klasyczny trójstopniowy detektor: P-Net (Proposal Network) znajduje kandydatów, R-Net (Refine Network) filtruje, O-Net (Output Network) precyzuje bounding box i wyprowadza landmarks. MTCNN działa na CPU z prędkością 30–50 ms na klatkę przy rozdzielczości 640x480. Dla urządzeń mobilnych MTCNN to optymalny balans prędkości i dokładności bez GPU.
| Algorytm | Dokładność (WiderFace) | Szybkość (640x480) | Platforma |
|---|---|---|---|
| RetinaFace | 96.3% | 15 ms (GPU) | Android, iOS |
| MTCNN | 91.2% | 30–50 ms (CPU) | Wieloplatformowa |
| ML Kit | 98.0% | 5–15 ms (GPU/NPU) | Android, iOS |
| OpenCV Haar | 82.5% | 5–10 ms (CPU) | Wieloplatformowa |
Real-time Face Detection wymaga 30+ FPS dla wideo. Jest to osiągalne na nowoczesnych smartfonach dzięki NPU (Neural Processing Unit) — Qualcomm Hexagon, Apple Neural Engine, MediaTek APU. NPU wykonuje detekcję w 2–5 ms przy poborze mocy 50–100 mW, podczas gdy GPU pobiera 500–2000 mW. Do ciągłej detekcji (kamery zawsze włączonej) NPU jest jedyną praktyczną opcją bez przegrzewania urządzenia.
ML Kit Face Detection — najpopularniejszy SDK do wykrywania twarzy na urządzeniach mobilnych. ML Kit oferuje dwa tryby: contour mode (468 punktów konturu twarzy do precyzyjnego nakładania masek) i classification mode (określanie emocji: uśmiech, otwarte oczy, otwarte usta). Tryby są łączone w FaceDetectorOptions. ML Kit wykorzystuje sieć neuronową Google MobileNetV2-SSD z optymalizacją przez NNAPI/GPU Delegate.
Konfiguracja ML Kit Face Detection: setPerformanceMode(FACE_DETECTION_FAST / ACCURATE), setLandmarkMode (kluczowe punkty), setContourMode (punkty konturu), setClassificationMode (emocje). Dla maksymalnej szybkości użyj FAST + LANDMARKS_ONLY + bez konturu. Dla filtrów AR — ACCURATE + ALL_CONTOURS. Według Google (2025), tryb FAST daje 98% dokładności przy 5 ms, ACCURATE — 99% przy 15 ms.
// Wykrywanie twarzy ML Kit z konturami
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 w ML Kit — unikalna funkcja dla strumienia wideo. Każdej wykrytej twarzy przypisywany jest tracking ID (liczba całkowita), który pozostaje między klatkami. Pozwala to przypisywać obiekty AR do konkretnej twarzy bez ponownego detektowania. Tracker wykorzystuje Optical Flow i utrzymuje ID nawet przy częściowym zasłonięciu twarzy. Tracking ID jest resetowany, gdy twarz opuści kadr na więcej niż 1 sekundę.
Apple Vision Framework — natywny framework iOS do Face Detection, działający przez Core ML na Apple Neural Engine. Vision udostępnia VNDetectFaceRectanglesRequest (tylko bounding box) i VNDetectFaceLandmarksRequest (z punktami konturu). Vision Framework jest wbudowany w iOS od wersji iOS 11 i nie wymaga dodatkowych SDK — jest częścią Foundation.
Zalety Vision Framework: zerowa zależność od bibliotek zewnętrznych, działanie przez Apple Neural Engine (ANE) na chipach A12+, automatyczne przetwarzanie orientacji obrazu przez exifOrientation, obsługa CIDetectorAccuracy do ustawiania szybkości/dokładności. Vision zwraca VNFaceObservation z bounding box (znormalizowane współrzędne 0..1) i landmarks (VNFaceLandmarkRegion2D).
Vision vs ML Kit na iOS: Vision jest szybszy na starszych urządzeniach (A12–A15), ponieważ używa natywnych silników neuronowych Apple. ML Kit używa modeli Google i może być dokładniejszy przy trudnych kątach (profil, silne nachylenie). Do prostej detekcji (kamera, zdjęcie) — Vision. Do filtrów AR i masek konturowych — ML Kit (468 punktów vs 76 punktów w 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 // znormalizowane 0..1
let confidence = face.confidence
}
}
let handler = VNImageRequestHandler(
cgImage: cgImage, orientation: .up, options: [:]
)
try handler.perform([request])
VNDetectFaceLandmarksRequest — rozszerzona wersja dla kluczowych punktów. Zwraca VNFaceLandmarkRegion2D dla każdej grupy punktów: leftEye, rightEye, nose, faceContour, innerLips, outerLips. Każda grupa to tablica CGPoint (znormalizowane). Vision nie zwraca 468 punktów jak ML Kit — tylko 76 kluczowych. Do precyzyjnej maski twarzy ML Kit jest lepszy, do podstawowej — Vision.
OpenCV Haar Cascade — klasyczny algorytm Face Detection oparty na kaskadzie cech Haar-like (Viola-Jones, 2001). Mimo wieku, Haar Cascade jest nadal używany w projektach z ograniczonymi zasobami: Raspberry Pi, urządzenia IoT, systemy wbudowane. Algorytm nie wymaga GPU ani NPU — działa na każdym CPU z prędkością 5–15 ms na klatkę w rozdzielczości VGA.
LBP Cascade (Local Binary Patterns) — alternatywa dla Haar Cascade w OpenCV. LBP jest szybszy (2–5 ms) i mniej wrażliwy na oświetlenie, ale daje więcej fałszywych trafień. Haar jest dokładniejszy (85–90% wobec 80–85% dla LBP), ale wrażliwy na odbicia i cienie. Dla aplikacji mobilnych OpenCV Face Detection ustępuje metodom sieci neuronowych pod względem dokładności, ale wygrywa pod względem kompatybilności — działa na każdym urządzeniu.
// Wykrywanie twarzy OpenCV przez 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 = obwiednia twarzy
}
Wady OpenCV: wysoki wskaźnik fałszywych trafień (do 15%), słaba praca z profilami (>30° — spadek dokładności do 50%), brak landmarks bez dodatkowego modelu, brak trackingu między klatkami. Dla nowoczesnych aplikacji mobilnych OpenCV Face Detection to fallback dla urządzeń bez Google Play Services (Huawei, Amazon Fire). Do głównych scenariuszy — ML Kit lub Vision.
Face Detection — określanie obecności i położenia twarzy na obrazie. Wynik: bounding box i kluczowe punkty. Face Recognition — identyfikacja osoby na podstawie twarzy: określenie, że twarz należy do konkretnej osoby. Face Recognition wykorzystuje embeddingi (wektor liczb reprezentujący twarz) i porównuje je z bazą znanych twarzy. Face Detection to obowiązkowy pierwszy etap dla Face Recognition.
Technologie Face Recognition: FaceNet (Google, 2015) — triplet loss do uczenia embeddingów o rozmiarze 128–512 wartości float, ArcFace (2019) — additive angular margin loss, najlepsza dokładność (99.83% na LFW). Dla aplikacji mobilnych Face Recognition wymaga niestandardowego modelu TFLite — ML Kit nie udostępnia gotowego API do identyfikacji osób (tylko detekcję).
Prywatność na urządzeniach mobilnych: Face Detection jest bezpieczny — nie przechowuje danych o użytkowniku. Face Recognition wymaga przechowywania embeddingów lub zdjęć do porównania. Apple wymaga wyraźnej zgody użytkownika na Face Recognition i zabrania wykorzystywania do reklam. Google ML Kit celowo nie zawiera Face Recognition, aby uniknąć ryzyka prywatności. Dla detekcji bez identyfikacji — brak ograniczeń.
| Cecha | Face Detection | Face Recognition |
|---|---|---|
| Wynik | Gdzie jest twarz na zdjęciu | Do kogo należy twarz |
| Algorytmy | MTCNN, RetinaFace, ML Kit | FaceNet, ArcFace, DeepFace |
| Przechowywanie | Niewymagane | Baza embeddingów |
| Prywatność | Niskie ryzyko | Ograniczenia GDPR, CCPA |
Face Liveness Detection — dodatkowa weryfikacja, że twarz jest prawdziwa (nie zdjęcie/wideo). Wykorzystuje analizę ruchu oczu (blink detection), mikro-mimikę, mapę głębi (kamera 3D). Liveness Detection jest obowiązkowa dla aplikacji bankowych i płatniczych. ML Kit nie ma wbudowanej funkcji liveness — użyj niestandardowego modelu lub Google Play Integrity API do weryfikacji.
Filtry AR i maski — najpopularniejsze zastosowanie Face Detection. Na podstawie punktów konturu twarzy (468 punktów) nakładane są maski 3D, kapelusze, okulary, wąsy. ML Kit Face Detection + SceneKit (iOS) lub Filament (Android) tworzy real-time AR. Snapchat i Instagram używają własnych detektorów opartych na MobileNet + MTCNN. Do niestandardowych filtrów AR wystarczy ML Kit i silnik 3D.
Edytory zdjęć i retusz — Face Detection określa obszar twarzy do automatycznej korekcji: wyrównanie koloru skóry, usuwanie defektów, poprawa oczu i zębów. OpenCV + ML Kit Face Detection dostarcza współrzędne do Selective Gaussian Blur (wygładzanie skóry) i kontrastu oczu. Rzeczywiste zastosowanie — aplikacje Facetune, BeautyPlus, YouCam Makeup.
Kontrola uwagi — określanie kierunku spojrzenia (gaze detection). Face Detection zwraca bounding box i landmarks oczu. Na podstawie położenia źrenicy względem oka określa się, gdzie patrzy użytkownik: w ekran, w lewo, w prawo, w górę. Stosowane w e-learningu (kontrola, czy student patrzy w wykład), reklamie (metryki uwagi), asystentach kierowcy (kontrola zmęczenia).
// ARKit + Vision dla filtra AR
let faceLandmarksRequest = VNDetectFaceLandmarksRequest { req, _ in
guard let face = req.results?.first as? VNFaceObservation else { return }
if let leftEye = face.landmarks?.leftEye {
// Nakładka obiektu AR na lewym oku
}
}
let handler = VNSequenceRequestHandler()
for pixelBuffer in videoStream {
try handler.perform([faceLandmarksRequest], on: pixelBuffer)
}
Medycyna i wellness — Face Detection wykorzystuje się do analizy asymetrii twarzy (diagnostyka zaburzeń neurologicznych), oceny tętna na podstawie mikrowibracji skóry (fotopletyzmografia przez kamerę), określania nawilżenia skóry. ML Kit Face Detection + OpenCV zapewniają wystarczającą dokładność do wstępnego screeneringu bez certyfikacji medycznej. Do medycyny produkcyjnej wymagana jest certyfikacja FDA/CE.
Często zadawane pytania
Face Detection — znajduje twarz na obrazie i zwraca jej granice (współrzędne prostokąta). Face Recognition — określa, czyja to twarz, porównując z bazą znanych twarzy. Detekcja to pierwszy krok do rozpoznawania. ML Kit i Vision Framework udostępniają tylko Face Detection. Do rozpoznawania potrzebny jest niestandardowy model TFLite (FaceNet, ArcFace) + baza embeddingów na urządzeniu.
ML Kit Face Detection — najszybszy na nowoczesnych urządzeniach (5–15 ms na klatkę) dzięki NNAPI/GPU Delegate. Apple Vision Framework — szybszy na iOS (A12+ przez ANE) — 3–10 ms. OpenCV Haar Cascade — 5–10 ms na CPU, ale niższa dokładność (82% wobec 98% w ML Kit). Na urządzeniach z NPU (Snapdragon 8 Gen 3, Apple A17 Pro) ML Kit i Vision wykonują detekcję w 2–5 ms.
ML Kit i Vision Framework działają poprawnie z okularami (w tym przyciemnianymi) i maskami medycznymi. Dokładność detekcji przy masce spada z 98% do 90–92%, ale twarz jest nadal wykrywana na podstawie górnej części (oczy, brwi, czoło). Punkty konturu (kontur twarzy) stają się mniej dokładne — dla masek używaj tylko classification mode (uśmiech, otwarte oczy) bez konturu.
Tak, Face Detection w czasie rzeczywistym jest obsługiwane przez wszystkie nowoczesne SDK. ML Kit — do 60 FPS na klatkę 480p przez CameraX Analyzer. Apple Vision — do 30 FPS na iOS przez AVFoundation. Do real-time używaj trybu FAST performance, zmniejsz rozdzielczość do 480p i włącz face tracking (ML Kit) do zachowania ID między klatkami bez ponownego detektowania każdej klatki.
Nie, wszystkie nowoczesne mobilne SDK Face Detection działają w pełni lokalnie. ML Kit pobiera model przez Google Play Services przy pierwszym uruchomieniu (jeśli wybrano tryb pobrany), po czym działa offline. Apple Vision Framework — wbudowany w iOS, nie wymaga internetu. OpenCV — w pełni offline. Dla chmurowych API (Google Cloud Vision, AWS Rekognition) internet jest potrzebny, ale nie są one używane w aplikacjach mobilnych do real-time.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również