画像

このページでは、顔画像の要件について説明します。

画像(image)は、すべての画像アップロード APIで必須のJSON形式のフィールドです。画像フィールドは、デコードされた画像データと多彩なオプションにより構成されます。それらを利用して、さまざまな利用目的を満たすことができます。検出APIの顔検出動作を除いて、他のすべての画像関連APIでは、同じような機能が提供されています。

📘

モデルについて

このページは、最初の顔モデル「JCV_FACE_K25000」の仕様に基づいています。新しいモデルでは詳細が異なる場合があります。
今後、モデルの詳細を表示するインターフェースをいくつか提供する予定です。


画像要件

入力画像にはいくつかの要件があります。

  • 画像ファイルのフォーマットは、JPGPNGGIFのいずれかであること(GIF を使用する場合、最初のフレームのみが処理されます)。
  • 画像エンコード(Base64)のサイズは、約5MB未満であること(API ゲートウェイでの各リクエストによって制限されます)。
  • 顔のサイズ(検出エリアで定義)は、32x32ピクセル以上で、画像全体の幅と高さの10%以上であること。
  • 画像は白黒でないこと。

📘

写真ファイルのサイズについて

画像ファイルサイズの選定は、精度と遅延の妥協です。画像ファイルのサイズが大きいほど、顔の品質が高くなり、顔認識の精度が高くなります。一方、画像が大きいほど処理に時間がかかるため、遅延が増大します。

ベストプラクティスとして、顔のサイズが200x200ピクセルを超える高品質、正面の画像を使用することを推奨します。また、デコードする前に、画像をトリミングして200KB未満に圧縮することを推奨します。


画像データ

APIで送信されるすべての画像データは、base64でエンコードする必要があります。AnySeeでは、その機能を提供しません。ご自身のサービスに実装してください。ここでは、base64エンコーディングの2つの簡単な例を提供します。

import base64

# ファイルを読み取り、バイナリをbase64文字列に変換
def base64_encode_file(file_path):
    handle = open(file_path, "rb")
    raw_bytes = handle.read()
    handle.close()
    return base64.b64encode(raw_bytes).decode("utf-8")
$ base64 file_path

📘

画像ファイルの保存について

AnySeeでは、ユーザーがアップロードした画像ファイルまたは画像データは、いかなる状況でもどこにも保存されません。Base64エンコードされた画像データは、検出または特徴抽出後に即破棄されます。調査目的のため画像ファイルが必要な場合は、画像データベースを独自で構築する必要があります。

エンコードされた文字列は、文字列値としてimage.dataフィールドに入れてください。省略したりNullにしたりすると、エラーが発生します。以下は短縮された例です。

{
  "image": {
    "data": "/9j/4AAQSkZJRgAB="
  }
}

エリアと検出

AnySee は、画像内の検出エリアを長方形で絞り込むことができます。areaフィールドに4つの整数値を使用して指定できます。

{
	"area": {
    "top": 0,
    "left": 0,
    "width": 1000,
    "height": 1000
  }
}

このareaフィールドが設定されている場合、顔検出モデルは、長方形の検出エリアと重なっている顔のみ検出・処理します。 顔エリアの定義については、位置を参照してください。

顔検出ロジックは、画像が必要なAPI間でわずかに異なります。顔検出APIは、画像内(エリア指定ある場合は検出エリア内)のすべての顔を検出します。他のAPIは、画像内(エリア指定ある場合は検出エリア内)の最大の顔のみを検出・処理します。

AnySeeには2つの検出モデルがあります。一つの顔のみ検出必要がある「高速モデル」と、複数の顔を検出する必要がある「低速モデル」となります。異なるAPIは、応答時間と検出精度を最適化するため、異なる検出ロジックを使用しています。そのため、位置と角度などの詳細な顔情報にわずかな違いが生じます。

API最初に使用するモデル次に使用するモデル顔検出数上限
POST /entities/faces高速モデル低速モデル1
PATCH /entities/faces/{$uuid}高速モデル低速モデル1
POST /entities/faces/search高速モデル低速モデル1
POST /entities/faces/detect低速モデル-複数可能
POST /entities/faces/compare高速モデル低速モデル1
POST /entities/faces/{$uuid}/compare高速モデル低速モデル1

自動回転

🚧

リソースを消費するプロセス

このオペレーションは、標準のリクエストよりも余分なリソースを消費するため、遅延が高くなります。
機能を十分に理解した上でご利用ください。

