Thêm game tại WuGames.ioTài trợKhám phá kho game trình duyệt miễn phí — chơi ngay, không tải, không đăng ký.Chơi ngay

Đo Độ Giống Khuôn Mặt

So sánh hai ảnh khuôn mặt ngay trên thiết bị bằng embedding FaceNet 128 chiều. Khoảng cách L2/cosine thô, ngưỡng tùy chỉnh, xuất JSON. Không tải lên.

Tải lên 2 ảnh khuôn mặt để so sánh: bấm vào từng ô bên dưới để chọn ảnh, hoặc kéo-thả ảnh vào. Nút So Sánh sẽ bật khi cả hai ảnh đã có khuôn mặt.
Upload
Kéo và thả ảnh vào đây
Ảnh 1
Upload
Kéo và thả ảnh vào đây
Ảnh 2

Giới thiệu công cụ Đo Độ Giống Khuôn Mặt

Công cụ Đo Độ Giống Khuôn Mặt so sánh hai bức ảnh và báo cáo mức độ giống nhau về thị giác của các khuôn mặt dưới dạng phần trăm từ 0% đến 100%. Toàn bộ chạy trong trình duyệt qua @vladmandic/face-api (bản fork được duy trì của face-api.js). Cả hai ảnh được giải mã cục bộ, khuôn mặt được phát hiện bằng detector kiểu MobileNet, mỗi khuôn mặt được mã hóa thành descriptor 128 chiều bởi mạng lấy cảm hứng từ FaceNet, và khoảng cách cosine giữa hai descriptor được chuyển thành phần trăm độ giống. Không byte ảnh nào rời khỏi thiết bị — không có xử lý phía server, không upload, không log.

Dùng để khám phá vui: 'hai anh em họ tôi có thực sự giống nhau không?', 'selfie năm năm trước có còn giống tôi không?', 'hai ngôi sao V-pop không liên quan này có giống nhau không?'. Vui, nhanh, cho bạn một con số. Chúng tôi cố ý chọn chế độ vận hành dễ dãi (chỉ một khuôn mặt tốt nhất mỗi ảnh, không kiểm tra liveness, không lọc chất lượng) để ảnh nhỏ hay chất lượng thấp vẫn cho ra kết quả thay vì lỗi. Điều đó làm công cụ thân thiện nhưng cũng nghĩa là phần trăm không được hiệu chuẩn cho xác thực sinh trắc. Hãy xem điểm số là chỉ báo tương đối về độ giống thị giác, không phải bằng chứng danh tính.

Kết quả tốt nhất cần ảnh chính diện, sáng đều, độ phân giải tốt nơi khuôn mặt chiếm phần đáng kể trong khung hình. Ảnh có kính râm, khẩu trang, trang điểm đậm, mũ che lông mày, góc nghiêng, hay độ phân giải thấp sẽ làm méo descriptor và hạ điểm, ngay cả khi cùng một người có trong cả hai ảnh. Ngược lại, song sinh giống hệt, cha mẹ và con cái, thậm chí người không liên quan cùng độ tuổi, cùng dân tộc, cùng kiểu tóc có thể cho điểm cao bất ngờ. Phẫu thuật thẩm mỹ, thay đổi cân nặng đáng kể, lão hóa hơn 10 năm, hay filter mạnh / phần mềm face-tune cũng quan trọng — mô hình không được huấn luyện để bất biến với những điều đó.

Chúng tôi cố ý thiết kế công cụ này như một thứ tò mò chứ không phải hệ thống xác minh. Không phù hợp cho xác minh danh tính sinh trắc, KYC (know-your-customer), kiểm soát biên giới, giám sát, sàng lọc tuyển dụng, xác minh ứng dụng hẹn hò, hay bất kỳ tình huống nào kết quả được dùng để cho phép hay từ chối ai điều gì. Cho những use case đó bạn cần hệ thống đã được benchmark theo NIST FRVT 1:1, hỗ trợ phát hiện liveness (chống giả mạo), đánh giá công bằng nhân khẩu, ghi danh an toàn và thu hồi. Demo miễn phí trong trình duyệt không thỏa mãn các yêu cầu vận hành, pháp lý hay audit đó.

