Roam Moon Cloud

Dịch vụ AI

Cách tích hợp so sánh khuôn mặt

Gửi hai ảnh khuôn mặt và nhận về kết quả có phải cùng một người không, kèm điểm số độ khớp.

Request

Gửi multipart/form-data với cả hai ảnh:

TrườngÝ nghĩa
sourceImagesourceImage là bắt buộc. JPEG hoặc PNG, tối đa 5 MB. Khuôn mặt dùng làm tham chiếu.
targetImagetargetImage là bắt buộc. JPEG hoặc PNG, tối đa 5 MB. Được so sánh với mọi khuôn mặt tìm thấy trong ảnh này.

Ví dụ

curl -X POST https://core.roammoon.com/v1/ai/face-comparison/compare \
  -H "X-API-Key: rm_live_YOUR_KEY" \
  -F "sourceImage=@id-card.jpg" \
  -F "targetImage=@selfie.jpg"

Response

Trả về hai khuôn mặt có phải cùng một người không:

JSON
{
  "isSamePerson": true,
  "similarity": 97.52
}
Khi không tìm thấy khớp

similarity là null chứ không phải 0, vì không có gì để tính điểm, dù là do ảnh đích không có khuôn mặt khớp hay hoàn toàn không có khuôn mặt nào. isSamePerson đều là false trong cả hai trường hợp.

JSON
{
  "isSamePerson": false,
  "similarity": null
}

Các trường quan trọng

TrườngÝ nghĩa
isSamePersontrue khi có ít nhất một khuôn mặt trong targetImage khớp với sourceImage.
similarityĐiểm khớp cao nhất tìm được, 0–100. null khi isSamePerson là false.

Tính phí

Chỉ khi so sánh thành công và trả về kết quả thì mới bị trừ 10 credit. Mọi trường hợp thất bại đều được hoàn lại, dù là ảnh bị từ chối hay chính dịch vụ không xử lý được.

Chính sách tính phí là charge-on-success: credit được giữ chỗ khi tiếp nhận request và chỉ thực sự trừ khi xử lý thành công. Thất bại thì hoàn lại.

Mẹo đạt độ chính xác cao

  • Ảnh đủ sáng, chụp thẳng mặt, khuôn mặt chiếm phần đáng kể khung hình. Góc chụp quá lệch hoặc bóng đổ nặng là nguyên nhân phổ biến nhất khiến không khớp được.
  • sourceImage nên chỉ chứa đúng khuôn mặt cần kiểm tra, vì nếu có nhiều khuôn mặt, hệ thống chỉ dùng khuôn mặt lớn nhất.
  • Đây là so sánh xác suất, không phải xác thực danh tính. Hãy coi kết quả độ tin cậy thấp là chưa kết luận được chứ không phải chắc chắn không khớp, và luôn có con người xem xét lại với những quyết định ảnh hưởng đến quyền lợi hay quyền truy cập của một người.

Lỗi

Mọi lỗi đều dùng chung một cấu trúc. Hãy xử lý theo trường code, không phải theo message, vì message có thể thay đổi.

JSON
{
  "error": {
    "code": "NO_FACE_DETECTED",
    "message": "No face was detected in one of the images."
  }
}
HTTPMã lỗiNên làm gì
401API_KEY_REQUIREDThiếu header X-API-Key.
401API_KEY_INVALIDKey sai, đã bị vô hiệu hóa hoặc hết hạn. Kiểm tra lại hoặc tạo key mới.
403API_KEY_FORBIDDENKey không có quyền dùng dịch vụ này.
400INVALID_FACE_COMPARISON_REQUESTTrường sourceImage hoặc targetImage bị thiếu hoặc rỗng. Không bị trừ credit.
400NO_FACE_DETECTEDKhông tìm thấy khuôn mặt nào trong một trong hai ảnh. Không bị trừ credit.
402CREDIT_LIMIT_EXCEEDEDHết credit trong chu kỳ. Nâng gói hoặc chờ sang chu kỳ mới.
413IMAGE_TOO_LARGEẢnh vượt quá 5 MB. Hãy nén hoặc thu nhỏ ảnh.
415UNSUPPORTED_IMAGE_TYPEChỉ hỗ trợ JPEG và PNG.
429RATE_LIMIT_EXCEEDEDVượt giới hạn request mỗi phút.
429FACE_COMPARISON_SERVICE_BUSYDịch vụ so sánh đang quá tải. Thử lại sau vài giây.
502FACE_COMPARISON_UPSTREAM_ERRORMô hình so sánh khuôn mặt không xử lý được request. Có thể thử lại.
503FACE_COMPARISON_SERVICE_MISCONFIGUREDDịch vụ chưa được cấu hình đúng. Đây là lỗi phía vận hành, thử lại cũng không giải quyết được.

Thử lại an toàn

429 và 502 có thể thử lại, dùng exponential backoff. Các lỗi khác trả về cùng kết quả khi thử lại. Chỉ lần so sánh thành công mới bị trừ phí, nên thử lại sau khi thất bại không tốn thêm gì. Ngoại lệ là timeout mạng: nếu lần gọi đầu thực ra đã thành công, lần thử lại sẽ tính phí như một lệnh gọi thứ hai.