画像のExif(エクスチェンジャブル・イメージ・ファイル・フォーマット)メタデータに画像の向き情報が含まれている場合があります。通常、OSは画像を表示するときにExif情報に従って自動的に向きを調整するため、画像が縦向きになっていることを誤解されやすいです。これらの画像をそのままエンコードされてサービスに送信されると、多くの場合では、モデルが認識できず、顔が見つからないエラーを返します。まれに、間違った向きの画像がモデルによって受け入れられ、誤って処理される可能性があります。その場合の認識精度は保証できません。

331

向き情報付きのExif例

間違った向きの画像を入力することを避けるために、画像データを送信するときにautoRotateフィールドをtrueに指定することで、システムは画像を正しい向きで自動的に調整して処理できます。

📘

画像の登録時に自動回転を推奨します

お客様のシステムまたはアプリケーション側が入力画像を制御できないか、画像の前処理機能を持たない場合、自動回転機能を有効にすることを推奨します。特に顔データ追加のAPIを使用する場合は有効です。


レスポンスの詳細

AnySeeは、パワフルな顔認識機能を提供しています。一部のユーザーにとっては、全部の応答本文が冗長だと感じることがあります。また、各認証モジュールの処理に時間がかかり、ユーザー体験に影響します。当社のサービスでは、ユーザーが希望する詳細情報の種類を選択できるため、遅延とレスポンス内容を最適化できます。

returnDetailsフィールドには5つのオプションがあり、すべてが既定falseのブール値です。顔の詳細情報は、対応するフィールドがtrueに設定されている場合にのみ返されます。全部の情報を返す必要がある場合は、次のようにリクエストしてください。

{
	"returnDetails": {
    "position": true,
    "angle": true,
    "landmarks": true,
    "quality": true,
    "attributes": true
	}
}

位置、角度、ランドマーク

顔のアライメントとポーズは、顔特徴量と属性情報の抽出にとって、必要な手順です。位置角度ランドマークの3種類の出力は、高度な画像処理に役立ちます。returnDetailsのフィールドでレスポンスの個別指定を設定できます。

位置

positionフィールドには、顔認識の際に顔の位置を指定するエリアの4つの整数値により構成されます。topleftの値は、左上の座標点のピクセル値となります。widthheightの値を使用すると、画像内で顔エリア位置の長方形を指定できます。

1024

顔位置とする顔エリア

上記の顔エリアの例から、額や耳など、顔認識のためにすべての顔パーツが必要とされていないことがわかります。逆に、顔エリア内の顔パーツは重要です。顔エリア内の顔パーツの遮蔽などの評価詳細については、品質情報を参照してください。

角度

「ポーズ」または「ヘッドポーズ」とも呼ばれる角度(angle)は、ピッチ(pitch)、ヨー(yaw)、ロール(roll)の名前で、顔が空間直交座標系のxyz軸からどのぐらいずれているかを評価する一連の値です。

顔角度

顔角度

これらの3つのパラメータの説明は次のとおりです。

名称値の範囲方向 (+)
pitchx-90~90下向き
yawy-90~90右向き
rollz-90~90反時計回り

これら3つの軸に加えて、複数の顔の画像内の幾何中心点を簡単に特定するために、2つの追加フィールドcenterXおよびcenterYもレスポンスされます。

ランドマーク

ランドマークは、顔のパーツを位置決めするためのポイントの集合です。各ランドマークポイントには、平面直交座標系の座標ポイントのピクセル値を表す整数のxyにより構成されます。ランドマークは、AR(拡張現実)で顔に装飾を追加するシーンによく使用されます。AnySeeでは、106ポイントのランドマーク体系を使用しています。

レスポンスで返されるランドマークポイントの順序は、次の表に従います。

顔パーツ項目の順番
左眉[33, 34, 35, 36, 37, 64, 65, 66, 67]
右眉[38, 39, 40, 41, 42, 68, 69, 70, 71]
左目[52, 53, 72, 54, 55, 56, 73, 57, 74]
右目[61, 60, 75, 59, 58, 63, 76, 62, 77]
[43, 44, 45, 46, 47, 48, 49, 50, 51, 80, 81, 82, 83]
[84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103]
顔の輪郭[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32]

📘

左右について

こちらでの「左」と「右」は、画像における目と眉の位置を意味し、個人の視点からのものではありません。

各ランドマークの位置は、こちらの画像例も参照できます。

1024

106個のランドマーク


品質情報

🚧

リソースを消費するプロセス

このオペレーションは、標準のリクエストよりも余分なリソースを消費するため、遅延が高くなります。
機能を十分に理解した上でご利用ください。

品質チェックは、顔を分析して、サイズ、明るさ、鮮明さ、遮蔽の度合いなどの定量情報を返します。より高い認識精度を得るために、顔データを追加する前に品質チェックを実行することを推奨します。