Quyền riêng tư là theo thiết kế. Trọng số mô hình được tải về trình duyệt một lần (~6 MB, cache cho lần sau) và toàn bộ so sánh chạy cục bộ dưới dạng JavaScript. Không có bước upload, không có cache server tạm, không có API call. Trang web dùng analytics tiêu chuẩn chỉ để đếm traffic. Đóng tab xóa toàn bộ trạng thái. Chúng tôi không lưu, log, bán hay chia sẻ ảnh bạn so sánh.

Cách so sánh hoạt động

Pipeline có ba giai đoạn — phát hiện, căn chỉnh + mã hóa, và chấm điểm khoảng cách — mỗi giai đoạn dùng mạng nơ-ron mã nguồn mở đã được thiết lập. Detector là SSD MobileNetV1 huấn luyện trên WIDER FACE. Trả về một hoặc nhiều bounding box mỗi ảnh kèm độ tin cậy; chúng tôi giữ một khuôn mặt tin cậy nhất mỗi ảnh để so sánh. Nếu cần workflow nhiều khuôn mặt, xem Age & Gender Predictor lặp qua mọi phát hiện.

Mỗi khuôn mặt phát hiện được sau đó được căn chỉnh. Detector landmark 68 điểm (ConvNet nhỏ huấn luyện trên dataset iBUG 300-W) dự đoán tọa độ landmark: khóe mắt ngoài và trong, sống mũi, đầu mũi, khóe miệng, đường hàm. Khuôn mặt được xoay và crop để hai mắt nằm ngang và khoảng cách giữa hai con ngươi được chuẩn hóa. Căn chỉnh quan trọng: mạng mã hóa được huấn luyện trên khuôn mặt đã căn chỉnh và sẽ tạo descriptor không nhất quán trên đầu vào không căn chỉnh.

Crop đã căn chỉnh đi qua mạng mã hóa khuôn mặt — trong face-api.js đây là kiến trúc ResNet-34 lấy cảm hứng từ FaceNet (Schroff, Kalenichenko & Philbin, 2015) và huấn luyện với triplet loss để tạo vector đơn vị 128 chiều cụm chặt trong cùng danh tính và phân tán giữa các danh tính. ArcFace (Deng và cộng sự, 2019) là cải tiến gần đây dùng additive angular-margin loss; bản fork của vladmandic hỗ trợ backbone kiểu ArcFace mới hơn cho độ chính xác cao hơn khi cần. Chúng tôi dùng mô hình ResNet-34 mặc định cho tương thích trình duyệt và footprint.

Hai vector mô tả 128 chiều được so sánh bằng khoảng cách Euclid (L2) mà face-api tính trực tiếp: distance = sqrt(Σ (aᵢ − bᵢ)²). Khoảng cách nhỏ hơn = giống hơn. Ngưỡng 'cùng một người' tiêu chuẩn của face-api.js xấp xỉ 0,6. Chúng tôi ánh xạ khoảng cách L2 đó sang phần trăm tương đồng bằng một đường cong mượt có mốc: 0,0 → 100%, 0,4 → ~70%, 0,6 → ~50%, 1,0 → 0%, để ngưỡng 0,6 rơi vào dải 'có khả năng cùng người' chứ không phải 'khớp một phần'. Với người dùng chuyên nghiệp, chúng tôi cũng hiển thị khoảng cách L2 thô, khoảng cách cosine (1 − dot(a,b)/(|a||b|)) và chuẩn của các vector mô tả trong bảng Chi tiết kỹ thuật, cùng ngưỡng điều chỉnh được và xuất JSON. Phần trăm là thực nghiệm và thân thiện, không được hiệu chỉnh theo chuẩn sinh trắc, nên điểm 85% nên hiểu là 'rất giống', không phải xác suất cùng một người.

