Izboljšajte razširljivost za API-je Amazon Rekognition brez stanja z uporabo več regij PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Izboljšajte razširljivost za API-je Amazon Rekognition brez stanja z uporabo več regij

V prejšnjih blog postsmo opisali rešitev za preverjanje identitete od konca do konca v eni sami regiji AWS. Rešitev uporablja Amazonsko ponovno vžiganje API-ji DetectFaces za zaznavanje obrazov in CompareFaces za primerjavo obrazov. Te API-je obravnavamo kot API-je brez stanja, ker niso odvisni od Amazon Rekognition zbirka obrazov. Prav tako so idempotentni, kar pomeni, da bodo ponavljajoči se klici z istimi parametri vrnili enak rezultat. Zagotavljajo prilagodljive možnosti za prenos slik, bodisi prek Preprosta storitev shranjevanja Amazon (Amazon S3) lokacija ali neobdelani bajti.

V tej objavi se osredotočamo na Slika Amazon Rekognition API-ji brez stanja in razpravljali o dveh možnostih posredovanja slik in o tem, kdaj izbrati eno pred drugo z vidika sistemske arhitekture. Nato razpravljamo o tem, kako prilagoditi API-je brez stanja, da premagamo nekatere regionalne omejitve. Ko govorimo o razširljivosti, se pogosto sklicujemo na največje število transakcij na sekundo (TPS), ki jih rešitev zmore. Na primer, ko gostite velik dogodek, ki uporablja računalniški vid za zaznavanje obrazov ali oznak predmetov, lahko naletite na skok prometa in ne želite, da se sistem duši. To pomeni, da morate včasih povečati TPS in celo preseči kvoto regionalnih storitev, ki jo imajo API-ji Amazon Rekognition. Ta objava predlaga rešitev za povečanje TPS API-jev brez stanja z uporabo več regij.

API-ji Amazon Rekognition brez stanja

Od API-jev Amazon Rekognition Image, ki so na voljo, CompareFaces, DetectFaces, Označi oznake, DetectModerationLabels, DetectProtectiveEquipment, DetectTextin RecognizeCelebrities so brez državljanstva. Zagotavljajo tako možnosti Amazon S3 kot raw bytes za posredovanje slik. Na primer, v sintaksi zahteve za DetectFaces API, obstajata dve možnosti za prehod na Image polje: Bytes or S3Object.

Pri uporabi S3Object tipična arhitektura je naslednja.

Ta rešitev ima naslednji potek dela:

  1. Odjemalska aplikacija dostopa do spletne strani, ki jo gosti Ojačaj AWS.
  2. Odjemalska aplikacija je overjena in avtorizirana z Amazon Cognito.
  3. Odjemalska aplikacija naloži sliko v vedro S3.
  4. Amazon S3 sproži an AWS Lambda funkcijo za klic Amazon Rekognition.
  5. Funkcija Lambda kliče API-je Amazon Rekognition z možnostjo S3Object.
  6. Funkcija Lambda ohrani rezultat na an Amazon DynamoDB miza.

Izberite S3Object možnost v naslednjih scenarijih:

  • Slika je datoteka v formatu PNG ali JPEG
  • Celoten sklad namestite v isto regijo, kjer je na voljo Amazon Rekognition
  • Regionalna kvota storitev Amazon Rekognition API ustreza vašim sistemskim zahtevam

Če ne izpolnjujete vseh teh zahtev, morate izbrati Bytes možnost.

Uporabite API-je Amazon Rekognition Stateless v drugi regiji

En primer uporabe Bytes možnost je, ko želite uvesti svoj primer uporabe v regiji, kjer Amazon Rekognition ni splošno na voljo, na primer, če imate stranko v Južni Ameriki (sa-east-1) Regija. Za rezidenčnost podatkov mora biti vedro S3, ki ga uporabljate za shranjevanje slik uporabnikov sa-east-1, vendar želite za svojo rešitev uporabiti Amazon Rekognition, čeprav ni splošno na voljo v sa-east-1. Ena od rešitev je uporaba Bytes možnost klica Amazon Rekognition v drugi regiji, kjer je Amazon Rekognition na voljo, kot je npr us-east-1. Naslednji diagram ponazarja to arhitekturo.

Priznanje v različnih regijah

Ko se sproži funkcija Lambda (4. korak), mora funkcija namesto neposrednega klica Amazon Rekognition z lokacijo S3 slike pridobiti sliko iz vedra S3 (5. korak), nato pa poklicati Amazon Rekognition z neobdelanimi bajti slike (korak 6). Sledi delček kode funkcije 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))

