Facial Recognition
Nhận diện khuôn mặt xác định hoặc xác minh danh tính bằng cách so sánh các embedding khuôn mặt. Cách pipeline hoạt động, xác minh so với nhận diện, thiên lệch và quyền riêng tư.
Nhận diện khuôn mặt là công nghệ sinh trắc học xác định hoặc xác minh một người bằng cách so sánh ảnh khuôn mặt của họ với các khuôn mặt đã lưu. Các hệ thống hiện đại dùng deep learning để chuyển mỗi khuôn mặt thành một embedding, một vector số thường được gọi là dấu vân tay khuôn mặt, rồi quyết định hai khuôn mặt có thuộc cùng một người hay không dựa trên mức độ tương đồng giữa các embedding. Công nghệ này mở khóa điện thoại, giúp hành khách qua cổng sân bay nhanh hơn và xác minh khách hàng mở tài khoản ngân hàng trực tuyến; đây cũng là một trong những ứng dụng thị giác máy tính chịu nhiều quy định nhất vì khuôn mặt có thể bị ghi lại mà người đó không hay biết.
Cách nhận diện khuôn mặt hoạt động#
Hệ thống nhận diện thực hiện bốn giai đoạn trên mỗi ảnh:
- Phát hiện: Detector khuôn mặt tìm từng khuôn mặt và trả về bounding box cùng một số điểm mốc trên khuôn mặt.
- Căn chỉnh: Khuôn mặt được xoay, thay đổi tỷ lệ và cắt để mắt, mũi, miệng nằm ở các vị trí cố định; thao tác này loại bỏ phần lớn biến thiên do tư thế đầu và khoảng cách gây ra.
- Mã hóa bằng CNN: Mạng ánh xạ ảnh cắt đã căn chỉnh thành một embedding có độ dài cố định.
- So khớp bằng độ tương đồng cosine: Embedding mới được so sánh với các embedding đã đăng ký, rồi ngưỡng quyết định hai embedding có khớp hay không. Các hệ thống triển khai quy mô lớn lưu dấu vân tay khuôn mặt đã đăng ký trong cơ sở dữ liệu vector để tìm kiếm nhanh.
Phát hiện khuôn mặt là bài toán phát hiện đối tượng; model YOLO26 của Ultralytics được fine-tune trên dataset khuôn mặt như WIDER FACE có thể chạy thời gian thực trên camera edge và chuyển hộp khuôn mặt sang các giai đoạn tiếp theo. Trước deep learning, các hệ thống dựa vào đặc trưng được thiết kế thủ công, từ khoảng cách giữa các mốc khuôn mặt đến Eigenface và mẫu nhị phân cục bộ; embedding học được đã thay thế chúng vì ổn định hơn nhiều trước thay đổi về ánh sáng, biểu cảm và tuổi tác. FaceNet năm 2015 huấn luyện trực tiếp embedding 128 chiều gọn nhẹ bằng triplet loss; các loss dựa trên margin như ArcFace hiện đẩy embedding của những người khác nhau ra xa hơn. Giai đoạn đối sánh trả lời hai câu hỏi khác nhau:
Xác minh (1:1) trả lời câu hỏi một khuôn mặt có thuộc danh tính được khai báo hay không, chẳng hạn khi điện thoại kiểm tra chủ nhân. Nhận dạng (1:N) tìm kiếm trong toàn bộ gallery, chẳng hạn khi hệ thống kiểm soát truy cập đối chiếu khuôn mặt với tất cả nhân viên đã đăng ký. Model OpenCV Zoo chạy toàn bộ pipeline chỉ với vài dòng code; đoạn code này đăng ký các khuôn mặt trong một ảnh rồi nhận dạng khuôn mặt trong bản sao được lật gương bằng cách đối chiếu với gallery đó.
import urllib.request
import cv2
# Download OpenCV Zoo's face detector (YuNet), face recognizer (SFace), and a test image
zoo = "https://github.com/opencv/opencv_zoo/raw/main/models"
urllib.request.urlretrieve(f"{zoo}/face_detection_yunet/face_detection_yunet_2023mar.onnx", "yunet.onnx")
urllib.request.urlretrieve(f"{zoo}/face_recognition_sface/face_recognition_sface_2021dec.onnx", "sface.onnx")
urllib.request.urlretrieve("https://ultralytics.com/images/bus.jpg", "bus.jpg")
img = cv2.imread("bus.jpg")
detector = cv2.FaceDetectorYN.create("yunet.onnx", "", (img.shape[1], img.shape[0]))
recognizer = cv2.FaceRecognizerSF.create("sface.onnx", "")
# Enroll each detected face as an aligned 128-D embedding
gallery = [recognizer.feature(recognizer.alignCrop(img, face)) for face in detector.detect(img)[1]]
# Identify the faces of a mirrored copy against the gallery (SFace match: cosine >= 0.363)
mirror = cv2.flip(img, 1)
for face in detector.detect(mirror)[1]:
probe = recognizer.feature(recognizer.alignCrop(mirror, face))
print([round(recognizer.match(probe, g, cv2.FaceRecognizerSF_FR_COSINE), 2) for g in gallery])Đoạn code in ra [0.87, 0.06] và [0.09, 0.89]: mỗi khuôn mặt được lật gương có điểm số cao hơn nhiều so với ngưỡng 0.363 khi so với embedding đã đăng ký của chính người đó, và thấp hơn nhiều khi so với embedding của người kia.
Nhận diện khuôn mặt và các thuật ngữ liên quan#
- Phát hiện khuôn mặt: Xác định vị trí khuôn mặt trong ảnh mà không xác định danh tính của người đó; đây là giai đoạn đầu tiên của nhận dạng khuôn mặt, đồng thời hỗ trợ lấy nét tự động của camera và làm mờ khuôn mặt.
- Phân tích khuôn mặt và điện toán cảm xúc: Ước lượng các thuộc tính như biểu cảm, tư thế đầu hoặc tuổi mà không xác định danh tính.
- Tái nhận dạng vật thể (Re-ID): Đối chiếu người qua nhiều camera dựa trên diện mạo toàn thân như quần áo; phương pháp này hoạt động được khi nhìn từ phía sau và ở độ phân giải thấp, nhưng chỉ trong các khoảng thời gian ngắn.
Ứng dụng thực tế#
- Mở khóa thiết bị: Điện thoại xác minh chủ nhân trong chưa đầy một giây; Face ID của Apple chiếu hơn 30.000 chấm hồng ngoại để tạo bản đồ độ sâu mà ảnh in không thể giả mạo.
- Du lịch và kiểm soát biên giới: Cổng tự động đối chiếu ảnh trực tiếp của khách với ảnh được lưu trên chip của hộ chiếu điện tử.
- Xác minh danh tính: Ngân hàng và dịch vụ trực tuyến đối chiếu ảnh selfie với ảnh trên giấy tờ tùy thân do chính phủ cấp khi mở tài khoản, kết hợp với kiểm tra tính sống.
- Sắp xếp ảnh: Ứng dụng ảnh gom nhóm các khuôn mặt trong thư viện cá nhân để người dùng tìm mọi ảnh có người thân.
Accuracy, thiên lệch và giả mạo#
Mọi hệ thống đều phải đánh đổi giữa hai loại lỗi: false match chấp nhận nhầm người, còn false non-match từ chối nhầm người đúng; ngưỡng tương đồng quyết định sự cân bằng này. Đánh giá Công nghệ Nhận diện Khuôn mặt (FRTE) của NIST, trước đây là FRVT, đánh giá thuật toán thương mại trên hàng triệu ảnh; nghiên cứu năm 2019 về 189 thuật toán của 99 nhà phát triển phát hiện khác biệt về nhân khẩu học trong tỷ lệ false positive của phần lớn thuật toán, một ví dụ tiêu biểu về thiên lệch thuật toán. Hệ thống nhận diện cũng có thể bị đánh lừa bằng ảnh, video phát lại trên màn hình và mặt nạ; vì vậy, các hệ thống đưa vào sản xuất bổ sung tính năng phát hiện tấn công trình diện, thường gọi là phát hiện tính sống, bằng cảm biến độ sâu, hồng ngoại hoặc phân tích chuyển động nhỏ.
Quyền riêng tư và quy định#
Dấu vân tay khuôn mặt là dữ liệu sinh trắc học, vì vậy luật xem đây là loại dữ liệu cá nhân có độ nhạy cảm cao. Theo GDPR, dữ liệu sinh trắc học dùng để nhận diện một người thuộc danh mục đặc biệt và cần có cơ sở pháp lý rõ ràng; Đạo luật Quyền riêng tư Thông tin Sinh trắc học của Illinois yêu cầu phải có sự đồng ý bằng văn bản trước khi công ty thu thập dấu vân tay khuôn mặt. Đạo luật AI EU còn đi xa hơn: kể từ ngày 2 tháng 2 năm 2025, đạo luật này cấm xây dựng cơ sở dữ liệu nhận diện khuôn mặt bằng cách thu thập hình ảnh không nhắm mục tiêu từ Internet hoặc CCTV, đồng thời cấm nhận dạng sinh trắc học từ xa theo thời gian thực tại không gian công cộng để thực thi pháp luật, ngoại trừ một số trường hợp được quy định rất chặt chẽ.










