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.
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áctask_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ếuexercise=custom,staticsẽ 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ườngtask_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: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-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,
}