Upoštevajte, da prejšnji delček kode deluje neposredno za formate JPEG ali PNG. Za druge formate slik, kot je BMP, je potrebna dodatna obdelava slik za pretvorbo v bajte JPEG ali PNG pred pošiljanjem v Amazon Rekognition. Naslednja koda pretvori bajte BMP v 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'])

Povečajte TPS API-jev brez stanja tako, da klice API-jev razširite na več regij

Še en primer uporabe Bytes možnost je, da lahko razširite TPS API-jev brez stanja tako, da klice API-jev razširite na več regij. Na ta način niste omejeni s kvoto regionalnih storitev API-ja, ker lahko pridobite dodatne TPS iz drugih regij.

V naslednjem primeru je ustvarjena funkcija Lambda za klic Amazon Rekognition DetectLabels API z Bytes možnost. Če želite povečati največji TPS, lahko razporedite klice API-ja v več regij z utežmi. Največji TPS, ki ga lahko dosežete, se izračuna z: min(region_1_max_tps/region_1_weight, region_2_max_tps/region_2_weight, … region_n_max_tps/region_n_weight). Naslednji primer uporablja us-east-1 in us-west-2 Regije.

razširiti Rekognition promet

Delček kode za klic DetectLabels API je naslednji:

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)

Ker us-east-1 in us-west-2 oba imata največ 50 TPS za API Amazon Rekognition DetectFaces, klice API-ja lahko enakomerno porazdelite s težo 50/50, tako da nastavite spremenljivko okolja REGION_1_TRAFFIC_PERCENTAGE na 50. Na ta način lahko teoretično dosežete min(50/50%, 50/50%) = 100 TPS.

Za potrditev ideje je funkcija Lambda izpostavljena kot REST API z Amazon API Gateway. Potem JMeter se uporablja za nalaganje preskusa API-ja.

nalaganje testnih klicev API-ja za prepoznavanje

REGION_1_TRAFFIC_PERCENTAGE je najprej nastavljen na 100, na ta način vse DetectFaces Klici API-ja so poslani na us-east-1 samo. Teoretično je največji TPS, ki ga je mogoče doseči, omejen s kvoto storitve v us-east-1, kar je 50 TPS. Naloži test na končni točki API po meri, začenši s 50 sočasnimi nitmi, postopno dodajanjem 5 niti, dokler ProvisionedThroughputExceededException se je vrnil iz Amazon Rekognition opaziti.

REGION_1_TRAFFIC_PERCENTAGE je nato nastavljen na 50, na ta način vse DetectLabels Klici API-ja so enakomerno poslani us-east-1 in us-west-2. Teoretično je največji TPS, ki ga je mogoče doseči, kvota storitev, ki jo združita obe regiji in je 100 TPS. Znova začnite preskus obremenitve s 100 niti, da ugotovite največji TPS.

Naslednja tabela povzema rezultate obremenitvenega testiranja.

Odstotek klicev API-ja DetectLabels na us-east-1 Odstotek klicev API-ja DetectLabels na us-west-2 Največji TPS v teoriji Največje sočasno izvajanje brez ProvisionedThroughputExceededException
100 0 50 70
50 50 100 145

zaključek

Številne stranke uporabljajo API-je Amazon Rekognition Image brez stanja za različne primere uporabe, vključno s preverjanjem identitete, moderiranjem vsebine, obdelavo medijev in več. Ta objava je obravnavala dve možnosti posredovanja slik in kako uporabiti možnost neobdelanih bajtov za naslednje primere uporabe:

  • Regionalna razpoložljivost Amazon Rekognition
  • Podatki o rezidentstvu stranke
  • Povečanje TPS API-jev brez stanja Amazon Rekognition

Preverite, kako se Amazon Rekognition uporablja v različne primere uporabe računalniškega vida in začnite svojo inovacijsko pot.


O avtorjih

Izboljšajte razširljivost za API-je Amazon Rekognition brez stanja z uporabo več regij PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.Sharon Li je arhitekt rešitev pri AWS s sedežem v Bostonu, MA. Dela s podjetniškimi strankami, jim pomaga rešiti težke probleme in graditi na AWS. Zunaj službe rada preživlja čas z družino in raziskuje lokalne restavracije.

Izboljšajte razširljivost za API-je Amazon Rekognition brez stanja z uporabo več regij PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.Vaibhav šah je višji arhitekt rešitev pri AWS in svojim strankam rad pomaga pri vsem, kar je v oblaku, in omogoči njihovo pot sprejemanja oblaka. Zunaj službe rad potuje, raziskuje nove kraje in restavracije, kuha, spremlja športe, kot sta kriket in nogomet, gleda filme in serije (oboževalec Marvel) ter pustolovske dejavnosti, kot so pohodništvo, skok s padalom in seznam se lahko nadaljuje.

Časovni žig:

Več od Strojno učenje AWS