Face Detection là công nghệ thị giác máy tính để tìm và định vị khuôn mặt người trong ảnh kỹ thuật số và luồng video. Không giống như Face Recognition (nhận dạng danh tính), Face Detection chỉ xác định sự hiện diện của khuôn mặt và ranh giới của nó — bounding box và keypoints (mắt, mũi, miệng). Trong phát triển di động, Face Detection được sử dụng trong ML Kit, ARKit, Vision Framework và OpenCV. Theo Google ML Kit, 2025, việc phát hiện khuôn mặt được thực hiện trong 5–15 ms trên các thiết bị hiện đại với độ chính xác 98%.
Những điểm chính
Face Detection là một tác vụ thị giác máy tính để phát hiện sự hiện diện và vị trí của khuôn mặt người trong ảnh. Thuật toán trả về bounding box (hình chữ nhật quanh khuôn mặt) và confidence score (xác suất đó là khuôn mặt). Các thuật toán hiện đại cũng trả về facial landmarks — điểm chính (mắt, lông mày, mũi, miệng, đường viền khuôn mặt). Face Detection là bước đầu tiên cho nhiều tác vụ ML: nhận dạng người, bộ lọc AR, phân tích sự chú ý.
Lịch sử thuật toán bắt đầu với Viola-Jones (2001) — một tầng các đặc trưng dạng Haar trên CPU. Trong những năm 2010, HOG + SVM (Histogram of Oriented Gradients) chiếm ưu thế. Từ năm 2016, tất cả các thuật toán hiện đại đều dựa trên mạng nơ-ron tích chập (CNN): MTCNN, RetinaFace, SSH, MobileNet-SSD, YOLO-Face. Các thuật toán CNN trên GPU đạt độ chính xác 95–99% so với 85–90% của các phương pháp cổ điển. Theo chuẩn WiderFace (2025), RetinaFace đạt mAP 96,3% trên tập con khó nhất.
MTCNN (Multi-Task Cascaded CNN) là bộ phát hiện ba tầng cổ điển: P-Net (Proposal Network) tìm ứng viên, R-Net (Refine Network) lọc chúng, O-Net (Output Network) tinh chỉnh bounding box và xuất landmarks. MTCNN chạy trên CPU với tốc độ 30–50 ms mỗi khung hình ở độ phân giải 640x480. Đối với thiết bị di động, MTCNN cung cấp sự cân bằng tối ưu giữa tốc độ và độ chính xác mà không cần GPU.
| Thuật toán | Độ chính xác (WiderFace) | Tốc độ (640x480) | Nền tảng |
|---|---|---|---|
| RetinaFace | 96,3% | 15 ms (GPU) | Android, iOS |
| MTCNN | 91,2% | 30–50 ms (CPU) | Đa nền tảng |
| ML Kit | 98,0% | 5–15 ms (GPU/NPU) | Android, iOS |
| OpenCV Haar | 82,5% | 5–10 ms (CPU) | Đa nền tảng |
Face Detection thời gian thực yêu cầu 30+ FPS cho video. Điều này có thể đạt được trên điện thoại thông minh hiện đại nhờ NPU (Neural Processing Unit) — Qualcomm Hexagon, Apple Neural Engine, MediaTek APU. NPU thực hiện phát hiện trong 2–5 ms với mức tiêu thụ điện năng 50–100 mW, trong khi GPU tiêu thụ 500–2000 mW. Đối với phát hiện liên tục (camera luôn bật), NPU là lựa chọn thực tế duy nhất mà không gây quá nhiệt thiết bị.
ML Kit Face Detection là SDK phổ biến nhất để phát hiện khuôn mặt trên thiết bị di động. ML Kit cung cấp hai chế độ: chế độ đường viền (468 điểm đường viền khuôn mặt để phủ mặt nạ chính xác) và chế độ phân loại (phát hiện cảm xúc: cười, mắt mở, miệng mở). Các chế độ được kết hợp trong FaceDetectorOptions. ML Kit sử dụng mạng nơ-ron MobileNetV2-SSD của Google với tối ưu hóa qua NNAPI/GPU Delegate.
Cấu hình ML Kit Face Detection: setPerformanceMode(FACE_DETECTION_FAST / ACCURATE), setLandmarkMode (điểm chính), setContourMode (điểm đường viền), setClassificationMode (cảm xúc). Để có tốc độ tối đa, hãy sử dụng FAST + LANDMARKS_ONLY + không có đường viền. Cho bộ lọc AR — ACCURATE + ALL_CONTOURS. Theo Google (2025), chế độ FAST đạt độ chính xác 98% ở 5 ms, ACCURATE — 99% ở 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 trong ML Kit — một tính năng độc đáo cho luồng video. Mỗi khuôn mặt được phát hiện được gán một tracking ID (số nguyên) được duy trì giữa các khung hình. Điều này cho phép gắn các đối tượng AR vào một khuôn mặt cụ thể mà không cần phát hiện lại. Bộ theo dõi sử dụng Optical Flow và giữ ID ngay cả khi khuôn mặt bị che một phần. Tracking ID được đặt lại khi khuôn mặt rời khỏi khung hình hơn 1 giây.
Apple Vision Framework là một framework gốc iOS cho Face Detection hoạt động qua Core ML trên Apple Neural Engine. Vision cung cấp VNDetectFaceRectanglesRequest (chỉ bounding box) và VNDetectFaceLandmarksRequest (với các điểm đường viền). Vision Framework được tích hợp trong iOS từ iOS 11 và không yêu cầu SDK bổ sung — nó là một phần của Foundation.
Ưu điểm của Vision Framework: không phụ thuộc vào thư viện bên thứ ba, hoạt động qua Apple Neural Engine (ANE) trên chip A12+, xử lý tự động hướng ảnh qua exifOrientation, hỗ trợ CIDetectorAccuracy để điều chỉnh tốc độ/độ chính xác. Vision trả về VNFaceObservation với bounding box (tọa độ chuẩn hóa 0..1) và landmarks (VNFaceLandmarkRegion2D).
Vision vs ML Kit trên iOS: Vision nhanh hơn trên thiết bị cũ (A12–A15) vì sử dụng engine nơ-ron gốc của Apple. ML Kit sử dụng mô hình Google và có thể chính xác hơn ở góc phức tạp (nghiêng, mặt nghiêng mạnh). Đối với phát hiện đơn giản (camera, ảnh) — hãy dùng Vision. Cho bộ lọc AR và mặt nạ đường viền — hãy dùng ML Kit (468 điểm so với 76 điểm trong 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 là phiên bản mở rộng cho các điểm chính. Trả về VNFaceLandmarkRegion2D cho mỗi nhóm điểm: leftEye, rightEye, nose, faceContour, innerLips, outerLips. Mỗi nhóm là một mảng CGPoint (đã chuẩn hóa). Vision không trả về 468 điểm như ML Kit — chỉ 76 điểm chính. Đối với mặt nạ chính xác, ML Kit được ưa chuộng hơn; đối với phát hiện cơ bản, Vision là đủ.
OpenCV Haar Cascade là thuật toán Face Detection cổ điển dựa trên tầng các đặc trưng dạng Haar (Viola-Jones, 2001). Mặc dù đã cũ, Haar Cascade vẫn được sử dụng trong các dự án có tài nguyên hạn chế: Raspberry Pi, thiết bị IoT, hệ thống nhúng. Thuật toán không yêu cầu GPU hay NPU — nó chạy trên bất kỳ CPU nào với tốc độ 5–15 ms mỗi khung hình ở độ phân giải VGA.
LBP Cascade (Local Binary Patterns) là một giải pháp thay thế cho Haar Cascade trong OpenCV. LBP nhanh hơn (2–5 ms) và ít nhạy cảm với ánh sáng hơn, nhưng tạo ra nhiều kết quả dương tính giả hơn. Haar chính xác hơn (85–90% so với 80–85% của LBP), nhưng nhạy cảm với ánh sáng chói và bóng tối. Đối với ứng dụng di động, OpenCV Face Detection kém hơn các phương pháp mạng nơ-ron về độ chính xác, nhưng thắng về khả năng tương thích — nó hoạt động trên mọi thiết bị.
// 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
}
Hạn chế của OpenCV: tỷ lệ dương tính giả cao (lên đến 15%), hiệu suất kém ở góc nghiêng (>30° — độ chính xác giảm xuống 50%), không có landmarks nếu không có mô hình bổ sung, không theo dõi giữa các khung hình. Đối với ứng dụng di động hiện đại, OpenCV Face Detection đóng vai trò dự phòng cho thiết bị không có Google Play Services (Huawei, Amazon Fire). Đối với các tình huống chính — hãy sử dụng ML Kit hoặc Vision.
Face Detection — xác định sự hiện diện và vị trí của khuôn mặt trong ảnh. Kết quả: bounding box và điểm chính. Face Recognition — nhận dạng một người qua khuôn mặt: xác định khuôn mặt này thuộc về một cá nhân cụ thể. Face Recognition sử dụng embeddings (vector số đại diện cho khuôn mặt) và so sánh chúng với cơ sở dữ liệu khuôn mặt đã biết. Face Detection là bước đầu tiên bắt buộc cho Face Recognition.
Công nghệ Face Recognition: FaceNet (Google, 2015) — triplet loss để huấn luyện embeddings 128–512 giá trị float, ArcFace (2019) — additive angular margin loss, độ chính xác tốt nhất (99,83% trên LFW). Đối với ứng dụng di động, Face Recognition yêu cầu mô hình TFLite tùy chỉnh — ML Kit không cung cấp API sẵn sàng để nhận dạng danh tính (chỉ phát hiện).
Quyền riêng tư trên thiết bị di động: Face Detection an toàn — không lưu trữ dữ liệu người dùng. Face Recognition yêu cầu lưu trữ embeddings hoặc ảnh để so sánh. Apple yêu cầu sự đồng ý rõ ràng của người dùng cho Face Recognition và cấm sử dụng cho quảng cáo. Google ML Kit cố tình không bao gồm Face Recognition để tránh rủi ro về quyền riêng tư. Đối với phát hiện không nhận dạng — không có hạn chế.
| Đặc điểm | Face Detection | Face Recognition |
|---|---|---|
| Kết quả | Khuôn mặt ở đâu trong ảnh | Khuôn mặt của ai |
| Thuật toán | MTCNN, RetinaFace, ML Kit | FaceNet, ArcFace, DeepFace |
| Lưu trữ | Không yêu cầu | Cơ sở dữ liệu embeddings |
| Quyền riêng tư | Rủi ro thấp | Hạn chế GDPR, CCPA |
Face Liveness Detection — kiểm tra bổ sung để đảm bảo khuôn mặt là thật (không phải ảnh/video). Sử dụng phân tích chuyển động mắt (phát hiện chớp mắt), vi biểu cảm, bản đồ độ sâu (camera 3D). Liveness Detection là bắt buộc cho ứng dụng ngân hàng và thanh toán. ML Kit không có liveness tích hợp — hãy sử dụng mô hình tùy chỉnh hoặc Google Play Integrity API để xác minh.
Bộ lọc AR và mặt nạ — ứng dụng phổ biến nhất của Face Detection. Dựa trên các điểm đường viền khuôn mặt (468 điểm), mặt nạ 3D, mũ, kính, ria mép được phủ lên. ML Kit Face Detection + SceneKit (iOS) hoặc Filament (Android) tạo trải nghiệm AR thời gian thực. Snapchat và Instagram sử dụng bộ phát hiện riêng dựa trên MobileNet + MTCNN. Đối với bộ lọc AR tùy chỉnh, ML Kit và engine 3D là đủ.
Trình chỉnh sửa ảnh và chỉnh sửa — Face Detection xác định vùng khuôn mặt để chỉnh sửa tự động: cân bằng màu da, xóa khuyết điểm, cải thiện mắt và răng. OpenCV + ML Kit Face Detection cung cấp tọa độ cho Selective Gaussian Blur (làm mịn da) và độ tương phản mắt. Ứng dụng thực tế — Facetune, BeautyPlus, YouCam Makeup.
Giám sát sự chú ý — xác định hướng nhìn (gaze detection). Face Detection trả về bounding box và landmarks của mắt. Vị trí của đồng tử so với mắt xác định người dùng đang nhìn vào đâu: màn hình, trái, phải, lên trên. Được sử dụng trong e-learning (giám sát sinh viên có xem bài giảng không), quảng cáo (chỉ số chú ý), hỗ trợ lái xe (giám sát mệt mỏi).
// 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)
}
Y tế và sức khỏe — Face Detection được sử dụng để phân tích bất đối xứng khuôn mặt (chẩn đoán rối loạn thần kinh), ước tính nhịp tim từ vi rung động da (chụp thể tích quang điện qua camera), xác định độ ẩm của da. ML Kit Face Detection + OpenCV cung cấp đủ độ chính xác cho sàng lọc sơ bộ mà không cần chứng nhận y tế. Đối với y tế sản xuất, cần chứng nhận FDA/CE.
Câu hỏi thường gặp
Face Detection — tìm khuôn mặt trong ảnh và trả về ranh giới (tọa độ hình chữ nhật). Face Recognition — xác định khuôn mặt của ai bằng cách so sánh với cơ sở dữ liệu khuôn mặt đã biết. Phát hiện là bước đầu tiên cho nhận dạng. ML Kit và Vision Framework chỉ cung cấp Face Detection. Để nhận dạng, bạn cần mô hình TFLite tùy chỉnh (FaceNet, ArcFace) + cơ sở dữ liệu embeddings trên thiết bị.
ML Kit Face Detection là nhanh nhất trên thiết bị hiện đại (5–15 ms mỗi khung hình) nhờ NNAPI/GPU Delegate. Apple Vision Framework nhanh hơn trên iOS (A12+ qua ANE) — 3–10 ms. OpenCV Haar Cascade — 5–10 ms trên CPU, nhưng độ chính xác thấp hơn (82% so với 98% của ML Kit). Trên thiết bị có NPU (Snapdragon 8 Gen 3, Apple A17 Pro), ML Kit và Vision thực hiện phát hiện trong 2–5 ms.
ML Kit và Vision Framework hoạt động chính xác với kính (bao gồm kính tối màu) và khẩu trang y tế. Độ chính xác phát hiện với khẩu trang giảm từ 98% xuống 90–92%, nhưng khuôn mặt vẫn được phát hiện qua phần trên (mắt, lông mày, trán). Các điểm đường viền (đường viền khuôn mặt) trở nên kém chính xác hơn — đối với khẩu trang, chỉ sử dụng chế độ phân loại (cười, mắt mở) mà không có đường viền.
Có, Face Detection thời gian thực được hỗ trợ bởi tất cả SDK hiện đại. ML Kit — lên đến 60 FPS ở 480p qua CameraX Analyzer. Apple Vision — lên đến 30 FPS trên iOS qua AVFoundation. Để có thời gian thực, hãy sử dụng chế độ FAST, giảm độ phân giải xuống 480p và bật face tracking (ML Kit) để giữ ID giữa các khung hình mà không cần phát hiện lại mỗi khung hình.
Không, tất cả SDK Face Detection di động hiện đại đều hoạt động hoàn toàn trên thiết bị. ML Kit tải mô hình qua Google Play Services khi khởi chạy lần đầu (nếu chế độ tải xuống được chọn), sau đó hoạt động ngoại tuyến. Apple Vision Framework — được tích hợp trong iOS, không cần internet. OpenCV — hoàn toàn ngoại tuyến. Đối với API đám mây (Google Cloud Vision, AWS Rekognition) cần internet, nhưng chúng không được sử dụng trong ứng dụng di động cho phát hiện thời gian thực.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm