Thử thách góc mặt#

Quá trình kiểm tra gồm các bước:

  • Dưới client sẽ nếu phát hiện có người trước Camera sẽ gọi đến server bắt đầu quá trình kiểm tra.

  • Từ server sẽ trả về các thông tin gồm: vị trí, kích thước của khung của gương mặt; tỉ lệ gương mặt; thông tin chuỗi các nhiệm vụ người dùng phải làm theo để xác thực.

  • Sau khi nhận các thông tin, dưới client sẽ cần hiển thị ra để họ làm theo các chỉ dẫn.

  • Khi người cần kiểm tra đã đưa mặt vào giữa khung, hiển thị chỉ dẫn và bắt đầu gửi ảnh lên server khi phát hiện góc nghiêng mặt đúng.

  • Sau khi người cần kiểm tra đã đưa mũi đến thì kết thúc quá trình và bắt đầu gởi lệnh verify để server bắt đầu kiểm tra.

profile-liveness-process

B1. Khởi tạo chuỗi lệnh#

Gọi đến API POST /profile-liveness-challenge/profile-start, kèm theo thông tin

  • external_person_id: ID của người (nhân viên/ khách hàng) trong hệ thống của bạn, đã đăng ký trước đó.

  • image_width, image_height: Kích thước của hình ảnh sẽ được gửi lên để kiểm tra.

  • exercise: Lựa chọn loại bài kiểm tra:

    • yaw: Mặc định là bài kiểm tra xoay mặt trái phải.

    • pitch: Bài kiểm tra đưa mặt lên xuống.

    • smile: Bài kiểm tra cười.

    • wink: Bài kiểm tra nháy mắt.

    • exercise1-exercise2: Kết hợp các bài kiểm tra, truyền vào chuỗi các exercise nối nhau bằng dấu '-', không quan trọng thứ tự. Ví dụ: 'smile-pitch', 'pitch-yaw-smile-wink'.

    • custom: Các task_order đuọc khởi tạo = 0 để người dùng có thể truyền vào số task và frame tùy ý.

  • static: True sẽ cố định task_order của các exercise bằng 1, mặc định bằng False, tạo ngẫu nhiên số lượng ảnh cần truyền vào cho mỗi bài kiểm tra. (nếu exercise = custom, static sẽ không có tác dụng)

Response trả về sẽ gồm các thông tin:

  • id: ID của bài kiểm tra này.

  • area_top, area_left, area_width, area_height: Vị trí khung người kiểm tra sẽ để mặt vào giữa.

  • min_face_area_percent: Tỉ lệ khuôn mặt tối thiểu trong khung. Lưu ý: tỉ lệ này luôn cần đảm bảo trong suốt quá trình, nếu không sẽ dễ rớt kiểm tra.

  • exercise: Danh sách các bài kiểm tra.

  • task_order: Chuỗi các lệnh cần người dùng thực hiện theo liên tục trong một khoảng thời gian yêu cầu.

    • keep-face-ahead: Giữ mặt thẳng.

    • turn-face-left: Xoay mặt qua trái.

    • turn-face-right: Xoay mặt qua phải.

    • tilt-face-up: Ngước mặt lên.

    • tilt-face-down: Cúi mặt xuống.

    • smile: Cười.

    • wink: Nháy mắt.

  • message: Thông báo kết quả khởi tạo challenge.

  • result_code: Mã kết quả.

CLI:

http -a $MY_AUTH POST https://api-uat.unicloud.ai/ekyc/profile-liveness-challenge/profile-start \
  image_width:=640 image_height:=640 external_person_id=18

Response

{
    "area_height": 480,
    "area_left": 140,
    "area_top": 80,
    "area_width": 360,
    "exercise": [
        "yaw"
    ],
    "external_person_id": "18",
    "id": "adb0598b-32ed-483a-809a-ddd926d99edf",
    "image_height": 640,
    "image_width": 640,
    "message": "Success",
    "min_face_area_percent": 50,
    "result_code": 200,
    "task_order": {
        "keep-face-ahead": 2,
        "turn-face-left": 4,
        "turn-face-right": 4
    }
}

B2. Thu thập hình ảnh#

Gửi những bức hình từ lúc người được kiểm tra đưa mặt vào giữa khung và quay đúng góc như yêu cầu cho đến khi đủ thời lượng.

Gọi đến API PUT /profile-liveness-challenge/{challenge_id}/frames với challenge_id được trả về ở B1, kèm theo thông tin

  • timestamp: thời gian lưu trữ bức ảnh.

  • photo: Nội dung hình ảnh được chụp được mã hóa theo Base64.

  • task: Mô tả yều cầu cần người dùng thực hiện được yêu cầu trong trường task_order.

Nếu dữ liệu gửi lên hợp lệ, hình ảnh được chấp nhận thì response sẽ có mã trạng thái 200.

CLI:

jo -d. photo=%anh_chup.jpg timestamp=12345 task='keep-face-ahead' | http -a $MY_AUTH PUT https://api-uat.unicloud.ai/ekyc/profile-liveness-challenge/adb0598b-32ed-483a-809a-ddd926d99edf/frames

Response

{
    "message": "Success",
    "result_code": 200
}

B3. Bắt đầu xác thực#

Sau khi clinet đã gửi được các chuỗi ảnh cần theo từng nhiệm vụ, gọi đến API để xác thực POST /profile-liveness-challenge/{challenge_id}/verify

Response trả về gồm:

  • success: True hoặc False tương ứng với thành công hoặc không.

  • message: Thông tin lỗi nếu có.

CLI:

http -a $MY_AUTH POST https://api-uat.unicloud.ai/ekyc/profile-liveness-challenge/adb0598b-32ed-483a-809a-ddd926d99edf/verify

Response

Trả về gồm:

  • result_code: Mã kết quả.

  • message: Thông tin kết quả trả về.

Result code

Message

Note

200

Success

Challenge thực hiện thành công

131

No Face Detected

Không tìm thấy khuôn mặt trong hình

133

Brightness Not Reach Requirements

Ảnh quá sáng hoặc quá tối

142

Face Occlusion Detected

Khuôn mặt bị che (bởi tóc, tay, nón, kính, ...)

135

Found More Than One Face

Quá nhiều khuôn mặt trong khung hình

140

Task Order Not Found

Không tìm thấy task order

143

Request Challenge ID Not Found

Challenge ID không tồn tại

144

Moving Photo Is Missing

Challenge chưa có ảnh để xác thực

150

Right Face Angle Not Correct

Khuôn mặt góc phải không chính xác

151

Left Face Angle Not Correct

Khuôn mặt góc trái không chính xác

180

Up Face Angle Not Correct

Khuôn mặt ngước trên không chính xác

181

Down Face Angle Not Correct

Khuôn mặt cúi dưới không chính xác

152

Ahead Face Angle Not Correct

Khuôn mặt góc thẳng không chính xác

153

Trajectory Too Slow

Challenge thực hiện quá lâu

154

Illegal Duration

Số frame truyền vào khác số task yêu cầu.

Trường hợp thành công

{
    "message": "Success",
    "result_code": 200,
}

Trường hợp thất bại

{
    "message": "moving-photo-missing",
    "result_code": 144,
}