顔画像の要件
ライブネスと顔検索の呼び出しは、送信する画像の品質以上の結果にはなりません。本ページでは、キャプチャのルール、Verifik が適用するスコアしきい値、返却され得る拒否理由をまとめています。本番投入前にキャプチャ UI を調整する際にご活用ください。
対象はライブネスの各エンドポイント(/liveness、/liveness-score)、顔検索の各エンドポイント(/search、/search-live-face、/search-active-user、/search-crops)、および顔照合の各エンドポイント(/compare、/compare-live、/compare-with-liveness)です。SmartEnroll も内部で同じルールを適用するため、本ガイダンスはオンボーディングの完了率向上にもつながります。
これらのエンドポイントの詳細ドキュメントは英語で提供しています: Liveness Detection、Face Search (1:N)。
ライブネス画像の要件
ライブネスは単純な顔照合よりも要件が厳格です。高解像度の印刷物、マスク、動画の再生によるなりすましを防ぐため、送信するフレームは以下のすべてを満たす必要があります。
- 画像内の主要な顔は 1 つのみである必要があります。フレーム内に完全に収まり、遮蔽物なく完全に露出している必要があります。トリミングは許可されません。背景の小さな顔は考慮されません。
- 処理可能な顔ボックスの最小サイズは 224x224 ピクセルです。
- 顔ボックスと画像の境界との余白は最低 25 ピクセル必要です。
- 両瞳孔間の距離は最低 80 ピクセル必要です。
- 面外回転角(顔のピッチおよびヨー)は ±30 度を超えてはなりません。
- 魚眼レンズおよびサングラス着用の画像はサポートされません。
これらのルールのいずれかに違反したフレームは、スコアが算出される前に品質上の理由で拒否されます。これは低スコアとは別の結果であり、UI 上で区別して扱う価値があります。品質の問題はユーザーが撮り直すことで解決できますが、低スコアはフレーム自体は使用可能だったものの実在の人物として認識されなかったことを意味します。
提示攻撃検知
Verifik の顔ライブネスは提示攻撃検知(PAD)を用いており、iBeta Level 2 認証を取得し、ISO 30107-3 に準拠しています。基盤エンジンは、印刷写真、画面および動画の再生、3D マスクを含む iBeta Level 2 の攻撃セットに対して、提示攻撃分類誤り率(APCER)0% を報告しています。
しきい値
Verifik は認識エンジンの上に独自のしきい値を適用します。したがって、実際にリクエストを規定するのは以下の値です。
ライブネス
| 挙動 | 値 |
|---|---|
| パラメータ | liveness_min_score |
| 既定値 | 0.6 |
| 許容範囲 | 0.5 – 1.0 |
| 合格条件 | liveness_score > liveness_min_score(以上ではなく、より大きい) |
| SmartEnroll の既定値 | 0.65(プロジェクトフローごとに設定可能) |
合格条件が厳密な比較であることにご注意ください。しきい値 0.6 に対してスコアがちょうど 0.6 の場合は、合格ではなく不合格です。
基盤エンジンは >= 0.5 を実在と判定します。Verifik の既定値 0.6 は意図的により厳格であり、下限 0.5 によってエンジン自体より緩いしきい値は設定できません。例外として /compare-live はこの下限を 0.52 に引き上げます。
顔検索
| パラメータ | 必須 | 既定値 | 範囲 |
|---|---|---|---|
min_score | はい | なし — 必ず送信してください | /search では 0.2 – 1.0、ライブ顔系のバリアントでは 0.5 – 1.0 |
search_mode | はい | なし — 必ず送信してください | FAST または ACCURATE |
max_results | いいえ | 10 | 最大 100 |
結果は類似度スコアの降順で返却され、min_score を上回るエントリのみが含まれます。スコアは 0 から 1 の数値で、1 が完全一致、0 が完全不一致を表します。
見落としやすい Verifik 固有の点が 2 つあります。1 つ目は、min_score に既定値がないことです。省略するとリクエストは 409 MissingParameter で失敗しますが、基盤エンジンであれば 0.81 が適用されていました。2 つ目は、search_mode が必須でエンジンには対応する項目がないことです。レイテンシを許容して精度を高めるなら ACCURATE、応答性を重視するなら FAST を使用してください。
拒否理由
キャプチャが品質上の理由で拒否された場合、レスポンスには安定した理由コードが含まれます。各コードは上記の特定の要件に対応しているため、汎用的な失敗メッセージではなく、的を絞った改善方法をユーザーに提示できます。
| 理由 | 違反した要件 | ユーザーへの案内 |
|---|---|---|
no_face_detected | 完全に見える顔が 1 つ | 明るい場所で顔をフレーム内に収めてください |
multiple_faces_detected | 主要な顔は 1 つのみ | フレーム内にご本人だけが写るようにしてください |
face_occluded | 遮蔽物のない露出した顔 | マスク、眼鏡、帽子など顔を覆うものを外してください |
face_close_to_border | 境界から 25 ピクセルの余白 | 少し後ろに下がり、顔をフレームの中央に合わせてください |
face_not_centered | 境界から 25 ピクセルの余白 | 顔をフレームの中央に合わせてください |
face_too_far | 224x224 の顔ボックス、瞳孔間 80 ピクセル | 顔がフレームをより占めるようカメラを近づけてください |
face_too_close | トリミングなし、境界から 25 ピクセルの余白 | カメラを少し離してください |
face_rotation_too_large | ピッチおよびヨー ±30 度 | カメラを正面から見て、頭をまっすぐに保ってください |
poor_lighting | 完全に見える顔 | より明るい場所に移動し、背後からの強い光を避けてください |
キャプチャの問題ではない理由がさらに 2 つあります。
liveness_failed— フレームは使用可能でスコアも算出されましたが、しきい値に達しませんでした。スコアはレスポンスに含まれるため、表示に利用できます。liveness_error— キャプチャに起因しない理由でチェックを完了できませんでした。再試行可能なケースとして扱ってください。
データの取り扱い
ライブネスおよび検索の呼び出しは一度限りの分類です。顔をコレクションに登録しません。そのため /liveness や /search にのみ送信した顔が、後の検索結果に現れることはありません。顔を検索可能にするには、/person エンドポイントで明示的に登録してください。
一方 Verifik は、すべての呼び出しについて監査記録(スコア、結果、適用したしきい値、リクエストのメタデータ)を保持し、事後にも結果を検証し課金できるようにしています。送信された画像そのものを保持するかは製品によって異なります。SmartEnroll 経由でキャプチャされた画像はオンボーディング記録の一部として保存されますが、公開ライブネスおよび検索エンドポイントに直接送信された画像は、リクエスト処理後に保持されません。
補足
- UI では品質による拒否とスコアによる拒否を分けることをおすすめします。品質による拒否は具体的な案内とともに即座の再試行を促すべきであり、スコアによる拒否は真の否定結果です。
- 要件は画像ではなく顔ボックスのピクセル数で規定されています。4K の写真でも顔の幅が 100 ピクセルであれば
224x224のルールを満たしません。 - 顔ボックスが最小基準を超えた後は、より大きな画像を送っても結果は改善しません。単純な解像度よりも、良好な照明と中央に位置する正面の姿勢を優先してください。
- ユーザーがデスクトップの Web カメラを使用している場合、モバイルより品質による拒否が多くなります。低解像度の Web カメラは最小基準を下回る顔ボックスを頻繁に生成します。