Popraw skalowalność bezstanowych interfejsów API Amazon Rekognition przy użyciu wielu regionów PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Popraw skalowalność bezstanowych interfejsów API Amazon Rekognition przy użyciu wielu regionów

W poprzednim bloguopisaliśmy kompleksowe rozwiązanie do weryfikacji tożsamości w jednym regionie AWS. Rozwiązanie wykorzystuje tzw Amazon Rekognition Pszczoła Wykryj twarze do wykrywania twarzy i PorównajTwarze do porównania twarzy. Uważamy te interfejsy API za bezstanowe interfejsy API, ponieważ nie zależą one od Amazon Rekognition kolekcja twarzy. Są również idempotentne, co oznacza, że ​​powtarzające się wywołania z tymi samymi parametrami zwrócą ten sam wynik. Zapewniają one elastyczne opcje przekazywania obrazów, albo przez an Usługa Amazon Simple Storage (Amazon S3) lokalizacja lub surowe bajty.

W tym poście skupiamy się na Obraz rozpoznawania Amazon bezstanowych interfejsów API i omówić dwie opcje przekazywania obrazów oraz wybór jednej z nich z punktu widzenia architektury systemu. Następnie omówimy sposób skalowania bezstanowych interfejsów API w celu przezwyciężenia niektórych ograniczeń regionalnych. Mówiąc o skalowalności, często odnosimy się do maksymalnej liczby transakcji na sekundę (TPS), jaką może obsłużyć rozwiązanie. Na przykład podczas organizowania dużego wydarzenia, które wykorzystuje widzenie komputerowe do wykrywania twarzy lub etykiet obiektów, możesz napotkać skok ruchu i nie chcesz ograniczać systemu. Oznacza to, że czasami trzeba zwiększyć TPS, a nawet wyjść poza regionalny limit usług Amazon Rekognition API. W tym poście zaproponowano rozwiązanie zwiększające TPS bezstanowych interfejsów API przy użyciu wielu regionów.

Bezstanowe API Amazon Rekognition

Spośród dostępnych interfejsów API Amazon Rekognition Image, PorównajTwarze, Wykryj twarze, Wykryj etykiety, Wykryj etykiety moderacji, Wykryj sprzęt ochronny, Wykryj tekst, Rozpoznaj gwiazdy są bezpaństwowcami. Zapewniają opcje Amazon S3 i raw bytes do przekazywania obrazów. Na przykład w składni żądania pliku DetectFaces API, istnieją dwie opcje do przekazania do Image pole: Bytes or S3Object.

Podczas korzystania z S3Object opcja, typowa architektura jest następująca.

To rozwiązanie ma następujący przepływ pracy:

  1. Aplikacja kliencka uzyskuje dostęp do strony internetowej hostowanej za pomocą Wzmocnienie AWS.
  2. Aplikacja kliencka jest uwierzytelniana i autoryzowana za pomocą Amazon Cognito.
  3. Aplikacja kliencka przesyła obraz do zasobnika S3.
  4. Amazon S3 wyzwala AWS Lambda funkcja wywołująca Amazon Rekognition.
  5. Funkcja Lambda wywołuje API Amazon Rekognition z opcją S3Object.
  6. Funkcja Lambda przechowuje wynik do an Amazon DynamoDB tabela.

Wybierz S3Object opcję w następujących scenariuszach:

  • Obraz jest plikiem w formacie PNG lub JPEG
  • Wdrażasz cały stos w tym samym regionie, w którym dostępne jest Amazon Rekognition
  • Regionalny limit usług Amazon Rekognition API spełnia Twoje wymagania systemowe

Jeśli nie spełniasz wszystkich tych wymagań, powinieneś wybrać Bytes opcja.

Użyj bezstanowych interfejsów API Amazon Rekognition w innym regionie

