注意
Face サービスへのアクセスは、責任ある AI 原則をサポートするために、適格性と使用条件に基づいて制限されます。 Face サービスは、管理対象の顧客とパートナー Microsoftのみが利用できます。 顔認識の取り込みフォームを使用して、アクセスを申請します。 詳細については、「 Face の制限付きアクセス 」ページを参照してください。
このガイドでは、Azure Face サービスを使用して顔検出、識別、類似性検索用の顔認識モデルを指定する方法について説明します。
Face サービスでは、機械学習モデルを使用して、画像内の目に見える人間の顔に対して操作を実行します。 お客様からのフィードバックや研究の進歩に基づいてモデルの精度を継続的に向上させ、モデルの更新としてこれらの改善を提供します。 開発者は、使用する顔認識モデルのバージョンを指定し、ユース ケースに最適なモデルを選択できます。
前提 条件
AI 顔検出と識別の概念を理解している必要があります。 そうでない場合は、最初に次のガイドを参照してください。
モデルの互換性
Azure Face サービスには、4 つの認識モデルが用意されています。 モデル recognition_01 (2017 年公開)、 recognition_02 (2019 年公開)、 recognition_03 (2020 年公開) は、これらのモデルで作成された FaceListまたは PersonGroupを使用しているお客様に対する下位互換性を確保するために継続的にサポートされています。
FaceList または PersonGroup では、作成された認識モデルが常に使用され、新しい顔は追加されるとこのモデルに関連付けられます。 これは作成後に変更することはできません。顧客は、対応する FaceList または PersonGroup で対応する認識モデルを使用する必要があります。
後の認識モデルには、自分の都合に合わせて移動できます。ただし、選択した認識モデルを使用して、新しい FaceList と PersonGroup を作成する必要があります。
モデルの推奨事項
recognition_04 モデル (2021 年公開) は、現在利用可能な最も正確なモデルです。 新しい顧客の場合は、このモデルを使用します。 Recognition_04 では、類似性比較と人物照合比較の両方の精度が向上します。 Recognition_04 は、顔カバー(外科マスク、N95マスク、布マスク)を着用している登録ユーザーの認識を向上させます。 最新の detection_03 モデルを使用して、登録されたユーザーが顔カバーを装着しているかどうかを検出し、最新の recognition_04 モデルを使用して ID を認識する、安全でシームレスなユーザー エクスペリエンスを構築できます。 各モデルは他のモデルとは独立して動作し、1 つのモデルに設定された信頼度しきい値は、他の認識モデル間で比較されるわけではありません。
次のセクションでは、モデルの競合を回避しながら、異なる Face 操作で選択したモデルを指定する方法について説明します。 上級ユーザーで、最新のモデルに切り替える必要があるかどうかを判断する場合は、「 異なるモデルを評価 する」セクションに進んで新しいモデルを評価し、現在のデータ セットを使用して結果を比較します。
指定したモデルを使用して顔を検出する
顔検出は、人間の顔の視覚的なランドマークを識別し、その境界ボックスの位置を特定します。 また、顔の特徴を抽出し、識別に使用するために最大 24 時間一時的に格納します。 この情報はすべて、1 つの顔の表現を形成します。
認識モデルは顔の特徴を抽出するときに使用されるため、検出操作の実行時にモデルのバージョンを指定できます。
Detect API を使用する場合は、recognitionModel パラメーターを使用してモデル バージョンを割り当てます。 使用可能な値は次のとおりです。
recognition_01recognition_02recognition_03recognition_04
必要に応じて、 returnRecognitionModel パラメーター (既定の false) を指定して 、recognitionModel を応答で返す必要があるかどうかを示すことができます。 そのため、 Detect REST API の要求 URL は次のようになります。
https://westus.api.cognitive.microsoft.com/face/v1.0/detect?detectionModel={detectionModel}&recognitionModel={recognitionModel}&returnFaceId={returnFaceId}&returnFaceAttributes={returnFaceAttributes}&returnFaceLandmarks={returnFaceLandmarks}&returnRecognitionModel={returnRecognitionModel}&faceIdTimeToLive={faceIdTimeToLive}
クライアント ライブラリを使用している場合は、バージョンを表す文字列を渡すことで、 recognitionModel の値を割り当てることができます。 割り当て解除のままにすると、既定のモデル バージョンの recognition_01 が使用されます。 .NET クライアント ライブラリについては、次のコード例を参照してください。
string imageUrl = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/detection1.jpg";
var response = await faceClient.DetectAsync(new Uri(imageUrl), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: true, returnFaceLandmarks: true, returnRecognitionModel: true);
var faces = response.Value;
メモ
後の手順で顔認識シナリオを有効にするには、 returnFaceId パラメーターを true に設定する必要があります。
指定したモデルを使用して顔を識別する
Face サービスは、画像から顔データを抽出し、 Person オブジェクトに 関連付けることができます (たとえば、 Add Person Group Person Face API 呼び出しを通じて)。また、複数の Person オブジェクトを PersonGroup にまとめて格納できます。 次に、新しい顔を PersonGroup と比較し (ユーザー グループから識別 呼び出しを使用)、そのグループ内の一致する人物を識別できます。
PersonGroup には、すべてのユーザーに対して 1 つの一意の認識モデルが必要です。グループを作成するときに、recognitionModel パラメーターを使用してこれを指定できます (人物グループの作成または大規模な人物グループの作成)。 このパラメーターを指定しない場合は、元の recognition_01 モデルが使用されます。 グループでは、作成された認識モデルが常に使用され、新しい顔は、そのモデルに追加されると関連付けられます。 これは、グループの作成後に変更することはできません。
PersonGroup が構成されているモデルを確認するには、returnRecognitionModel パラメーターを true に設定した Get Person Group API を使用します。
次の.NETコード例を参照してください。
// Create an empty PersonGroup with "recognition_04" model
string personGroupId = "mypersongroupid";
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["name"] = "My Person Group Name", ["recognitionModel"] = "recognition_04" }))))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
await httpClient.PutAsync($"{ENDPOINT}/face/v1.0/persongroups/{personGroupId}", content);
}
このコードでは、ID を持つ mypersongroupid が作成され、recognition_04 モデルを使用して顔の特徴を抽出するように設定されています。
それに対応して、この PersonGroup と比較する顔を検出するときに使用するモデルを指定する必要があります ( Detect API を使用)。 使用するモデルは、常に PersonGroup の構成と一致している必要があります。そうしないと、互換性のないモデルが原因で操作が失敗します。
ユーザーグループからの識別 API に変更はありません。必要なのは、検出でモデルのバージョンを指定することだけです。
指定したモデルで類似した顔を検索する
類似性検索用の認識モデルを指定することもできます。 recognition_01 モデルが既定で使用されます。
FaceList では、作成された認識モデルが常に使用され、新しい顔はリストに追加されるとこのモデルに関連付けられます。これは、作成後に変更することはできません。
FaceList が構成されているモデルを確認するには、returnRecognitionModel パラメーターを true に設定した Get Face List API を使用します。
次の.NETコード例を参照してください。
using (var content = new ByteArrayContent(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new Dictionary<string, object> { ["name"] = "My face collection", ["recognitionModel"] = "recognition_04" }))))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
await httpClient.PutAsync($"{ENDPOINT}/face/v1.0/facelists/{faceListId}", content);
}
このコードでは、特徴抽出にrecognition_04 モデルを使用して、My face collectionという FaceList を作成します。 この FaceList で新しく検出された顔と類似した顔を検索する場合、その顔は、recognition_04 モデルを使用して検出 (検出) されている必要があります。 前のセクションと同様に、モデルは一貫性がある必要があります。
類似検索 API に変更はありません。では、検出でモデルのバージョンのみを指定します。
指定したモデルを使用して顔を確認する
Verify Face To Face API は、2 つの顔が同じ人物に属しているかどうかを確認します。 認識モデルに関して Verify API に変更はありませんが、同じモデルで検出された顔のみを比較できます。
さまざまなモデルを評価する
独自のデータで異なる認識モデルのパフォーマンスを比較する場合は、次の操作を行う必要があります。
- それぞれrecognition_01、recognition_02、recognition_03、およびrecognition_04を使用して、4つのPersonGroupを作成します。
- 画像データを使用して顔を検出し、これら 4 つの PersonGroup内の 人物に登録します。
- PersonGroupをトレーニングするためにTrain Person Group APIを使用します。
- 4 つの PersonGroupすべてで Identify From Person Group を使用してテストし、結果を比較します。
通常、信頼度しきい値 (0 から 1 までの値で、モデルが顔を識別する必要がある信頼性を決定する値) を指定する場合は、異なるモデルに異なるしきい値を使用することが必要になる場合があります。 あるモデルのしきい値は、別のモデルと共有されるわけではないため、必ずしも同じ結果が生成されるとは限りません。
次の手順
この記事では、さまざまな Face サービス API で使用する認識モデルを指定する方法について説明しました。 次に、クイック スタートに従って顔検出を開始します。