Tất cả trọng số được lưu ở dạng số thực 32 bit cho runtime TensorFlow.js trong trình duyệt; tổng dung lượng tải ~6 MB, và trên đường phổ biến chỉ tải bộ phát hiện thực sự được dùng. Suy luận dùng backend đầu tiên khởi tạo được theo thứ tự WebGL → WebAssembly → CPU (bạn có thể xem backend đang dùng trong console trình duyệt); bản dựng này không có WebGPU. So sánh đầu-cuối hai khuôn mặt thường mất 200 ms đến 1 s trên laptop hiện đại, lâu hơn trên di động. Giao diện hiển thị thanh kiểu độ tin cậy và một trong năm dải định tính (rất giống, giống, hơi giống, không giống, rất khác) chọn vì thân thiện, không vì độ chặt chẽ sinh trắc.

Độ chính xác, ngưỡng và nơi công cụ thất bại

Trên benchmark học thuật LFW (Labelled Faces in the Wild), encoder khuôn mặt 128 chiều được huấn luyện tốt đạt ~99% độ chính xác xác minh trên các cặp matched. Đó không phải độ chính xác bạn nên kỳ vọng trên ảnh internet bất kỳ. Cặp LFW được lựa chọn trước về chất lượng ảnh và tư thế chính diện; hiệu năng in-the-wild ồn hơn nhiều. NIST FRVT 1:1 — đánh giá hàng chục nhà cung cấp thương mại trên hàng trăm nghìn ảnh vận hành — cho thấy ngay cả hệ thống dẫn đầu cũng có giá trị FAR (False Acceptance Rate) và FRR (False Rejection Rate) thay đổi theo bậc 10 với nhân khẩu, độ tuổi và chất lượng ảnh. Backbone open-source của chúng tôi cũ hơn và nhỏ hơn các leader trên FRVT.

Các chế độ thất bại cụ thể bạn sẽ gặp: song sinh giống hệt hầu như luôn ghi trên 80% — encoder không thể phân biệt đáng tin cậy. Cha mẹ và con trưởng thành, anh chị em, hay người không liên quan cùng dân tộc, cùng độ tuổi, cùng kiểu tóc đều có thể ghi 70–85%. Cùng một người chụp cách nhau 10 năm có thể tụt xuống 50% nếu đặc điểm khuôn mặt thay đổi. Filter mạnh (FaceTune, Snapchat, beauty filter) thực chất chỉnh sửa một khuôn mặt khác vào ảnh và sẽ hạ điểm đáng kể. Kính, khẩu trang, râu, hijab, mũ, che một phần đều giảm độ chính xác vì che landmark thông tin.

Công bằng nhân khẩu là giới hạn đã biết. Buolamwini & Gebru (2018), NIST FRVT (2019, 2024), và nhiều audit khác đã chỉ ra rằng các mô hình nhận dạng khuôn mặt huấn luyện chủ yếu trên đối tượng da sáng tạo tỉ lệ lỗi cao hơn cho khuôn mặt da tối, phụ nữ, và trẻ em. Descriptor face-api.js dùng ở đây kế thừa các thiên kiến đó. Hãy thận trọng với mọi so sánh đơn lẻ, đặc biệt khi một hoặc cả hai đối tượng thuộc nhóm thiếu đại diện trong các tập huấn luyện công khai tiêu chuẩn.

Đừng dùng công cụ này như xác thực sinh trắc, hệ thống chứng minh danh tính, kiểm tra chống gian lận, khớp giám sát, bộ lọc sàng lọc tuyển dụng, hay xác minh ứng dụng hẹn hò. Cho những việc đó bạn cần hệ thống thương mại được audit có phát hiện liveness (để ảnh in hay video deep-fake không lọt), pipeline thu hồi, và đánh giá thiên kiến có tài liệu. Chúng tôi không có những đảm bảo đó và minh thị bảo bạn đừng triển khai cái này trong production. Đây là công cụ tò mò, và điểm số là hướng dẫn, không phải phán quyết.

  • Song sinh giống hệt thường ghi 85–95% — mô hình không thể phân biệt đáng tin cậy.
  • Cùng một người cách nhau hơn 10 năm có thể tụt xuống 50–70% độ giống do lão hóa tự nhiên.
  • Kính râm, khẩu trang, râu, mũ, hay che khác chặn landmark và giảm điểm.
  • Filter mạnh (FaceTune, beauty filter, Snapchat lens) thực chất chỉnh sửa khuôn mặt và làm méo descriptor.
  • Công bằng nhân khẩu không đều: tông da tối, phụ nữ, trẻ em có tỉ lệ lỗi cao hơn do mất cân đối tập huấn luyện.
  • Công cụ chỉ báo cáo một khuôn mặt tốt nhất mỗi ảnh; ảnh nhóm phải crop về một khuôn mặt trước.
  • Không có phát hiện liveness — ảnh in của khuôn mặt ai đó tạo ra cùng descriptor với ảnh chụp trực tiếp.
  • Không phù hợp cho xác minh danh tính sinh trắc, KYC, kiểm soát biên giới, tuyển dụng, hay kiểm tra an toàn ứng dụng hẹn hò.
  • Mapping từ khoảng cách cosine sang phần trăm là thân thiện và không hiệu chuẩn theo tiêu chuẩn sinh trắc.