Jeden przykład użycia Bytes opcja jest wtedy, gdy chcesz wdrożyć swój przypadek użycia w regionie, w którym Amazon Rekognition nie jest ogólnie dostępny, na przykład, jeśli masz klientów w Ameryce Południowej (sa-east-1) Region. W przypadku przechowywania danych musi znajdować się zasobnik S3, w którym przechowujesz obrazy użytkowników sa-east-1, ale chcesz użyć Amazon Rekognition dla swojego rozwiązania, mimo że nie jest ono ogólnie dostępne w sa-east-1. Jednym z rozwiązań jest użycie tzw Bytes możliwość wywołania usługi Amazon Rekognition w innym regionie, w którym usługa Amazon Rekognition jest dostępna, np us-east-1. Poniższy diagram ilustruje tę architekturę.

Uznanie w różnych regionach

Po uruchomieniu funkcji Lambda (krok 4), zamiast wywoływać Amazon Rekognition bezpośrednio z lokalizacją S3 obrazu, funkcja musi pobrać obraz z zasobnika S3 (krok 5), a następnie wywołać Amazon Rekognition z nieprzetworzonymi bajtami obrazu (krok 6). Poniżej znajduje się fragment kodu funkcji Lambda:

rekognition_region = os.getenv("REKOGNITION_REGION")
s3 = boto3.client('s3')
rekognition = boto3.client('rekognition', region_name=rekognition_region)

def handler(event, context):
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = urllib.parse.unquote_plus(
    event['Records'][0]['s3']['object']['key'], encoding='utf-8')
    s3_res = s3.get_object(Bucket=bucket, Key=key)
    rekognition_res = rekognition.detect_faces(Image={"Bytes": s3_res['Body'].read()}, Attributes=['ALL'])
    print(json.dumps(rekognition_res))

Zwróć uwagę, że poprzedni fragment kodu działa bezpośrednio w przypadku formatów JPEG lub PNG. W przypadku innych formatów obrazów, takich jak BMP, konieczne jest dodatkowe przetwarzanie obrazu w celu przekonwertowania go na bajty JPEG lub PNG przed wysłaniem do Amazon Rekognition. Poniższy kod konwertuje BMP na bajty JPEG:

import io
from PIL import Image

s3_res = s3.get_object(Bucket=bucket, Key=key)
bmp_img = Image.open(io.BytesIO(s3_res['Body'].read()))
buffered = io.BytesIO()
rgb_img = bmp_img.convert('RGB')
rgb_img.save(buffered, format="JPEG")
rekognition_res = rekognition.detect_faces(Image={"Bytes": buffered.getvalue()}, Attributes=['ALL'])

Skaluj TPS bezstanowych interfejsów API, rozkładając wywołania API na wiele regionów

Inny przypadek użycia Bytes opcją jest skalowanie w górę TPS bezstanowych interfejsów API poprzez rozłożenie wywołań API na wiele regionów. W ten sposób nie jesteś ograniczony limitem usługi regionalnej API, ponieważ możesz uzyskać dodatkowe TPS z innych regionów.

W poniższym przykładzie tworzona jest funkcja Lambda w celu wywołania usługi Amazon Rekognition DetectLabels API z Bytes opcja. Aby zwiększyć maksymalny TPS, możesz rozłożyć wywołania API na wiele regionów za pomocą wag. Maksymalny TPS, jaki możesz osiągnąć, oblicza się ze wzoru: min(region_1_max_tps/region_1_weight, region_2_max_tps/region_2_weight, … region_n_max_tps/region_n_weight). Poniższy przykład używa us-east-1 i us-west-2 Regiony.

rozprzestrzeniać ruch Rekognition

Fragment kodu do wywołania metody DetectLabels API wygląda następująco:

region_1 = os.getenv("REKOGNITION_REGION_1")
region_2 = os.getenv("REKOGNITION_REGION_2")
region_1_traffic_percentage = int(os.getenv("REGION_1_TRAFFIC_PERCENTAGE"))

# randomly generate a number between 1, 100
random_num = random.randint(1, 100)
region = region_1 if random_num <= region_1_traffic_percentage else region_2
rekognition = boto3.client('rekognition', region_name=region)
response = rekognition.detect_labels(Image={"Bytes": image_bytes})
print(response)

