顔認識の概念
この記事では、顔認証の概念、関連する操作、およびその基礎となるデータ構造について説明します。 顔認識とは、大まかに言えば、顔で個人を検証したり、識別したりする方法のことを指します。
検証とは、2 つの顔を受け取り、それらが同じ顔であるかどうかを返す 1 対 1 の照合であり、識別とは、1 つの顔を入力として受け取り、一致する候補のセットを返す 1 対多の照合です。 顔認識は、企業やアプリで (遠隔地にいる) ユーザーが本人であることを確認するために使う ID 検証シナリオを実装する上で重要です。
Vision Studio を使用して、すばやく簡単に顔認識の機能を試すことができます。
関連のデータ構造
認識操作では、主に次のデータ構造を使用します。 これらのオブジェクトはクラウドに格納され、その ID 文字列によって表すことができます。 ID 文字列はサブスクリプション内で常に一意ですが、名前フィールドは重複する可能性があります。
Name | 説明 |
---|---|
DetectedFace | この 1 つの顔の表現は、顔検出操作によって取得されます。 その ID は作成後 24 時間で期限が切れます。 |
PersistedFace | DetectedFace オブジェクトがグループ (FaceList または Person) に追加されると、これらは PersistedFace オブジェクトになります。 これらはいつでも取得することができ、期限が切れることはありません。 |
FaceList または LargeFaceList | このデータ構造は、PersistedFace オブジェクトの類別された一覧です。 FaceList には一意の ID、名前の文字列が含まれ、任意でユーザー データの文字列が含まれます。 |
Person | このデータ構造は、同じ人に属する PersistedFace オブジェクトの一覧です。 これには一意の ID、名前の文字列が含まれ、任意でユーザー データの文字列が含まれます。 |
PersonGroup または LargePersonGroup | このデータ構造は、Person オブジェクトの類別された一覧です。 これには一意の ID、名前の文字列が含まれ、任意でユーザー データの文字列が含まれます。 PersonGroup は、認識操作で使用するには、その前にトレーニングする必要があります。 |
PersonDirectory | このデータ構造は LargePersonGroup と似ていますが、ストレージ容量やその他の機能が追加されています。 詳細については、「PersonDirectory 構造を使用する」を参照してください。 |
認識操作
このセクションでは、基礎となる操作で前述のデータ構造を使って、どのように顔の識別および検証を行うのかを説明します。
PersonGroup の作成とトレーニング
照合の対象となる一連の人物の保存先となる PersonGroup または LargePersonGroup を作成する必要があります。 PersonGroup には Person オブジェクトが格納されています。これは、それぞれ個々の人物を表し、その人物に属する一連の顔データが保存されています。
Train 操作では、顔データの比較に使用するデータ セットを準備します。
識別
Identify 操作では、(DetectedFace または PersistedFace オブジェクトから) 1 つまたは複数のソースとなる顔 ID と、PersonGroup または LargePersonGroup を受け取ります。 これは、ソースとなるそれぞれの顔が属している可能性のある Person オブジェクトのリストを返します。 返される Person オブジェクトは、予測信頼度値を含む Candidate オブジェクトとしてまとめられます。
検証
Verify 操作では、(DetectedFace または PersistedFace オブジェクトから) 1 つの顔 ID と Person オブジェクトを受け取ります。 ここでは、その顔が同じ人物のものであるかどうかの判断が行われます。 検証は 1 対 1 の照合で、Identify API 呼び出しの結果に対する最終的なチェックとして使用できます。 ただし、必要に応じて、API のパフォーマンスを向上させるために候補となる人物が属している PersonGroup を渡すことができます。
入力データ
次のヒントを使用して、確実に入力画像から最も正確な認識結果が得られるようにします。
- サポートされている入力画像形式は、JPEG、PNG、GIF (最初のフレーム)、BMP です。
- 画像ファイル サイズは 6 MB 以内であることが必要です。
- Person オブジェクトを作成するときに、さまざまな種類の角度と照明を備えた写真を使用します。
- 次のような技術的な課題のために、一部の顔を認識できない場合があります。
- 強すぎる照明を含む画像 (強烈な逆光照明など)
- 一方または両方の目を遮っている障害物
- 髪質や顔の毛の違い
- 年齢による顔立ちの変化
- 極端な表情
- 顔検出操作の qualityForRecognition 属性は、適用可能な検出モデルを使うときに、画像が顔認識を試みるのに十分な品質である可能性が高いかどうかの一般的なガイドラインとして使うことができます。 個人の登録には "高" 品質の画像のみ、識別シナリオでは "中" 以上の品質をお勧めします。
次のステップ
顔認識の概念を理解したので、トレーニング済みの PersonGroup に対して顔を識別するスクリプトを作成します。