Thuật ngữ

Face embedding (descriptor)
Vector số có độ dài cố định — ở đây là 128 số floating-point — được mạng nơ-ron tạo ra mã hóa danh tính thị giác của khuôn mặt. Ảnh cùng một người nên có embedding tương tự; ảnh người khác nhau nên có embedding khác biệt.
Khoảng cách Euclid (L2)
Khoảng cách đường thẳng giữa hai vector mô tả: sqrt(Σ (aᵢ − bᵢ)²). Đây là chỉ số chuẩn mà công cụ này báo cáo và là chỉ số mà ngưỡng 'cùng một người' ~0,6 nói tới. Nhỏ hơn = giống hơn.
Khoảng cách cosine
Một thước đo hình học khác về độ thẳng hàng của hai vector: khoảng cách cosine = 1 − dot(a,b)/(|a||b|). Được hiển thị bên cạnh khoảng cách L2 trong bảng Chi tiết kỹ thuật cho người dùng chuyên nghiệp thích chỉ số dựa trên góc.
Threshold (ngưỡng)
Khoảng cách cosine dưới ngưỡng đó hai descriptor được tuyên bố là khớp. face-api.js dùng ~0,6 mặc định; tương ứng khoảng 50% trong UI thân thiện. Hạ ngưỡng làm công cụ chặt chẽ hơn (ít false match hơn, nhiều miss match hơn).
FAR (False Acceptance Rate)
Tỉ lệ matcher khuôn mặt sai khi nói hai người khác nhau là cùng một người. Quan trọng cho hệ thống bảo mật — FAR cao nghĩa là kẻ giả mạo lọt qua.
FRR (False Rejection Rate)
Tỉ lệ matcher khuôn mặt sai khi nói ảnh cùng một người là khác nhau. FRR cao nghĩa là người dùng thật bị bất tiện.
FaceNet
Bài báo bước ngoặt 2015 của Schroff, Kalenichenko & Philbin (Google) giới thiệu sơ đồ huấn luyện triplet-loss để tạo embedding khuôn mặt 128 chiều trên hyperphere đơn vị.
ArcFace
Hàm loss nhận dạng khuôn mặt năm 2019 (Deng và cộng sự, InsightFace) dùng additive angular margin để đẩy các lớp descriptor xa nhau hơn trên hyperphere. State-of-the-art trên benchmark học thuật như LFW và IJB-B.
LFW / NIST FRVT
Benchmark học thuật và chính phủ cho hệ thống nhận dạng khuôn mặt. LFW (Labelled Faces in the Wild, 2007) nhỏ và chất lượng cao. NIST FRVT (Face Recognition Vendor Test) là đánh giá chính phủ tiêu chuẩn vàng, với hàng trăm nghìn ảnh vận hành và xuất bản liên tục.

Câu Hỏi Thường Gặp

AI so sánh hai khuôn mặt như thế nào?

Nó phát hiện một khuôn mặt mỗi ảnh, căn chỉnh từng khuôn mặt bằng 68 landmark khuôn mặt, mã hóa từng khuôn mặt đã căn chỉnh thành vector 128 chiều bằng ResNet kiểu FaceNet, và tính khoảng cách Euclid (L2) giữa hai vector. Khoảng cách cosine được map sang điểm độ giống 0–100% thân thiện. Toàn bộ inference là JavaScript trong trình duyệt qua @vladmandic/face-api trên TensorFlow.js.