お客様の利用シーンに基づいて許容レベルをテスト・調整を行ってください。次の表は、各項目の詳細と、少々厳しめの基準の参考値について記載しています。

項目説明値の範囲推奨範囲
brightness顔の明るさ。値が大きいほど明いです。-1.0 ~ 1.0-0.5 ~ 0.5
sharpnessMAGICアルゴリズムで顔の鮮明さ。値が高いほど鮮明です。0.0 ~ 1.00.8 ~ 1.0
mouthClosed口が閉じている度合い。
値が高いほど口が閉じています。
0.0 ~ 1.00.6 ~ 1.0
centered顔の中心と画像の中心との距離。 値が高いほど近いです。0.0 ~ 1.00.0 ~ 1.0
size画像全体に対する顔エリアの大きさ。(位置を参照してください。)値が高いほど大きいです。0.0 ~ 1.00.0 ~ 0.85
integrity顔エリアが画像に含まれる度合い。値が高いほど良いです。0.0 ~ 1.01.0
completeness.totalランドマークの完成度(遮蔽が無い)の全体的な評価
値が高いほど良いです。
0.0 ~ 1.00.9 ~ 1.0
completeness.leftEyeBrow左眉が完全である度合い。値が高いほど良いです。0.0 ~ 1.00.9 ~ 1.0
completeness.rightEyeBrow右眉が完全である度合い。値が高いほど良いです。0.0 ~ 1.00.9 ~ 1.0
completeness.leftEye左目が完全である度合い。値が高いほど良いです。0.0 ~ 1.00.9 ~ 1.0
completeness.rightEye右目が完全である度合い。値が高いほど良いです。0.0 ~ 1.00.9 ~ 1.0
completeness.nose鼻が完全である度合い。値が高いほど良いです。0.0 ~ 1.00.9 ~ 1.0
completeness.mouth口が完全である度合い。値が高いほど良いです。0.0 ~ 1.00.9 ~ 1.0
completeness.faceContour顔の輪郭が完全である度合い。値が高いほど良いです。0.0 ~ 1.00.9 ~ 1.0

属性情報

🚧

リソースを消費するプロセス

このオペレーションは、標準のリクエストよりも余分なリソースを消費するため、遅延が高くなります。
機能を十分に理解した上でご利用ください。

AnySee は、最新のAIアルゴリズムを利用して有用な顔属性を抽出し、ユーザーが訪問者のデータを分析できるようにします。すべての値は推定値であるため、それらを事実の値として扱わないでください。

ageemotionsを除いて、すべてのサブ項目には、1つ列挙文字列のvalueフィールドと、0.0から1.0の確実性(certainty)フィールドが含まれます。年齢(age)には3つの項目があり、上限(upperlimit)は年齢予測の最大値です。下限(lowerlimit)は上限から10を引いた値に等しく、推定値(value)は上限から5を引いた値に等しくなります。感情(emotions)フィールドには、8つのサブ項目とそれぞれの確実性(certainty)が含まれます。

項目列挙値説明
age.value-年齢:推定値
age.upperlimit-年齢:上限
age.lowerlimit-年齢:下限
gendermale性別:男性
genderfemale性別:女性
bangswithout_bangs前髪:前髪無
bangswith_bangs前髪:前髪有
facialHairwithout_facial_hair髭:髭無
facialHairwith_moustache髭:口髭有
facialHairwith_beard髭:顎髭有
facialHairwith_sideburns髭:頬髭有
helmetwithout_helmetヘルメット:ヘルメット無
helmetwith_helmetヘルメット:ヘルメット有
hatwithout_hat帽子:帽子無
hatwith_hat帽子:帽子有
headphoneswithout_headphonesヘッドフォン:ヘッドフォン無
headphoneswith_over_ear_headphonesヘッドフォン:耳覆い型ヘッドフォン有
headphoneswith_earbudsヘッドフォン:イヤホン有
glasseswithout_glasses眼鏡:眼鏡無
glasseswith_transparent_glasses眼鏡:透明眼鏡有
glasseswith_sunglasses眼鏡:サングラス有
maskwithout_maskマスク:マスク無
maskwith_nose_covered_maskマスク:鼻カバーマスク
maskwith_mouth_covered_maskマスク:口カバーマスク
maskwith_fully_covered_maskマスク:フルカバーマスク
emotionsangry表情:怒り
emotionshappy表情:喜び
emotionssad表情:悲しみ
emotionscalm表情:冷静
emotionssurprised表情:驚き
emotionsscared表情:恐れ
emotionsdisgusted表情:嫌悪
emotionssleepy表情:眠気