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.
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:TruehoặcFalsetươ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
}