Phần trăm thực sự nghĩa là gì?

Là mapping mượt từ khoảng cách Euclid (L2) sang thang 0–100. Ước chừng: 90–100% = gần như giống hệt về thị giác (cùng người, song sinh, hoặc người giống cực đoan); 70–90% = có khả năng cùng người, hoặc người thân; 50–70% = có một số đặc điểm chung nhưng không nhất thiết cùng người; dưới 50% = người khác nhau. KHÔNG phải xác suất và KHÔNG phải kết quả xác minh sinh trắc.

Sao người không liên quan ghi 60%?

Vì descriptor mã hóa hình dạng tổng thể của khuôn mặt — khoảng cách mắt, độ rộng mũi, góc hàm, dân tộc, tuổi — và nhiều người không liên quan chia sẻ đủ các đặc điểm đó để rơi vào cùng vùng không gian embedding. Đây là tính chất cơ bản của descriptor 128 chiều, không phải lỗi.

Sao ảnh chính tôi chỉ ghi 75% so với ảnh khác của tôi?

Nguyên nhân thường gặp: (1) ánh sáng hoặc góc máy khác; (2) tuổi khác (hơn vài năm có thể dịch chuyển descriptor đáng kể); (3) kính hoặc râu chỉ trong một ảnh; (4) filter mạnh hoặc FaceTune trong một ảnh; (5) một ảnh có độ phân giải thấp hơn nhiều; (6) bạn trang điểm trong một ảnh và không trang điểm ảnh kia. Thử cặp ảnh khác với điều kiện tương tự.

Ảnh có bị upload không?

Không. Tất cả phát hiện, mã hóa và so sánh khuôn mặt diễn ra cục bộ trong trình duyệt qua TensorFlow.js. Trọng số mô hình được tải về một lần (~6 MB, cache) và inference chạy trên JPEG bạn chọn. Byte ảnh không bao giờ rời thiết bị. Chúng tôi không lưu, log hay chia sẻ ảnh.

Có dùng để xác minh danh tính được không?

Không. Đừng dùng công cụ này để xác minh danh tính, kiểm soát truy cập dịch vụ, chống gian lận, hay sàng lọc nhân viên / hẹn hò. Không có phát hiện liveness, không có ngưỡng hiệu chuẩn, không có audit công bằng nhân khẩu, và dùng mô hình open-source nhỏ hơn hệ thống thương mại. Để xác minh danh tính cần nhà cung cấp được đánh giá theo NIST FRVT với FAR/FRR tài liệu hóa và đảm bảo vận hành.

Sao song sinh giống hệt không phân biệt được?

Descriptor khuôn mặt được huấn luyện để bất biến với ánh sáng, biểu cảm và tư thế, nhưng không được thiết kế để bắt micro-feature mà ngay cả con người cũng dùng để phân biệt song sinh (nốt ruồi nhỏ, bất đối xứng nhẹ). Phân biệt song sinh là lĩnh vực nghiên cứu đang hoạt động; encoder khuôn mặt tiêu chuẩn thường thất bại.

Có phân biệt được cha mẹ và con không?

Thường, nhưng không luôn. Cha mẹ và con trưởng thành chia sẻ nhiều đặc điểm khuôn mặt di truyền và có thể ghi 60–80%. Mô hình được huấn luyện đặt cùng danh tính gần nhau, nhưng không có khái niệm 'giống gia đình' so với 'danh tính', nên điểm cao giữa người thân là bình thường và mong đợi.

Có hỗ trợ nhiều khuôn mặt trong một ảnh không?

Hiện tại nó chọn một khuôn mặt tin cậy nhất mỗi ảnh và so sánh hai cái đó. Nếu ảnh là chụp nhóm, hãy crop từng cái về một khuôn mặt trước. Cho workflow nhiều khuôn mặt chúng tôi có Age & Gender Predictor riêng lặp qua mọi khuôn mặt phát hiện được.