Bo us-east-1 i us-west-2 oba mają maksymalnie 50 TPS dla Amazon Rekognition DetectFaces API, możesz równomiernie rozłożyć wywołania API z wagą 50/50, ustawiając zmienną środowiskową REGION_1_TRAFFIC_PERCENTAGE do 50. W ten sposób teoretycznie możesz osiągnąć min(50/50%, 50/50%) = 100 TPS.

Aby zweryfikować ten pomysł, funkcja Lambda jest udostępniana jako interfejs API REST Brama Amazon API, następnie JMeter służy do testowania obciążenia interfejsu API.

test obciążenia Wywołania API Rekognition

REGION_1_TRAFFIC_PERCENTAGE jest najpierw ustawiony na 100, w ten sposób wszystkie DetectFaces Wywołania API są wysyłane do us-east-1 tylko. Teoretycznie maksymalny TPS, jaki można osiągnąć, jest ograniczony limitem usługi w us-east-1, czyli 50 TPS. Test obciążenia na niestandardowym punkcie końcowym interfejsu API, zaczynając od 50 współbieżnych wątków, stopniowo dodając 5 wątków, aż ProvisionedThroughputExceededException obserwowany jest powrót z Amazon Rekognition.

REGION_1_TRAFFIC_PERCENTAGE jest następnie ustawiany na 50, w ten sposób wszystko DetectLabels Wywołania API są równomiernie wysyłane do us-east-1 i us-west-2. Teoretycznie maksymalny TPS, jaki można osiągnąć, to limit usług, który łączą oba regiony, czyli 100 TPS. Rozpocznij ponownie test obciążenia od 100 wątków, aby znaleźć maksymalny TPS.

W poniższej tabeli podsumowano wyniki testów obciążenia.

Procent wywołań interfejsu API DetectLabels do us-east-1 Procent wywołań interfejsu API DetectLabels do usługi us-west-2 Maksymalny TPS w teorii Maksymalne jednoczesne przebiegi bez ProvisionedThroughputExceededException
100 0 50 70
50 50 100 145

Wnioski

Wielu klientów korzysta z bezstanowych interfejsów API Amazon Rekognition Image do różnych zastosowań, w tym do weryfikacji tożsamości, moderowania treści, przetwarzania multimediów i nie tylko. W tym poście omówiono dwie opcje przekazywania obrazów i sposób korzystania z opcji surowych bajtów w następujących przypadkach użycia:

  • Dostępność regionalna Amazon Rekognition
  • Przechowywanie danych klienta
  • Skalowanie TPS bezstanowych interfejsów API Amazon Rekognition

Sprawdź, jak Amazon Rekognition jest używany w różne przypadki użycia wizji komputerowej i rozpocznij swoją innowacyjną podróż.


O autorach

Popraw skalowalność bezstanowych interfejsów API Amazon Rekognition przy użyciu wielu regionów PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Sharon Lic jest architektem rozwiązań w firmie AWS z siedzibą w Bostonie w stanie Massachusetts. Pracuje z klientami korporacyjnymi, pomagając im rozwiązywać trudne problemy i budować na AWS. Poza pracą lubi spędzać czas z rodziną i zwiedzać lokalne restauracje.

Popraw skalowalność bezstanowych interfejsów API Amazon Rekognition przy użyciu wielu regionów PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.Vaibhav Shah jest starszym architektem rozwiązań w AWS i lubi pomagać swoim klientom we wszystkich kwestiach związanych z chmurą oraz umożliwiać im wdrożenie chmury. Poza pracą uwielbia podróżować, odkrywać nowe miejsca i restauracje, gotować, uprawiać sporty, takie jak krykiet i piłka nożna, oglądać filmy i seriale (fan Marvela) oraz przygody, takie jak piesze wędrówki, skoki ze spadochronem, a lista jest długa.

Znak czasu:

Więcej z Uczenie maszynowe AWS