降低延遲並改善效能
本指南說明如何在使用臉部服務時降低網路延遲並提高服務效能。 應用程式的速度和效能會影響使用者 (例如註冊和使用臉部識別系統的人員) 的體驗。
緩和延遲
使用臉部辨識服務時,您可能會遇到延遲。 延遲指的是系統在網路上通訊時所發生的任何一種延遲。 一般來說,延遲的可能原因包括:
- 每個封包必須從來源傳送到目的地的實體距離。
- 傳輸媒體的問題。
- 路由器或交換器沿著傳輸路徑發生的錯誤。
- 防毒應用程式、防火牆和其他安全性機制檢查封包所需的時間。
- 用戶端或伺服器應用程式發生故障。
本節說明如何降低特定於 Azure AI 臉部服務延遲的各種原因。
注意
Azure AI 服務不會提供任何有關延遲的服務等級協定 (SLA)。
為臉部資源選擇適當的區域
網路延遲是資訊從來源 (您的應用程式) 移至目的地 (您的 Azure 資源) 所需的時間,其深受發出要求的應用程式與回應這些要求的 Azure 伺服器之間的地理距離的影響。 例如,如果臉部資源位於 EastUS
,則紐約的使用者的回應時間較快,而亞洲的使用者體驗到較長的延遲。
建議選取最接近使用者的區域,以將延遲降到最低。 如果使用者分散在世界各地,請考慮在不同的區域中建立多個資源,並將要求路由傳送至最接近客戶的區域。 或者,可以選擇一個靠近所有客戶的地理中心的區域。
將 Azure Blob 儲存體用於遠端 URL
臉部服務提供兩種方式來上傳影像以進行處理:直接在要求中上傳影像的原始位元組資料,或提供遠端影像的 URL。 不論使用哪種方法,臉部服務都必須從其來源位置下載影像。 如果從臉部服務到用戶端或遠端伺服器的連線速度緩慢或通訊不佳,則會影響要求的回應時間。 如果存在延遲問題,請考慮將映像儲存在 Azure Blob 儲存體中,並在要求中傳遞映像 URL。 如需更多實作詳細資料,請參閱將映像儲存在 Azure 進階 Blob 儲存體中。 範例 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;
請務必在與臉部資源相同的區域中使用儲存體帳戶。 這會減少臉部服務與儲存體帳戶之間的連線延遲。
使用最佳檔案大小
如果使用的影像檔案很大,它會以兩種方式影響臉部服務的回應時間:
- 上傳檔案需要更多時間。
- 服務需要花費更多時間來處理檔案,所需的時間與檔案大小成正比。
正確性與網路速度之間的取捨
輸入影像的品質會影響臉部服務的正確性和延遲。 品質較低的影像可能會導致錯誤的結果。 品質較高的影像可能會產生更精確的解譯。 不過,由於品質較高的影像檔案大小較大,也會增加網路延遲。 服務需要更多時間從用戶端接收整個檔案並加以處理,所需的時間與檔案大小成正比。 高於特定層級之後,進一步的提升品質不會大幅改善正確性。
若要在正確性和速度之間達到最佳平衡,請遵循這些秘訣來將您的輸入資料最佳化。
其他檔案大小提示
請注意下列其他提示:
- 對於臉部偵測,使用偵測模型
FaceDetectionModel.Detection01
時,減少影像檔案大小會增加處理速度。 如果使用偵測模型FaceDetectionModel.Detection02
,則如果影像檔案小於 1920x1080 像素,減少影像檔案大小才會增加處理速度。 - 對於臉部辨識,如果影像小於 200x200 像素,則減少臉部大小只會提高速度。
- 臉部偵測方法的效能也取決於影像中有多少人臉。 臉部辨識服務針對一個影像,最多可以傳回 100 個臉。 臉部會依臉部矩形大小,從大到小進行排名。
盡可能平行呼叫 API
如果您需要呼叫多個 API,請考慮在應用程式設計允許時,以平行方式呼叫這些方法。 例如,如果您需要偵測兩個影像中的臉部以執行臉部比較,則可以在非同步工作中呼叫它們:
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);
平滑處理尖峰流量
臉部服務的效能可能會受到流量尖峰的影響,這可能會導致節流、輸送量降低和延遲升高。 建議逐漸增加 API 呼叫的頻率,並避免立即重試。 例如,如果您有 3000 張相片用於執行臉部偵測,請勿同時傳送 3000 個要求。 而是在 5 分鐘內循序傳送 3000 個要求 (亦即每秒約 10 個要求),讓網路流量更加穩定一致。 如果想要縮短完成時間,請逐漸增加每秒的呼叫次數,以使流量平滑增加。 如果遇到任何錯誤,請參閱有效處理錯誤來處理回應。
有效處理錯誤
基於各種原因,臉部 API 呼叫可能會發生錯誤 429
和 503
。 應用程式必須一律為處理這些錯誤做好準備。 以下是一些建議:
HTTP 錯誤碼 | 描述 | 建議 |
---|---|---|
429 |
節流 | 並行呼叫時可能會遇到速率限制。 應該降低呼叫的頻率,並使用指數輪詢重試。 避免立即重試,並避免同時重新傳送大量要求。 如果想要增加限制,請參閱配額指南的要求增加一節。 |
503 |
服務無法使用 | 服務可能忙碌中,且無法立即回應要求。 您應該採用類似錯誤 429 的輪詢策略。 |
確保可靠性和支援
以下是確保應用程式擁有可靠性和高度支援的其他提示:
- 產生唯一 GUID 作為
client-request-id
HTTP 要求標頭,並隨每個要求一起傳送。 這有助於在需要回報 Microsoft 問題時,讓 Microsoft 更輕鬆地調查任何錯誤。- 一律記錄遇到非預期回應時收到的
client-request-id
和回應。 如果需要任何協助,請提供此資訊給 Microsoft 支援服務,以及問題發生時的 Azure 資源識別碼和時間週期。
- 一律記錄遇到非預期回應時收到的
- 在將應用程式發行至生產環境之前,請先進行試驗測試。 請確定應用程式可以正確且有效地處理錯誤。
下一步
在本指南中,您已了解如何在使用臉部服務時提升效能。 接下來,請遵循教學課程設定一個工作軟體解決方案,該解決方案可結合伺服器端和用戶端邏輯,以便對使用者執行臉部活躍度偵測。