Nếu không phát hiện khuôn mặt thì sao?

Công cụ báo 'không phát hiện khuôn mặt' cho ảnh đó. Nguyên nhân thường: khuôn mặt quá nhỏ (dưới kích thước tối thiểu của detector), khuôn mặt ở góc cực đoan, ánh sáng quá tối hay quá sáng, ảnh mờ nặng, hay ảnh không thực sự là ảnh khuôn mặt. Thử ảnh rõ hơn, lớn hơn, chính diện.

Đo Độ Giống Khuôn Mặt — So sánh hai ảnh khuôn mặt ngay trên thiết bị bằng embedding FaceNet 128 chiều. Khoảng cách L2/cosine thô, ngưỡng tùy chỉ
Đo Độ Giống Khuôn Mặt

Làm sao xem khoảng cách thô và tự chọn ngưỡng?

Mở bảng Chi tiết kỹ thuật bên dưới kết quả. Nó hiển thị khoảng cách Euclid (L2) thô, khoảng cách cosine và chuẩn của cả hai vector mô tả 128 chiều — chính là những con số mà quy trình phả hệ, khử trùng lặp hay làm sạch dữ liệu cần. Thanh trượt ngưỡng cho phép bạn đặt điểm quyết định L2 của riêng mình (mặc định 0,6) và phán quyết Khớp / Ranh giới / Không khớp cập nhật trực tiếp mà không phải chạy lại suy luận. Để chọn ngưỡng cho tập dữ liệu của bạn, hãy gán nhãn vài chục cặp đã biết là cùng người và khác người, xem khoảng cách của chúng tụ lại ở đâu, rồi đặt ngưỡng giữa hai cụm để cân bằng giữa chấp nhận sai và từ chối sai.

Tôi có thể xuất hoặc sao chép kết quả để lưu hồ sơ không?

Có. Nút Sao chép JSON trong bảng Chi tiết kỹ thuật sẽ sao chép một đối tượng có cấu trúc — chỉ số, khoảng cách L2 thô, khoảng cách cosine, phần trăm tương đồng, ngưỡng bạn đã dùng, phán quyết và dấu thời gian ISO — vào bộ nhớ tạm, kèm ghi chú rằng đây là ước lượng cục bộ chứ không phải bằng chứng danh tính. Vì mọi thứ được tính cục bộ, JSON không bao giờ chạm tới máy chủ, nên có thể dán an toàn vào nhật ký bằng chứng hoặc nhật ký hàng loạt riêng tư.

Tài liệu tham khảo & nguồn học thuật

  1. Schroff, F., Kalenichenko, D., & Philbin, J.. (2015). FaceNet: A Unified Embedding for Face Recognition and Clustering IEEE CVPR.
  2. Deng, J., Guo, J., Xue, N., & Zafeiriou, S.. (2019). ArcFace: Additive Angular Margin Loss for Deep Face Recognition IEEE CVPR (dự án InsightFace).
  3. Huang, G. B., Ramesh, M., Berg, T., & Learned-Miller, E.. (2007). Labeled Faces in the Wild: A Database for Studying Face Recognition in Unconstrained Environments Đại học Massachusetts Amherst Technical Report.
  4. Grother, P., Ngan, M., & Hanaoka, K.. (2024). NIST Face Recognition Vendor Test (FRVT) Viện Tiêu chuẩn và Công nghệ Quốc gia Hoa Kỳ.
  5. Buolamwini, J., & Gebru, T.. (2018). Gender Shades: Intersectional Accuracy Disparities in Commercial Gender Classification Proceedings of Machine Learning Research.
  6. Mandic, V.. (2024). @vladmandic/face-api — bản fork TypeScript được duy trì của face-api.js Dự án mã nguồn mở, giấy phép MIT.

Last reviewed: · Reviewed by Đội Đạo Đức & Kỹ Thuật AI WuTools

Câu Hỏi Thường Gặp

Việc so sánh khuôn mặt diễn ra trong trình duyệt hay ảnh của tôi bị tải lên?

