画像入力ガイドライン
なりすまし判定の精度を最大限に引き出すための、入力画像の推奨条件をまとめています。条件を満たさない画像は、判定精度が低下したり、顔が検出できず 400 invalid_image が返ることがあります。
対応フォーマット
| 項目 | 要件 |
|---|---|
| ファイル形式 | JPEG / PNG |
| サイズ上限 | 10MB |
| 画像種別 | 可視光カメラで撮影したカラー画像。赤外線(IR)センサ画像には対応していません。 |
.jpgファイルもご利用いただけます。.jpgと.jpegは同じ JPEG 形式なので、リクエストのimage_formatには拡張子にかかわらず"jpeg"を指定してください(image_formatに指定できる値は"jpeg"または"png"の2つです)。
⚠️ 顔だけを切り抜いた画像は送らないでください
顔矩形領域だけをくりぬいた画像(顔のクロップ画像)を送っても、なりすまし判定は正しく行えません。 顔の周辺を含む、撮影したままのフレーム全体を送信してください。
なりすまし判定は、顔そのものだけでなく 顔の周囲に残る「写真や機器などの痕跡」 を手掛かりにしています。
- スマートフォンやタブレットの ベゼル(枠)
- ディスプレイの 映り込み・モアレ・輝度ムラ
- 印刷物の 縁・紙の質感・持っている手
- 背景との 奥行きの不自然さ
顔だけを切り抜くと、これらの手掛かりがすべて失われます。
さらに、顔矩形だけをくりぬいた画像は、画像全体に占める顔の面積が大きすぎるため、そもそも判定対象外になります。本 API は顔の面積比が一定の上限(画像全体の約65%)を超えると、なりすましか否かの判定を行わず 400 invalid_image エラー(メッセージ例: Face position error(1005) - Too close)を返します。したがって、顔に近づけて撮影したり顔だけを切り抜いたりしても、判定を通り抜けられるわけではありません(詳しくは「④ 顔がフレームいっぱいに接近している」)。
顔検出だけを別システムで行っている場合もご注意ください。 前段の顔検出結果でクロップしてから本 API に渡す構成にすると、判定材料が失われます。顔検出は本 API 側で行いますので、クロップせずフレーム全体をお送りください(検出された顔の座標はレスポンスの
faceRectAreaで返ります)。
画像・顔のサイズ
| 項目 | 推奨 |
|---|---|
| フレームサイズ | VGA(640×480)以上 |
| 顔の横幅 | 最低 80px 以上 |
検出される顔領域の横幅が 80px 以上になるように撮影してください。顔が小さく写っていると検出できないことがあります。フレームサイズを上げれば、より遠くからの撮影でも顔領域のサイズを確保できます。
明るさ
- 顔領域の 平均輝度値 50.0 以上(8bit・256階調)を推奨します。
- 逆光や暗所を避け、顔全体に均等に光が当たる環境で撮影してください。
顔の向き(検出可能な画角)
- 正面を基準に、上下・左右それぞれ ±30° 程度以内を推奨します。
- 顔の形状などにより個人差があります。
- 横顔、大きく傾いた顔、極端なうつむき・見上げは検出できないことがあります。
撮影距離
- カメラから顔までの距離は 30cm〜1m 程度を推奨します。
- 入力画像の解像度を上げれば、より遠くからの撮影にも対応できます(顔の横幅 80px 以上を維持してください)。
カメラで直接撮影する場合の推奨スペック(参考)
エンドユーザーがカメラで撮影してから判定する構成の場合、カメラ側は以下を推奨します。
| 項目 | 推奨 |
|---|---|
| カメラ解像度 | VGA(640×480)以上(720p / 1080p なども可) |
| 撮影距離 | 30cm〜1m 程度 |
| 視野角 | 50°〜110° 程度 |
| レンズ | 固定焦点レンズ推奨 |
解像度と処理速度のトレードオフ: 解像度が高いほど遠くからでも顔を確保でき、判定精度の面では有利です。一方で、解像度が高いほど1リクエストあたりの画像サイズが大きくなり、送信・処理にかかる時間は長くなります。顔の横幅 80px 以上を満たす範囲で、用途に応じた解像度をお選びください。過度に高い解像度は、精度向上に寄与しないまま処理時間だけを増やす場合があります。
入力画像・出力画像のサンプル
実際に判定できる画像の例です。
出力画像について: 本 API が返すのは JSON のみで、画像は返しません。下図右側は、レスポンスの
faceRectArea(顔矩形の座標)とisFakeFaceをお客様側で入力画像に描画した例です。
リアル顔(isFakeFace: false)
カメラの前に実在の人物がいる状態です。
※ この画像は生成 AI(Google Gemini)で生成したものです。
※ この画像は生成 AI(Google Gemini)で生成したものです。
フェイク顔(isFakeFace: true)
スマートフォンに表示した顔写真をカメラで撮影した、典型的ななりすまし(提示型攻撃)です。ベゼル・手・背景が写ったフレーム全体を送っている点にご注目ください。
※ スマートフォンに表示している顔写真は、生成 AI(Google Gemini)で生成したものです。
※ スマートフォンに表示している顔写真は、生成 AI(Google Gemini)で生成したものです。
精度について
なりすまし判定の結果は、実際の顔(リアル顔/フェイク顔) と 判定結果(isFakeFace) の組み合わせで4通りに分かれます。
| 種別 | 定義 | 評価 |
|---|---|---|
| 真陽性 | フェイク顔を isFakeFace: true と判定 |
✅ 正しい |
| 真陰性 | リアル顔を isFakeFace: false と判定 |
✅ 正しい |
| 偽陽性 | リアル顔なのに isFakeFace: true(本人を弾いてしまう) |
❌ 誤り |
| 偽陰性 | フェイク顔なのに isFakeFace: false(なりすましを通してしまう) |
❌ 誤り |
学習モデルの性質上、特定の画像タイプで偽陽性・偽陰性が出る場合があります。
| 誤りの種類 | 起きやすいケース |
|---|---|
| 偽陽性(本人を弾く) | ②画像全体または顔周辺が暗い / ③背景にベゼル(枠)状のものが写っている |
| 偽陰性(なりすましを通す) | ②画像全体または顔周辺が暗い |
このほか、次の2つは安全のため判定を行わず、400 invalid_image エラー(メッセージに Face position error を含む)を返します(誤判定ではなく、意図的なガードです)。
- ①顔がフレームの上下左右端にある … 顔が見切れると形状が不自然になるため判定を打ち切ります。
- ④顔がフレームいっぱいに接近している … 顔面積が大きすぎると、なりすましの手掛かりが失われるため判定を打ち切ります。
各①〜④のケースでの具体的な回避方法は、次の「精度エラーが出やすいケーススタディ」をご覧ください。
なお isFakeFace は、isFakeLikelihood(0.0〜1.0)が既定しきい値 0.15 を上回った場合に true となる参考判定です。用途に応じて、お客様側で isFakeLikelihood を独自のしきい値で評価することもできます(API リファレンス)。
精度エラーが出やすいケーススタディ
① 顔がフレームの上下左右端にある
顔がフレームの端に位置すると顔の形状が不自然になります。本 API では顔がフレームの端で見切れている場合、なりすまし判定を行わず 400 invalid_image エラー(メッセージ例: Face position error(1011) - move to the center)を返します(端見切れガードが有効になっています)。判定結果を得るには、顔をフレーム中央付近で撮影する必要があります。
✅ 対策: 撮影アプリ側で顔を中央に誘導するガイド枠を表示し、顔が中央に収まったことを確認してから判定リクエストを送ってください。
この端見切れガードはサーバー側で有効化されており、リクエストパラメータで無効化することはできません。
move to the centerを含む400 invalid_imageが返った場合は、顔を中央に寄せて撮り直してください。
② 画像全体または顔周辺が暗い
暗い画像では、偽陽性・偽陰性の両方が出る場合があります。
なお、明るい場所で撮影していても、カメラの性能によっては顔が暗く写る(暗がりに投影される)ことがあります。周囲が暗所かどうかだけでなく、実際に取得された画像の明るさをご確認ください(顔領域の明るさはレスポンスの faceBrightness で確認できます)。
✅ 対策: 送信前に、お客様側でコントラスト補正を行ってください。光量補正機能付きのカメラを選定していただいても構いません。
OpenCV を使う場合は cv::convertScaleAbs()(例: alpha=1.5 / beta=20)で補正できます。
import cv2
img = cv2.imread("face.jpg")
corrected = cv2.convertScaleAbs(img, alpha=1.5, beta=20)
cv2.imwrite("face_corrected.jpg", corrected)
補正の目安は、顔領域の平均輝度が 50.0 以上(レスポンスの faceBrightness で確認できます)です。
③ 背景にベゼル(枠)状のものが写っている
窓枠・サッシ・ディスプレイの縁など、ベゼルに似た直線的な枠が背景に写り込んでいると、偽陽性(本人を弾く)が増えます。
✅ 対策: 撮影する場所(背景)を変更してください。無地の壁など、枠状のものが写り込まない背景を推奨します。
④ 顔がフレームいっぱいに接近している
スマートフォンやタブレットのベゼルが隠れるほど顔を近づけて撮影すると、なりすましの手掛かりが失われます。本 API では画像全体に占める顔の面積が上限(約65%)を超えると、なりすまし判定を行わず 400 invalid_image エラー(メッセージ例: Face position error(1005) - Too close)を返します。したがって、顔に近づけて撮影しても判定を通り抜けることはできません。
✅ 対策: 「撮影距離」に記載のとおり、カメラから顔まで 30cm〜1m 程度の距離を確保し、顔がフレームの大半を占めないように撮影してください。
この顔面積の上限はサーバー側で有効化されており、リクエストパラメータで変更することはできません。
Too closeを含む400 invalid_imageが返った場合は、カメラから少し離れて撮り直してください。
チェックリスト
判定リクエストを送る前に、入力画像が以下を満たしているか確認してください。
エラーが続く場合は FAQ・トラブルシューティング もご確認ください。