次の方法で共有


待機時間を短縮し、パフォーマンスを向上させる

このガイドでは、Face サービスを使用するときに、ネットワーク待機時間を短縮し、サービスのパフォーマンスを向上させる方法について説明します。 アプリケーションの速度とパフォーマンスは、顔識別システムに登録して使用するユーザーなどのエンド ユーザーのエクスペリエンスに影響します。

待ち時間の軽減

Face サービスを使用すると、待機時間が発生する可能性があります。 待機時間とは、システムがネットワーク経由で通信するときに発生するあらゆる種類の遅延のことです。 一般に、待機時間には次のような原因が考えられます。

  • 各パケットが送信元から送信先まで移動する必要がある物理的な距離。
  • 伝送媒体に関する問題。
  • 伝送パス上にあるルーターまたはスイッチでのエラー。
  • ウイルス対策アプリケーション、ファイアウォール、およびその他のセキュリティ メカニズムでパケットを検査するために必要な時間。
  • クライアントまたはサーバー アプリケーションでの誤動作。

このセクションでは、Azure AI Face サービスに固有の待機時間のさまざまな原因を軽減する方法について説明します。

Note

Azure AI サービスからは、待機時間に関するサービス レベル アグリーメント (SLA) は提供されません。

Face リソースに適したリージョンを選択する

ソース (アプリケーション) から送信先 (Azure リソース) への情報の移動にかかる時間 (ネットワーク待機時間) は、要求元のアプリケーションとそれらの要求に応答する Azure サーバーとの間の地理的な距離の影響を強く受けます。 たとえば、Face リソースがEastUSにある場合、ニューヨークのユーザーの応答時間は短くなり、アジアのユーザーの遅延時間が長くなります。

待機時間を最小限に抑えるために、ユーザーに最も近いリージョンを選択することをお勧めします。 ユーザーが世界中に分散している場合は、異なる複数のリージョンに複数のリソースを作成し、顧客に最も近いリージョンに要求をルーティングすることを検討してください。 または、すべての顧客の地理的な中心に近いリージョンを選択することもできます。

リモート URL 用に Azure Blob Storage を使用する

Face サービスでは、処理のために画像をアップロードする方法として、要求で直接画像の未加工バイト データをアップロードする方法と、リモート画像の URL を指定する方法の 2 つがあります。 方法に関係なく、Face サービスはソースの場所から画像をダウンロードする必要があります。 Face サービスからクライアントまたはリモート サーバーへの接続が低速である場合は、要求に対する応答時間に影響します。 待機時間に問題がある場合は、Azure Blob Storage にイメージを格納し、要求で画像の URL を渡すことを検討してください。 実装の詳細については、Azure Premium Blob Storage への画像の格納に関するページを参照してください。 API 呼び出しの例:

var url = "https://<storage_account_name>.blob.core.windows.net/<container_name>/<file_name>";
var response = await faceClient.DetectAsync(new Uri(url), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: false);
var faces = response.Value;

Face リソースと同じリージョンのストレージ アカウントを必ず使用してください。 これにより、Face サービスとストレージ アカウント間の接続の待機時間が短縮されます。

最適なファイル サイズを使用する

使用する画像ファイルが大きい場合は、Face サービスの応答時間に次の 2 つの方法で影響します。

  • ファイルのアップロードに時間がかかります。
  • ファイルのサイズに比例して、サービスによる処理時間が長くなります。

正確度とネットワーク速度のトレードオフ

入力画像の品質は、Face サービスの正確度と待機時間の両方に影響します。 品質が低い画像は、誤った結果になる可能性があります。 品質が高い画像は、より正確な解釈を可能にする可能性があります。 ただし、品質が高い画像は、ファイル サイズが大きいため、ネットワークの待機時間が長くなります。 このサービスでは、ファイル サイズに比例して、クライアントからファイル全体を受信して処理するために必要な時間が長くなります。 一定のレベルを超えた場合、品質をさらに向上させても正確度が大幅に向上することはありません。

正確度と速度の最適なバランスを実現するには、次のヒントに従って入力データを最適化します。

その他のファイル サイズのヒント