Mọi thứ chạy bên trong trình duyệt của bạn. Các mô hình phát hiện khuôn mặt và embedding khuôn mặt (ResNet kiểu FaceNet qua @vladmandic/face-api trên TensorFlow.js) được tải xuống một lần và sau đó mỗi lần so sánh được tính cục bộ bằng WebGL, WebAssembly hoặc CPU thuần. Ảnh khuôn mặt của bạn không bao giờ rời thiết bị — không tải lên, không xử lý phía máy chủ, không lưu mẫu sinh trắc ở đâu khác ngoài trình duyệt. Điều này rất quan trọng vì theo GDPR và BIPA của Illinois, embedding khuôn mặt được tính là định danh sinh trắc nhạy cảm, và nhiều chính sách bảo mật doanh nghiệp cấm rõ ràng việc tải chúng lên API bên thứ ba.

Định dạng và điều kiện ảnh nào cho kết quả so sánh tốt nhất?

Định dạng được chấp nhận: JPEG, PNG, WebP, AVIF, GIF (khung đầu), BMP và HEIC trên trình duyệt hỗ trợ. Để so sánh chính xác, cả hai khuôn mặt nên: tối thiểu 160x160 pixel trong vùng khuôn mặt đã cắt, chính diện hoặc gần chính diện (xoay trong ±30°), được chiếu sáng đều không có bóng gắt, sắc nét và không bị che bởi lóe kính, khẩu trang hay tóc rậm. Ảnh nghiêng, ánh sáng cực đoan, mờ chuyển động và khuôn mặt nhỏ hơn 80 pixel làm giảm chất lượng embedding. Nếu có nhiều khuôn mặt trong ảnh, công cụ dùng khuôn mặt lớn nhất được phát hiện — với ảnh nhiều người, hãy cắt thủ công trước.

Tỷ lệ phần trăm tương đồng thực sự đại diện cho điều gì?

Đó là phép ánh xạ thân thiện của khoảng cách Euclid (L2) giữa hai embedding khuôn mặt 128 chiều do mạng kiểu FaceNet tạo ra. Mỗi khuôn mặt được mã hóa thành một vector trong không gian 128D; khoảng cách L2 được ánh xạ thành điểm tương đồng 0-100% theo một đường cong có mốc (0,0 → 100%, 0,4 → ~70%, 0,6 → ~50%, 1,0 → 0%). Từ ~70% trở lên (khoảng cách ≤ 0,4) thường nghĩa là "cùng một người" với độ tin cậy cao trên ảnh chất lượng tốt; ~50-70% (khoảng cách 0,4-0,6) là vùng có-khả-năng-cùng-người / ranh giới, bị ảnh hưởng bởi ánh sáng, tuổi tác hay biểu cảm; dưới ~50% (khoảng cách > 0,6) nghiêng về "người khác". Phần trăm không phải là xác suất theo nghĩa đen. Với mục đích pháp lý hay bảo mật, hãy mở bảng Chi tiết kỹ thuật và dùng khoảng cách L2 thô (khoảng cách cosine cũng hiển thị) với ngưỡng bạn đã kiểm chứng trên tập dữ liệu của mình.

Vì sao mô hình đôi khi nói ảnh cũ và mới của chính tôi không phải cùng một người?

Embedding khuôn mặt rất nhạy với thay đổi tuổi (>5 năm có thể giảm tương đồng 10-20%), râu, kính, thay đổi cân nặng, kiểu tóc, trang điểm và nhiệt độ màu ánh sáng. Mô hình FaceNet huấn luyện trên ảnh web đã học phân biệt hàng trăm ngàn danh tính trong điều kiện điển hình; thay đổi nằm ngoài phân phối nhiều sẽ giảm điểm ngay cả với cùng một người. Sinh đôi và người thân gần cũng có thể đánh lừa nó (tương đồng cao nhưng kỹ thuật là người khác). Với so sánh kiểu phả hệ qua nhiều thập kỷ, hãy mong đợi điểm 50-70% giữa các cặp khớp thật; với ứng dụng an ninh hoặc mở khóa thường bạn muốn yêu cầu ≥75% với cả hai ảnh chụp trong điều kiện tương tự.

