Thử thách đưa mũi#

Giả sử có một người đang đứng trước camera và bạn muốn xác thực xem đó có phải là người thật hay chỉ là một bức ảnh.

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; vị trí, kích thước khung chóp mũi, tỉ lệ gương mặt.

  • 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, bắt đầu chụp và gửi ảnh lên server, đồng thời chỉ dẫn họ đưa chóp mũi đến đúng vị trí.

  • 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.

liveness-process

Ref: liveness-detection-aws

B1. Bắt đầu kiểm tra#

Gọi đến API POST /liveness-challenge/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.

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.

  • nose_top, nose_left, nose_width, nose_height: Vị trí khung người kiểm tra sẽ đưa chóp mũi của mình vào.

  • 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.

Ví dụ:

CLI:

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

Response:

{
    "area_height": 480,
    "area_left": 106,
    "area_top": 0,
    "area_width": 426,
    "duration": 60,
    "external_person_id": "1",
    "face_moving_check": true,
    "face_rotation_check": true,
    "framerate": 6,
    "frames": [],
    "id": "812ee659-1542-407b-af15-12b15a44ad56",
    "image_height": 480,
    "image_width": 640,
    "message": "Success",
    "min_face_area_percent": 50,
    "nose_height": 59,
    "nose_left": 219,
    "nose_motion_check": true,
    "nose_top": 271,
    "nose_width": 59,
    "result_code": 200
}

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 đến lúc chóp mũi của họ nằm trong khung được yêu cầu.

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

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

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 201.

CLI:

jo -d. content=%anh_chup.jpg | http -a $MY_AUTH POST https://api-uat.unicloud.ai/ekyc/liveness-challenge/812ee659-1542-407b-af15-12b15a44ad56/frames

Response

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

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

Sau khi người được kiểm tra đã đưa chóp mũi của mình đến đúng vị trí, không cần gửi thêm ảnh nữa. Tại đây sẽ có thêm bước nhận diện ảnh không chân thật thụ động với số lượng frame được chỉ định, nếu trung bình kết quả kiểm tra ảnh chân thật thấp hơn ngưỡng được chọn thì người đó không được xem là người thật. Ta bắt đầu gọi đến API POST /liveness-challenge/{challenge_id}/verify kèm thông tin tự chọn

  • passive_liveness_frame_percentage: Số lượng frame sẽ được kiểm tra thụ động. Tương ứng với 50% = 0.5.

  • passive_liveness_threshold: [Optional] Ngưỡng tự tin hệ thống cần đạt được khi nhận diện được ảnh người thật, mặc định 0.5 (tương ứng với 50%).

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.unicloud.ai/ekyc/liveness-challenge/812ee659-1542-407b-af15-12b15a44ad56/verify

Response

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
}