次の追加のヒントに注意してください。

  • 顔検出の場合、検出モデル FaceDetectionModel.Detection01 を使用しているときは、画像ファイルのサイズを小さくすると処理速度が向上します。 検出モデル FaceDetectionModel.Detection02 を使用する際、画像ファイルが 1920 x 1080 ピクセルより小さい場合にのみ、画像ファイルのサイズを小さくすると処理速度が向上します。
  • 顔認識で顔のサイズを小さくしたとき、画像が 200 x 200 ピクセルより小さい場合にのみ速度が向上します。
  • 顔検出方法のパフォーマンスは、画像内の顔の数にも影響されます。 Face サービスからは、1 つの画像に対して最大で 100 個の顔を返すことができます。 顔には、四角形のサイズの大きいものから小さいものの順に、ランクが付けされます。

可能な場合は API を並列で呼び出す

複数の API を呼び出す必要がある場合、アプリケーションの設計がそれに対応している場合は、それらを並列に呼び出すことを検討します。 たとえば、顔の比較を実行するために 2 つの画像で顔を検出する必要がある場合は、非同期タスクでそれらを呼び出すことができます。

string url1 = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/detection1.jpg";
string url2 = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/Face/images/detection2.jpg";
var response1 = client.DetectAsync(new Uri(url1), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: false);
var response2 = client.DetectAsync(new Uri(url2), FaceDetectionModel.Detection03, FaceRecognitionModel.Recognition04, returnFaceId: false);

Task.WaitAll(new Task<Response<IReadOnlyList<FaceDetectionResult>>>[] { response1, response2 });
IEnumerable<FaceDetectionResult> results = response1.Result.Value.Concat(response2.Result.Value);

急増するトラフィックをスムーズにする

Face サービスのパフォーマンスは、トラフィックの急増の影響を受ける可能性があります。これにより、帯域幅調整、スループットの低下、待機時間の増加が発生する可能性があります。 API 呼び出しの頻度を徐々に増やし、すぐに再試行しないようにすることをお勧めします。 たとえば、顔検出を実行する写真が 3000 枚ある場合は、3000 件の要求を同時に送信しないようにしてください。 代わりに、ネットワーク トラフィックの一貫性を高めるために、5 分間で 3000 件 (つまり、1 秒あたり約 10 件) の要求を順番に送信します。 完了までの時間を短縮したい場合は、トラフィックをスムーズにするために、1 秒あたりの呼び出し数を徐々に増やします。 エラーが発生した場合は、「エラーを効果的に処理する」を参照して、応答を処理してください

エラーを効果的に処理する

429503 のエラーは、さまざまな理由のために Face API 呼び出しで発生する可能性があります。 アプリケーションは常にこれらのエラーを処理する準備ができている必要があります。 以下に、推奨事項をいくつか示します。

HTTP エラー コード 説明 推奨事項
429 調整 同時呼び出しではレート制限が発生する可能性があります。 呼び出しの頻度を減らし、指数バックオフを使用して再試行する必要があります。 即時再試行を避け、同時に多数の要求を再送信しないようにします。

制限を引き上げる場合は、クォータ ガイドの「引き上げを要求する」セクションを参照してください。
503 Service unavailable サービスがビジー状態で、要求にすぐに応答できない可能性があります。 エラー 429 の場合と同様のバックオフ戦略を採用する必要があります。

信頼性とサポートを確保する

アプリケーションの信頼性と高いサポートを確保するためのその他のヒントを次に示します。

  • client-request-id HTTP 要求ヘッダーとして一意の GUID を生成し、各要求と共に送信します。 これにより、Microsoft に問題を報告する必要がある場合に、Microsoft がエラーをより簡単に調査できます。
    • 予期しない応答が発生したときに受信した client-request-id と応答を常に記録します。 サポートが必要な場合は、この情報を Azure リソース ID および問題が発生した期間と共に Microsoft サポートに提供してください。
  • アプリケーションを運用環境にリリースする前にパイロット テストを実施します。 アプリケーションがエラーを適切かつ効果的に処理できることを確認します。

次のステップ

このガイドでは、Face サービスを使用するときにパフォーマンスを向上させる方法について説明しました。 次に、チュートリアルに従って、サーバー側とクライアント側のロジックを組み合わせてユーザーの顔のライブネス検出を行う、動作するソフトウェア ソリューションを設定します。