Công cụ dùng backend tính toán nào, và vì sao WebGL nhanh nhất ở đây?

Bước phát hiện khuôn mặt (TinyFaceDetector / SSD-MobileNet) và bước embedding 128D (ResNet) đều là mạng nhiều phép tích chập, hưởng lợi từ tính song song của GPU. Khi khởi động, công cụ khởi tạo backend khả dụng đầu tiên theo thứ tự WebGL → WebAssembly → CPU và ghi backend đang dùng vào console của trình duyệt. WebGL được tăng tốc bằng GPU và là đường nhanh trên hầu hết máy (một chu trình phát hiện-căn chỉnh-mã hóa-so sánh đầy đủ khoảng 100-300 ms mỗi cặp); WebAssembly là phương án dự phòng trên CPU khi WebGL bị chặn hoặc không có, còn CPU thuần là phương án cuối. Bản dựng này không dùng WebGPU — gói TensorFlow.js của face-api ở đây chỉ có kernel WebGL và WASM, nên WebGL là lựa chọn GPU.

Công cụ có thể bị lừa bởi ảnh in, ảnh chụp màn hình hay deepfake không?

Công cụ này là máy đo tương đồng nhận diện khuôn mặt, không phải máy phát hiện tấn công trình chiếu. Nó sẽ vui vẻ so sánh ảnh chụp một bức ảnh in của bạn với ảnh thật của bạn, và embedding sẽ khớp. Nó không kiểm tra tính sống, độ sâu, phản xạ màn hình hay artifact do AI tạo. Với xác minh thanh toán, chứng thực danh tính hoặc ứng dụng mở khóa, bạn cần một lớp phát hiện sống riêng (thử thách chủ động như chớp mắt hay xoay đầu, hoặc phân tích độ sâu thụ động từ camera true-depth) chồng lên kiểm tra tương đồng. Phát hiện sống chỉ bằng trình duyệt là khả thi (MediaPipe Face Landmarker có thể phát hiện thay đổi tư thế đầu) nhưng không thuộc công cụ này. Với dùng thông thường hoặc phả hệ, không có cũng không sao.

Kiến trúc neural nào đang làm phần nặng — FaceNet, ArcFace hay DeepFace?

Pipeline mặc định dùng face-api.js / @vladmandic/face-api, kết hợp bộ phát hiện khuôn mặt SSD-MobileNet v1, bộ hồi quy 68 điểm mốc (để căn chỉnh), và mạng embedding ResNet-34 kiểu FaceNet xuất ra mô tả 128 chiều được huấn luyện bằng triplet loss. ArcFace (2019) và CosFace (2018) là kiến trúc mới hơn dùng hàm mất mát margin góc và embedding 512 chiều đạt độ chính xác cao hơn trên LFW (99.83% so với 99.65% của FaceNet) nhưng cần mô hình lớn hơn và căn chỉnh hơi khác. Chúng có sẵn như tùy chọn nâng cao nếu bạn cần độ chính xác tối tân. Với so sánh hàng ngày, pipeline FaceNet mặc định nhanh, đã được kiểm thử kỹ và đủ tốt.

Khác biệt giữa FP32 và INT8 cho embedding khuôn mặt là gì, có ảnh hưởng độ chính xác không?

FP32 lưu mỗi trọng số mạng dưới dạng số thực 32 bit; INT8 lưu dưới dạng số nguyên 8 bit, giảm mô hình 4 lần và tăng tốc suy luận CPU 2-3 lần. Với embedding khuôn mặt, INT8 thường giảm độ chính xác LFW 0.1-0.3% — vô hình với con người so sánh điểm nhưng đo được trên benchmark 6000 ảnh. Quan trọng hơn, embedding INT8 hơi nhiễu hơn, có thể đẩy các cặp ranh giới (quanh 70% tương đồng) sang nhóm sai. Công cụ mặc định FP32 cho mạng embedding vì dữ liệu khuôn mặt xứng đáng độ chính xác; mạng phát hiện và điểm mốc dùng INT8 vì đầu ra (hộp bao, 68 điểm) bền với nhiễu lượng tử.