Eliminowanie opóźnień i zwiększanie wydajności
W tym przewodniku opisano, jak ograniczyć opóźnienia sieci i poprawić wydajność usługi podczas korzystania z usługi rozpoznawania twarzy. Szybkość i wydajność aplikacji będą mieć wpływ na środowisko użytkowników końcowych, takich jak osoby, które rejestrują się i korzystają z systemu identyfikacji twarzy.
Zmniejszanie opóźnienia
Podczas korzystania z usługi rozpoznawania twarzy może wystąpić opóźnienie. Opóźnienie odnosi się do dowolnego rodzaju opóźnienia, które występuje, gdy systemy komunikują się za pośrednictwem sieci. Ogólnie rzecz biorąc, możliwe przyczyny opóźnienia obejmują:
- Odległość fizyczna każdego pakietu musi podróżować ze źródła do miejsca docelowego.
- Problemy z medium transmisji.
- Błędy w routerach lub przełącznikach wzdłuż ścieżki transmisji.
- Czas wymagany przez aplikacje antywirusowe, zapory i inne mechanizmy zabezpieczeń do sprawdzania pakietów.
- Awarie aplikacji klienckich lub serwerowych.
W tej sekcji opisano, jak można ograniczyć różne przyczyny opóźnienia specyficzne dla usługi rozpoznawania sztucznej inteligencji platformy Azure.
Uwaga
Usługi azure AI nie zapewniają żadnej umowy dotyczącej poziomu usług (SLA) dotyczącej opóźnienia.
Wybieranie odpowiedniego regionu dla zasobu rozpoznawania twarzy
Opóźnienie sieci, czas potrzebny na przejście informacji ze źródła (aplikacji) do miejsca docelowego (zasobu platformy Azure) jest silnie dotknięty odległością geograficzną między aplikacją wysyłającą żądania a serwerem platformy Azure odpowiadającym na te żądania. Jeśli na przykład zasób rozpoznawania twarzy znajduje się w EastUS
lokalizacji , ma krótszy czas odpowiedzi dla użytkowników w Nowym Jorku, a użytkownicy w Azji mają dłuższe opóźnienie.
Zalecamy wybranie regionu znajdującego się najbliżej użytkowników, aby zminimalizować opóźnienia. Jeśli użytkownicy są dystrybuowani na całym świecie, rozważ utworzenie wielu zasobów w różnych regionach i kierowanie żądań do regionu najbliższego klientom. Alternatywnie możesz wybrać region, który znajduje się w pobliżu centrum geograficznego wszystkich klientów.
Używanie usługi Azure Blob Storage dla zdalnych adresów URL
Usługa rozpoznawania twarzy udostępnia dwa sposoby przekazywania obrazów do przetwarzania: przekazywanie nieprzetworzonych danych bajtów obrazu bezpośrednio w żądaniu lub podanie adresu URL do obrazu zdalnego. Niezależnie od metody usługa rozpoznawania twarzy musi pobrać obraz z lokalizacji źródłowej. Jeśli połączenie z usługi rozpoznawania twarzy do klienta lub serwera zdalnego jest powolne lub słabe, wpływa na czas odpowiedzi żądań. Jeśli masz problem z opóźnieniem, rozważ zapisanie obrazu w usłudze Azure Blob Storage i przekazanie adresu URL obrazu w żądaniu. Aby uzyskać więcej szczegółów implementacji, zobacz przechowywanie obrazu w usłudze Azure Premium Blob Storage. Przykładowe wywołanie interfejsu 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;
Pamiętaj, aby użyć konta magazynu w tym samym regionie co zasób rozpoznawania twarzy. Zmniejsza to opóźnienie połączenia między usługą rozpoznawania twarzy a kontem magazynu.
Używanie optymalnych rozmiarów plików
Jeśli używane pliki obrazów są duże, wpływa to na czas odpowiedzi usługi rozpoznawania twarzy na dwa sposoby:
- Przekazanie pliku zajmuje więcej czasu.
- Przetwarzanie pliku zajmuje usłudze więcej czasu, proporcjonalnie do rozmiaru pliku.
Kompromis między dokładnością a szybkością sieci
Jakość obrazów wejściowych wpływa zarówno na dokładność, jak i opóźnienie usługi rozpoznawania twarzy. Obrazy o niższej jakości mogą powodować błędne wyniki. Obrazy o wyższej jakości mogą umożliwić bardziej precyzyjne interpretacje. Jednak obrazy o wyższej jakości również zwiększają opóźnienie sieci ze względu na ich większe rozmiary plików. Usługa wymaga więcej czasu na odebranie całego pliku od klienta i przetworzenie go w proporcji do rozmiaru pliku. Powyżej pewnego poziomu dalsze ulepszenia jakości nie poprawią dokładności.
Aby uzyskać optymalną równowagę między dokładnością i szybkością, postępuj zgodnie z tymi wskazówkami, aby zoptymalizować dane wejściowe.
- Aby uzyskać informacje na temat operacji wykrywania i rozpoznawania twarzy, zobacz dane wejściowe dotyczące wykrywania twarzy i danych wejściowych na potrzeby rozpoznawania twarzy.
- Aby uzyskać informacje na temat wykrywania aktualności, zobacz samouczek.
Inne porady dotyczące rozmiaru pliku
Zwróć uwagę na następujące dodatkowe porady:
- W przypadku wykrywania twarzy podczas korzystania z modelu
FaceDetectionModel.Detection01
wykrywania zmniejszenie rozmiaru pliku obrazu zwiększa szybkość przetwarzania. W przypadku korzystania z modeluFaceDetectionModel.Detection02
wykrywania zmniejszenie rozmiaru pliku obrazu zwiększy szybkość przetwarzania tylko wtedy, gdy plik obrazu jest mniejszy niż 1920 x 1080 pikseli. - W przypadku rozpoznawania twarzy zmniejszenie rozmiaru twarzy zwiększy szybkość tylko wtedy, gdy obraz jest mniejszy niż 200 x 200 pikseli.
- Wydajność metod wykrywania twarzy zależy również od liczby twarzy na obrazie. Usługa rozpoznawania twarzy może zwrócić do 100 twarzy dla obrazu. Twarze są klasyfikowane według rozmiaru prostokąta twarzy od dużych do małych.
Wywoływanie interfejsów API równolegle, gdy jest to możliwe
Jeśli musisz wywołać wiele interfejsów API, rozważ wywołanie ich równolegle, jeśli projekt aplikacji na to pozwala. Jeśli na przykład musisz wykryć twarze na dwóch obrazach w celu przeprowadzenia porównania twarzy, możesz wywołać je w zadaniu asynchronicznym:
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);
Gładka na ruch kolczascki
Wydajność usługi rozpoznawania twarzy może mieć wpływ na wzrost ruchu, co może spowodować ograniczenie przepustowości, niższą przepływność i większe opóźnienie. Zalecamy stopniowe zwiększanie częstotliwości wywołań interfejsu API i unikanie natychmiastowych ponownych prób. Jeśli na przykład masz 3000 zdjęć do wykrywania twarzy, nie wysyłaj jednocześnie 3000 żądań. Zamiast tego wyślij 3000 żądań sekwencyjnie przez 5 minut (czyli około 10 żądań na sekundę), aby ruch sieciowy był bardziej spójny. Jeśli chcesz skrócić czas ukończenia, zwiększ liczbę wywołań na sekundę stopniowo, aby ograniczyć ruch. Jeśli wystąpi jakikolwiek błąd, zapoznaj się z tematem Obsługa błędów skutecznie , aby obsłużyć odpowiedź.
Skuteczne obsługa błędów
Błędy 429
i 503
mogą wystąpić w wywołaniach interfejsu API rozpoznawania twarzy z różnych powodów. Aplikacja musi być zawsze gotowa do obsługi tych błędów. Poniżej przedstawiono kilka rekomendacji:
Kod błędu HTTP | opis | Zalecenie |
---|---|---|
429 |
Ograniczanie przepływności | Może wystąpić limit szybkości z wywołaniami współbieżnymi. Należy zmniejszyć częstotliwość wywołań i ponowić próbę z wycofywaniem wykładniczym. Unikaj natychmiastowych ponownych prób i unikaj ponownego wysyłania wielu żądań jednocześnie. Jeśli chcesz zwiększyć limit, zobacz sekcję Request an increase (Żądanie zwiększenia limitów przydziału). |
503 |
Usługa niedostępna | Usługa może być zajęta i nie może natychmiast odpowiedzieć na żądanie. Należy wdrożyć strategię wycofywania podobną do tej dla błędu 429 . |
Zapewnianie niezawodności i obsługi
Poniżej przedstawiono inne wskazówki dotyczące zapewnienia niezawodności i wysokiej obsługi aplikacji:
- Wygeneruj unikatowy identyfikator GUID jako
client-request-id
nagłówek żądania HTTP i wyślij go przy użyciu każdego żądania. Pomaga to firmie Microsoft łatwiej badać wszelkie błędy, jeśli musisz zgłosić problem z firmą Microsoft.- Zawsze rejestruj
client-request-id
i otrzymaną odpowiedź, gdy napotkasz nieoczekiwaną odpowiedź. Jeśli potrzebujesz pomocy, podaj te informacje, aby pomoc techniczna firmy Microsoft wraz z identyfikatorem zasobu platformy Azure i okresem wystąpienia problemu.
- Zawsze rejestruj
- Przeprowadź test pilotażowy przed wydaniem aplikacji do środowiska produkcyjnego. Upewnij się, że aplikacja może prawidłowo i skutecznie obsługiwać błędy.
Następne kroki
W tym przewodniku przedstawiono sposób poprawiania wydajności podczas korzystania z usługi rozpoznawania twarzy. Następnie postępuj zgodnie z samouczkiem, aby skonfigurować działające rozwiązanie programowe, które łączy logikę po stronie serwera i po stronie klienta w celu wykrywania na żywo twarzy na użytkownikach.